Java EE 6新特性嘗鮮:EJB 3.1重要變化總覽
譯文【51CTO精選譯文】EJB 3.1規范的主要目標是使EJB盡可能簡單,其核心思想是簡化EJB架構同時引入新的功能,EJB 3.1中一些重要的變化包括:
51CTO編輯推薦:Java EE 6遙遙無期 預覽版兩極分化
移除了本地事務接口:EJB 3.0移除了復雜的本地和遠程接口,為簡單舊式Java接口(plain old Java interface,POJI)開路,EJB 3.1更進了一步,事務接口也不用再強制遵循了,類似于POJO,如JPA中的實體和消息驅動Beans,在Java EE 6中,開發者可以不用事務接口編寫會話Beans了:
- @Stateless
- public class StockQuoteBean {
- public double getStockPrice(String symbol) {
- ...
- }
- }
引入了Singleton Beans:引入Singleton beans概念主要是為了共享應用數據和支持一致性訪問,當一個Bean被標記為Singleton時,在整個應用層容器只能保證每個JVM共享一個實例,對于緩存這一規定是行之有效的,Singleton beans和其它EJB一樣,它們是開發人員可以通過注解將它們標記為Singleton beans的POJO。
默認情況下,所有Singleton beans都是事務性和線程安全的,具有靈活的并發性選項,Java EE 6也引入了并發性注解在getter和setter函數上執行鎖定的讀/寫操作。
- @Singleton
- @Startup
- public class CounterBean {
- private int count;
- @PostConstruct
- public void initialize() {
- count=5;
- }
- }
直接用WAR文件打包EJB組件:EJB 3.1中一個重要的改進是可以直接將EJB組建打包到WAR文件中,不用再獨立創建jar文件了,EJB 3.1為Web應用程序提供了一個簡化的打包機制,圖1顯示了EJB 3.1以前的打包方式。
圖 1 EJB 3.1之前的打包方式(EJB 3.0打包結構)
使用EJB 3.1后,開發人員可以直接將classes目錄下的EJB和servlets一起打包到WAR文件中,圖2顯示了EJB 3.1的打包方式。
圖 2 EJB 3.1打包方式結構圖
在Java SE環境中嵌入API執行EJB:這個特性背后的思想是允許EJB在Java SE環境中運行,即客戶端和EJB在相同的JVM中運行,為了運行EJB,Java EE 6提供了一個嵌入式EJB容器,使用JNDI進行檢查,這為測試,批處理過程和在桌面應用程序中使用EJB提供了便利,嵌入式EJB容器提供了一個管理EJB的環境,這個環境支持有限的服務,javax.ejb.EJBContainer類表示一個嵌入式容器。
異步會話Beans:一個支持異步函數調用的會話Bean,使用@Asynchronous注解的Bean函數是異步調用的,在EJB 3.1之前,在會話Bean上的任何函數調用都是同步的。異步函數可以返回一個java.util.concurrent API的Future
EJB Lite:許多企業級應用不需要EJB完整的功能,因此在EJB 3.1中引入了EJB Lite,它是EJB API的一個子集,EJB Lite包括了創建一個企業級應用的所有功能,但不包括專業的API。EJB Lite提供了廠家選項,讓廠家可以在它們自己的產品中實施EJB API的子集,使用EJB Lite創建應用程序可以部署到任何支持EJB的服務器上,不管它是完整的EJB還是EJB Lite,嵌入式容器也支持EJB Lite,EJB Lite有以下EJB API子集:
◆會話Bean組件(Stateless,stateful和singleton會話Bean)
◆只支持同步調用
◆容器管理和Bean管理事務
◆聲明和編程安全
◆截取器
◆支持部署描述信息(ejb-jar.xml)
圖3中顯示的EJB Lite支持的功能在完整的EJB中也全部支持。
圖 3 EJB 3.1 Lite和EJB 3.1完整版支持的功能對比
原文:New Features in Java EE 6
作者:Sangeetha S.
【編輯推薦】