首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Gavin King深度訪談:JSR-299/CDI與Weld 1.0對Java EE生態的重塑

     編輯:J2EE

背景:Weld 1.0.0發布與CDI標準化

Red Hat JBoss發布Weld 1.0.0——JSR-299(Contexts and Dependency Injection for Java EE,簡稱CDI)參考實現。GlassFish v3與JBoss AS 5.2內置Weld。關鍵突破:Weld不依賴完整應用服務器,可運行於Jetty 6.1/Tomcat 6/Servlet容器,甚至Java SE 5+環境(發布包含控制台/Swing演示)。

JSR-330(注入註解標準化)對CDI的影響

「CDI現使用JSR-330註解聲明注入點。影響微乎其微,因330模型與299大同小異,僅註解名稱不同。關鍵點:330未定義完整DI方案,僅定義帶修飾符的注入點,其他(作用域、攔截器、裝飾器、事件)均無涉及。」

CDI與EJB在Managed Bean模型下的統一

  • Managed Bean規範源自JSR-299早期草案(「Simple Web Bean」),支援DI、EL命名、攔截器,無EJB編程約束
  • 爭議:Red Hat主張需要普通類注入,其他專家反對新增EE組件
  • 妥協:Managed Bean獨立成規範,作為所有EE組件編程模型基礎(含EJB)
  • 現狀:EJB可視為特殊Managed Bean(額外約束+功能),大幅降低EE學習曲線

EJB是否仍需獨立組件模型?

「EE未來:將EJB專有功能(@TransactionAttribute、@RolesAllowed)通用化至所有Managed Bean。但EJB在消息端點、遠程/異步調用、定時器領域仍有不可替代價值,其生命週期模型在此場景極具意義。」

從Seam到CDI:JSF 2時代的新分工

  • Seam 2大量精力填補JSF 1.x坑洞,無暇整合前沿表現層技術
  • JSF 2修復核心缺陷,釋放Seam精力轉向高價值領域
  • CDI三大使命:①聲明式上下文/狀態/生命週期管理 ②類型安全DI(類Guice) ③SPI支撐平台擴展性

CDI SPI:Java EE 6擴展性基石

「我們渴望技術以插件形式接入平台。通過擴展點與SPI,第三方技術能像內置設施一樣整潔高效地運行。」(JSR-316規範原文)

可移植擴展能力:
✓ 提供自定義Bean/攔截器/裝飾器
✓ DI注入服務至擴展對象
✓ 實現自定義作用域上下文
✓ 外部註解增強或提供基於註解的元數據

Seam 3:CDI生態的首個豐富擴展套件

  • 核心引擎:CDI
  • SPI擴展:BPM整合、Drools規則引擎、PDF/Email模板、Excel生成
  • 可運行於任意JSR-299環境(含所有Java EE 6容器、Tomcat、Jetty、Resin)

Red Hat戰略:CDI/Seam作為所有項目和平台未來方向

「團隊正與ESB、SOA-P緊密合作確保Seam 3滿足特定需求。項目已視Seam為正確選擇,無需修改即可集成。」(Mark Little, JBoss CTO)

Gavin確認:Weld比Seam 2更專注、測試更完善的基礎設施,可應用於非Web構建場景。

多元化CDI實現生態

  • Caucho Resin:CanDI實現,容器內部大量使用CDI
  • Apache OpenWebBeans:社區驅動實現
  • Granite DS:Flex RIA場景CDI實現,「JCDI極適合事件驅動Flex架構,Seam特性豐富但無需重複造RIA前端輪子」
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved