從本文開始,我將會開始一個全新系列的文章——《Seam系列》。如果有關心我的部落格的朋友,應該知道早前一年多的時間我都使用Seam使用開發項目,可以算得上是略有小成。因此,我很希望與大家分享一下Seam的經驗。
為什麼要使用Seam
這個問題Seam的官方文檔以經做了很好的回答。為了方便不喜歡看文檔的朋友(不過,可以負責任地告訴你“這不是一種好習慣!” :-),如果你希望完整地瞭解一門技術,反覆閱讀文檔是必不可少的。甚至可能需要查看原始碼,當然這是對開源的技術而言),我將其中一些要點抽取出來:
只有一種“工具” Seam中的表現層組件和商務邏輯組件之間並沒有區別。 你可以根據你設計的任何架構給應用程式進行分層,而不是強制將你的應用程式邏輯硬塞進一個由你目前在使用的任何架構組合所強加給你的不適當的分層配置中。
將JSF與EJB 3.0整合 Seam將JSF和EJB3的組件模型合二為一,消除了膠合代碼,使得開發人員專註於業務問題。
整合AJAX Seam支援兩個最好的、開源的基於JSF的AJAX解決方案:JBoss RichFaces和ICEfaces。
將商務程序作為首要的基礎建築 Seam可以選擇通過jBPM提供透明的商務程序管理。
聲明式狀態管理 聲明式應用程式狀態管理通過Seam定義的豐富的context model(上下文模型)而成為可能。Bijection(雙向注入) Bijection(雙向注入)和IoC的不同之處在於它是動態、語境相關的以及雙向的。
工作區(Workspace )管理和多視窗瀏覽 Seam應用程式讓使用者自由地在多個瀏覽器視窗中切換,每個視窗都與一個不同的、安全隔離的對話關聯。
多些註解(Annotation),少些XML 這讓你擺脫了對繁瑣的JSF managed bean(JSF受管bean)的配置,減少了所需的XML,只剩下那些真正屬於XML的資訊(JSF導航規則)。
整合測試輕而易舉 Seam組件作為POJO,天生就是可以進行單元測試的。
規範也非盡善盡美 在規範中有許多漏洞(例如,GET請求的JSF生命週期中的局限性),Seam修正了這些漏洞。
Web應用程式不只是服務HTML頁面 Seam為持久化整合了JPA和Hibernate 3,為輕量化的非同步性整合了EJB Timer Service和Quartz,為工作流程整合了jBPM,為商務規則整合了JBoss規則,為電子郵件整合了Meldware Mail,為完整的文本搜尋整合了Hibernate Search和Lucene,為訊息整合了JMS,以及為頁面片斷捕捉整合了JBoss Cache。