作者 Charles Humble譯者 張龍 發布于 2008年3月20日 上午1時54分
EJB3.1專家組通過JCP發布了該規范的早期草案 。EJB的新版本期望作為2008年底發布的Java EE 6規范的一部分,它主要面向如下兩個方面:簡化工作(從EJB3開始)以及增加Java企業社區要求的新特性。主要改變如下:
- 一個簡化的本地視圖,無需單獨的本地業務接口就可提供session bean的訪問。通過這種方式,開發人員僅僅使用一個bean類就能實現一個組件。
- 一 個單例session bean組件:在應用所運行的JVM上,針對每個應用僅實例化一次,該單例session bean組件的目的是為應用提供一個緩存狀態的簡單方法。作為一個EJB,該單例可以訪問標準的EJB中間件服務集——事務管理、安全、遠程、依賴注入等 等。當容器調用session bean類的newInstance方法時該單例啟動。默認情況下,由容器負責決定何時生成一個實例,然而開發者可以通過使用@Startup注解或者相 應的部署描述符讓實例在容器啟動時就實例化。一個單例可能依賴另一個單例(通過@DependsOn注解標明),在這種情況下被依賴的單例就需要先實例 化。單例session bean的生命周期與創建它的容器保持一致,但是其狀態會因為JVM的停止或崩潰而喪失。因為其意在共享,所以它支持并發訪問,這可由容器管理或者在每個 bean中由開發者管理。
- 基于日歷的EJB定時器表達式和自動創建的定時器:定時器服務可以通過使用類似于UNIX cron工具的基于日歷的語法來表示定時器回調時間表。例如下面的時間表代表了“每周一、周三和周五的 3:15”:@Schedule(minute=“15”, hour=”3”, dayOfWeek=”Mon,Wed,Fri”)。定時器服務也支持通過bean的元數據或者部署描述符自動創建定時器。自動創建的定時器是在應用部署 時由容器創建的。
- 異步的session bean調用:默認情況下session bean在其調用期內會阻塞客戶端。通過一個異步的方法調用,容器將控制權返還給客戶端并且在一個單獨的線程上繼續處理該調用。一個異步方法能返回一個 Future對象,該對象使得客戶端可以獲得一個結果值、檢查異常或者嘗試取消正在進行中的調用。
- 對于 Enterprise JavaBeans功能的一個輕量級子集的定義,它們能夠在Java EE Profiles內(如Java EE Web Profile)被提供,該子集將支持EJB3.1 APIs的如下部分:無狀態、有狀態以及單例session beans、本地業務視圖與非接口視圖(no-interface view)、同步方法調用、攔截器、聲明式安全、容器管理的事務(CMT)劃分、bean管理的事務(BMT)劃分、企業bean環境、Java Persistence 2.0 API、JTA1.1的用戶事務接口、Common Annotations 1.0以及由基本的Java SE 6平臺(JDBC、RMI-IIOP、JNDI、JAXP、Java IDL及JAAS)所支持的企業APIs。輕量級的EJB容器必須向企業bean實例提供一個JNDI API命名空間。打包的要求也得到了簡化以便EJB組件可以直接打包到.war文件中——在這種情況下,EJB就駐留在WEB-INF/classes目 錄下而不再需要ejb-jar。其可選的ejb-jar.xml部署描述符放置在WEB-INF中。
規范的領導者Ken Saks已經開始撰寫博文以提供更多的關于專家組工作情況的信息,包括對通用EJB組件映射的支持:
“對開發者來說造成挫敗的一個共同的源泉就是用來解析和查找EJB引用的映射信息(如全局JNDI名)的不可移植性。我們不斷探索以將該信息標準化使得應用無需特定于廠商的EJB組件映射就可以部署”
專家組仍處在定義EJB3.1過程的早期階段,所以上面列出來的特性有可能發生變化。這也是我們通過郵件向專家組提供反饋信息來參與到下一版規范的制定工作中去的絕佳機會。