JSF 本身問題重重:它是標準而非技術(javax.faces.* 全是介面/抽象類),面向組件廠商而非應用開發者,Sun RI 只是教廠商做組件的 Demo。標準取各方交集,標準外需自行發揮。JSF 早於成熟應用誕生,預見不足在所難免:有處過度限制,有處過度放鬆被忽略。但初衷良好、可擴展性強,催生大量基於 JSF 的修補框架。
JSF - (全頁刷新) + Ajax4JSF - JSP + Facelets + 全局Page行為 + Context-filter + Restful參數綁定 + 可定制異常 + 跨重定向狀態 = 「一大碗炸醬麵」
像經無數修補的黃金聖衣,雖能用但不如重鑄。JSF 需整合模型將分散部分統一,拋棄冗餘、以集成方式融合新內容。開發者不想學習零散組件關係、Bug 分佈、選型決策,想要「明白人替我做決定、且 Make Sense」。
兩條件成就 Seam:大量零散可用組件缺乏統一形式(背景:JSF 標準)、領域深度熟悉者主導。Seam 對 JSF 的修補只是極小一步,基於 Seam 核心(Conversation 模型、CoC 理念、元註解+XML 配置、動態雙向注入、擴展 EL、內部事件監聽、Drools 安全整合、Hibernate Search/Validation/Remoting、jBPM、Groovy、iText 整合)水到渠成。
已進 Early Draft Review 的 JSR-299,借鑒 Seam/Guice,試圖將此方向推得更遠。
不說 Seam 誕生大環境與語言基礎,只說功能也行,但外在功能多由環境與內在因素決定。大環境與內在定下,細節只是做而已。所以還是得繞開 Seam 本身說些題外話。本文說明 Seam 誕生環境(外在機會、寬緯度),下文將從 Java 語言可能性(內在能力、深緯度)闡述 Seam 融合本事。