JBoss Seam 定位為「Java EE 5.0 的輕量級框架」。Java EE 本身已是框架,為何仍需 Seam?可視為 Java EE 5 標準中「遺漏的整合層」。它在 EJB 3.0 與 JSF 1.2 之上,為企業 Web 應用所有組件提供統一、易懂的程式模型,讓有狀態應用與業務流程驅動應用開發變得簡單,核心目標:提升開發者生產力與應用擴展性。
Java EE 5 核心為 EJB 3 (POJO 服務與持久化) 與 JSF (MVC Web 框架)。兩者設計理念不同:EJB 用註解配置,JSF 用 XML;組件層面互不感知。整合時開發者須手寫 Facade (如 JSF Managed Bean) 串聯,產生大量樣板碼。Seam 打破人工層,提供一致的註解式整合:EJB 3 業務組件可直接支援 JSF 表單或處理 UI 事件。同樣功能,Seam 應用程式碼 (Java + XML) 大幅減少。更整合 jBPM、JBoss Rules (Drools)、JBoss Portal 等開源框架並加以強化。部署不限於 Java EE 5 容器,亦可運行於 J2EE 1.4 或 Tomcat。
主流 ORM (Hibernate) 廣泛使用,但傳統 Web/業務框架未在「完整 Web 交互週期」 (請求到響應) 管理持久化上下文,導致 LazyInitializationException 等問題,迫使開發者寫 DTO 等醜陋手段。Seam 由 Hibernate 作者 Gavin King 設計,原生支援擴展持久化上下文:無需 DTO,直接延遲載入;持久化上下文如天然高速快取,減少資料庫交互,極大改善 ORM 效能。更可在表現層直接呈現 ORM 物件、將資料庫驗證註解用於輸入表單、導向 ORM 異常至自訂錯誤頁。
Web 應用本質多用戶、電商本質有狀態/事務,但主流框架面向無狀態,開發者須手動操作 HTTP Session 管理狀態,代碼混亂且有效能問題。Seam 組件天生有狀態,狀態由 Seam 公開管理:僅需註解標註作用域、生命週期方法,Seam 掌管其餘。優於 HTTP Session:單一 HTTP Session 可包含多個業務「對話」(Conversation),每個對話擁有獨立狀態。資料庫快取與事務自動連結應用狀態:記憶體中暫存更新,對話結束才提交,大幅降低資料庫負載。整合 jBPM 工作流引擎,以業務流程而非 UI 事件驅動應用。
多層次 AJAX 支援:內建「零 JavaScript」AJAX 元件、AJAX 化 JSF 元件、自訂 JS 函式庫。提供瀏覽器端 JS 物件直接存取伺服器 Seam 組件。先進並發模型有效管理同一用戶的多重 AJAX 請求。狀態持久化上下文作為記憶體快取,吸收高頻 AJAX 請求的資料庫壓力。正確支援延遲載入,避免簡單查詢級聯載入整個資料庫——這是當前唯一正確支援 Web 應用延遲載入的框架。
Seam 組件為純 POJO,無介面/抽象類綁定。透過依賴注入 (DI) 串聯:組件以註解聲明依賴,Seam 依當前狀態解析並注入。更進一步:雙向依賴 (Bijection)——組件 A 不僅可構造 B,還能將 B 「拋回」 Seam 供組件 C 使用。簡單應用即廣泛運用此機制 (如 Hello World 範例)。
核心設計原則:提供合理預設行為,僅在偏離預設時顯式配置。例如注入屬性預設同名。結果:配置中繼資料極簡,多數應用僅需少量 Java 註解即可完整配置,大幅降低複雜度。
早期 J2EE 將所有配置 (含類/方法名) 塞進 XML,造成「XML 地獄」:重複、易錯 (拼字錯誤成運行時錯)、樣板碼量超過 Java 代碼。Java 社區已以註解取代 XML。EJB 3 率先標準化註解用法。Seam 延伸註解程式模型至整個 Web 應用。XML 仍適用於頁面流程/業務流程定義 (集中管理、不與代碼耦合),Seam 取捨得宜。
所有組件為註解 POJO,易於單元測試:new 實例直接在 JUnit/TestNG 執行。測試多組件交互時手動建立關係 (呼叫 setter) 而非仰賴 DI。整合測試由內嵌輕量級容器支援:測試框架中逐步啟動 Seam 容器執行測試。
Seam 不只是整合框架,而是重新思考 Java EE 開發體驗的產物:統一程式模型、原生 ORM 支援、有狀態抽象、AJAX 就緒、雙向依賴、慣例優於配置、註解優先、測試友善。八大優勢共同指向核心承諾:以更少代碼構建更強大、可維護的企業應用。