JSF 正開始憑借其 Java Web 標准的地位主導 Java Web 應用程序市場隨著更多的開發人員受托使用 JSF 作為基礎來架構應用程序他們發現 JSF 的核心規范中清楚地說明 JSF 不是為成為一個完整的 Web 應用程序框架而設計的相反它提供一個健壯的事件驅動的 API 和 UI 組件庫用於構建更復雜的應用程序框架
我在尋找用於彌補 JSF 的組件驅動架構的擴展時發現 Shale 和 Struts 都有不足之處我排除了 Struts 因為它將 JSF 看作是面向更大范圍的設計而 Shale 似乎更靠近一些它基本上是基於 JSF但是 對此我持保留意見相反JBoss Seam 是一個全面的應用程序框架它構建在 JSF 的基礎上但是並沒有損害它的核心目標
尋找 Seam
剛剛閱讀到關於 JBoss Seam 的文章的第一頁我就知道 Seam 正是我要找的項目Seam 的開發人員尤其是 Gavin King在經過足夠多的實際的開發之後知道一個 Web 應用程序框架必須從一開始就攻破難題包括上下文狀態管理RESTful 和用戶友好的 URLAjax remoting適當的異常處理和約定優於配置令 Java 開發人員欣喜的是Seam 可以滿足所有這些需求甚至可以滿足更多需求如果您正使用 JSF並且還沒聽說過 Seam那麼我強烈建議您看看 Seam 的參考文檔Seam 附帶的手冊就是最好的資料!
盡管 Seam 顯然非常適合作為 JSF 的補充但是在激烈的競爭環境中它遭到了一定程度的輕視當今市場中充斥著各種各樣的 Web 應用程序框架 —— 包括 Shale 和 Struts 新來者往往不受重視Seam 還沒有在主流行列站穩腳跟 Seam 沒有很快流行的另一個原因是關於這種框架的某些流言使 Java 開發人員沒能認識到它的直接優點
我要粉碎的一個流言是Seam 只有和 EJB 一起使用時才有用或者說在使用 Seam 開發應用程序時需要一個 EJB 容器實際上Seam 的文檔清楚地駁斥了這種誤解Seam 並不要求組件是 EJB甚至在沒有兼容 EJB 的容器時也能使用 如果說只有在使用 EJB 的同時才能使用 Seam那麼無異於說只有在使用 Hibernate 的同時才能使用 Spring雖然這兩對都有很強的互補性但是每一對的兩者之間都不是相互依賴的
對 EJB 的考慮
正如我將要解釋的那樣Seam 通過一些有價值的 hook 和組件管理進程 擴展默認 JSF 生命周期還可以完全獨立於 EJB 使用 Seam但是要記住和 EJB 一樣Seam 依賴於 JDK 注釋元數據進行組件聲明因此使用 Seam 時還需要同時使用兼容 Java 的 JVM圖 顯示了一個 Seam POJO 實現的應用程序堆棧
圖 一個 Seam POJO 應用程序堆棧
實際上即使完全不引用 EJB jar 或描述符文件也可以使用 Seam 的很多功能當和 POJO 一起使用 Seam 時該框架保留對組件實例化的完全控制並且不要求任何專門的配置Seam 負責大多數 Java 注釋處理而不需要依賴於 EJB 中的任何機制的確 依賴於 EJB 容器的一組有限的注釋則是專用於那個環境的在某些情況下將 Seam 集成到一個沒有 EJB 耦合的 IT 投資中可以獲得更好的成本效益如何使用 Seam 視個人偏好而定
配置並使用
如今有那麼多種 Java 框架每天只有有限的那麼多小時顯然如果 Seam 難於集成的話它就無立足之地幸運的是將 Seam 添加到項目中很簡單因為 JSF 生命周期仍然是 Seam 應用程序的中心部分所以不需要經歷一個再訓練時期只需添加 個 jar 文件注冊一個 servlet 監聽器和一個 JSF phase 監聽器最後再加上一個空白的 Java 屬性文件完成這些設置後就可以一次性地將本地 JSF 應用程序轉移到 Seam 管理的 bean 上
要開始使用 Seam首先需要將所需的 jar 文件添加到項目中如果您當前不是使用 Hibernate或者還沒有升級到最新的版本那麼在設置時需要執行一個額外的步驟這裡需要包含來自 Hibernate distribution 的 jar以及它的眾多的依賴項Seam 還使用 Hibernate 注釋用於數據驗證所以除了主 Hibernate jar 之外還必須包括那個擴展 jar需要的 Seam 發行版中的庫有 jbossseamjar 和 jbossseamuijar以及兩個支持庫Javassist(用於 Java 的加載時反射系統)和 Java Persistence API圖 中的項目樹說明了一個 Seam 項目中的 jar 集合該圖中顯示的大多數附加庫支持 JSF 的 MyFaces 實現
圖 Seam 項目中的 jar 庫
……
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26145.html