把環境配好之后,Seam的例子也運行起來了,看了seam_reference第一章中如下幾個例子講解:
- the registration example
- the messages example
- the todo list example
- the numberguess example
又在滿江紅的網站上找了seam_reference2.0的中文文檔,主要看了《the contextual component model》一章,看完以后感覺Seam最核心的地方就是其contextual component model了,不過看完這一章以后只是對Seam有個大概的了解,對其具體的內容,細節還缺乏進一步的了解,對其優點、缺點也缺乏進一步的認識。
然后又找到了《Seam in Action》的電子書,看了一點之后還是覺得這本電子書寫得好,內容組織的很好,不象seam_reference后面的章節僅僅是羅列seam的各項功能。
今天把Seam in Action的第一章草草看了一遍,將第一章講述的內容總結如下:
1、什么是Seam
在Seam in Action中,沒有將Seam稱之為web framework,而是將其稱為application stack。Seam將Java EE中的EJB3、JSF、JPA/Hibernate、JAAS等技術融合在一起,提供了更容易使用的方式,比如conversation、page flows、buisness precesses、rule-based security、JavaScript(Ajax) remoting、PDF rendering、email組合、charting、file uploads、Groovy integration等,用以簡化web開發。
2、Seam的目標
簡化web開發
3、Seam如何集成各類技術
Seam集成了JSF、JPA和POJO Component
在Seam中將EJB3.0中的Session Bean作為JSF的managed bean,直接將表現層和業務層銜接在一起,使得Session Bean可以直接訪問web相關數據,比如request、session、application、JSF的FacesMessage、Component Tree等。而在不使用Seam時,一般都是使用JSF back bean來作為表現層和業務層之間的中介。
使用annotation中的@Name標注替代了JSF的faces-config.xml中關于managed bean的配置。
Seam不一定必須使用EJB和JPA,也可以使用POJO、Hibernate作為替代。如下圖:
上下文相關的組件模型(Seam中的核心概念)
Seam提供了7種類型的上下文,其中屬于Seam特有的兩種上下文類型分別為:Conversation Context、Business process Context。
Seam提供了統一的組件注冊、annotation、異常配置、方法攔截、統一的EL表達式等功能。其中Seam對其管理的組件攔截過程如下圖:
4、Seam的核心競爭力
更好的JSF
增強的JSF
- Seam對JSF最被認可的改進就是消除了在配置文件中聲明managed bean。
- Prerender page actions
- Managed request parameters (for a given page)
- Intelligent stateless and stateful navigation
- Transparent JSF data model and data model selection handling
- Fine-grained exception handling
- Page-level security (per view ID)
- 基于Annotation的表單驗證
- Bookmarkable command links (solving the “everything is a POST” problem)
- Entity converter for pick lists
- Conversation controls
- Support for preventing lazy initialization exceptions and nontransactional data access in the view
消除了連接Bean(ELIMINATING CONNECTOR BEANS)
用一幅圖可以很好的說明這句話的含義
引入了有狀態的變量范圍(INTRODUCING STATEFUL VARIABLE SCOPES)
擴展的Persistence Context
Spring中提供了The Session In View Filter,使得persistence manage可以在一個請求中存在,避免了常見的LazyInitializationException。在Seam中,擴展的Persistence Context可以跨越多個請求。其實擴展的Persistence Context是Conversation Context、Business Process Context的基礎。
get rich quick
Seam提供了兩種方式將Ajax集成到Seam應用中,一種是使用具有Ajax特性的JSF組件,如RichFaces和ICEFaces,另一種是可以在瀏覽器中使用JavaScript直接調用服務端的組件。
Seam還提供了另外一種意義上的Rich,即將PDF、mail等功能集成到Seam應用中。
提供了一個快速開發環境
代碼自動生成
熱部署
Seam調試頁面
不部署即可以進行單元測試
從目前我個人的理解來看,Seam的作用與能力如下:
- Seam將EJB3與JSF整合在一起,消除了JSF與業務代碼之間的間隙,直接將表現層與業務層銜接在一起
- Seam提出了Conversation Context的概念,將Stateful EJB引入到web開發中,直接與Conversation Context對應
- Seam提供了與Jbpm、itext、mail等一系列開源框架的整合,對于需要使用的相關功能的用戶來說,提供了便利性
- 提供了開發工具的整合(Seam Gen與IDE),還可以自動生成部分代碼
但由于Seam整合了如此多的框架,帶來的一個最大的缺點:學習曲線陡峭,在SSH非常流行的今天,需要面對很多新技術(JSF、EJB3、JPA等),對于一個新手來說難度比較大,如果想使Seam被更多的開發人員使用,必須加強它的文檔,目前的文檔還是太少了。
posted on 2008-12-06 23:51
The Matrix 閱讀(2284)
評論(0) 編輯 收藏 所屬分類:
JBoss Seam/JSF