異步會話Bean調用
EJB 3.1引入了一個強大功能,那就是可以異步調用會話Bean方法。對于一個異步調用,允許會話Bean執行它的操作時,用戶端并行處理其它事情。
通過@Asynchronous注解讓一個方法支援異步,也可以使用一個部署描述符将一個方法指定為異步的。
異步方法可以傳回一個java.util.concurrent.Future<V>或void對象,Future<V>對象容納了異步操作傳回的結果,你可以通路Future<V>對象檢索一個結果值,檢查異常或取消一個正在進行中的調用。Future<V>接口提供一個get()方法檢索值,當然,你也可以其它合适的類檢索值,如 AsyncResult<V>,實際上它自己實作了一個Future<V>接口。
在下面的例子中,performCalculation()方法是異步的,它使用AsyncResult<V>類檢索Future<V>對象傳回的值。
[email protected]
2. Public class CalculatorBean implements CalculatorService {
3. ...
4.
5. @Asynchronous
6. public Future<Integer> performCalculation(...) {
7.
8. // ... do calculation
9.
10. Integer result = ...;
11. return new AsyncResult<Integer>(result);
12. }
13. }
14.
簡化打包
EJB規範始終要求企業Bean打包到一個叫做ejb-jar檔案的企業子產品中,因為它一般用于Java EE Web應用程式,這種打包方法顯得有些累贅,應用程式被強制使用一個Web應用程式使用的歸檔檔案(.war),一個企業Bean使用的ejb-jar檔案,還有一個包含其它包的企業歸檔檔案(.ear),如圖1所示,這種打包方法非常複雜,它需要指定子產品之間共享的類和資源。
EJB 3.1解決了這個問題,簡化了打包的複雜程度,徹底消除了企業Bean類必須打包進ejb-jar檔案的限制,如圖2所示,現在你可以直接将EJB類放到.war檔案中,使用打包Web應用程式類相同的打包規則,這意味着你可以将EJB類放到WEB-INF/classes目錄下,或者放到WEB- INF/lib目錄下的一個.jar檔案中。EJB部署描述符也是可選的,如果你需要它,你可以将EJB部署描述符打包到WEB-INF/ejb- jar.xml檔案中。
輕量級EJB(EJB Lite)
對許多應用程式而言,EJB提供了比應用程式真正需要的多得多的功能,使用EJB的應用程式通常隻需要使用EJB 3.1的一個子集,輕量級EJB就是為滿足這種需要誕生的。
輕量級EJB簡化了許多開發人員使用EJB,使用輕量級EJB的開發人員在他們的應用程式中需要學習使用一部分功能即可。此外,使用輕量級EJB開發的應用程式可以運作在輕量級EJB或全功能EJB 3.1 API實作的應用程式伺服器上。
注意,輕量級EJB不是一個産品,它是EJB 3.1 API的一個子集,輕量級EJB的目标是提供EJB 3.1的一個子集,滿足大多數應用程式業務邏輯層的需要,它也為供應商提供了更好的靈活性,為了滿足這些模闆,輕量級EJB提供了以下功能:
1、有狀态,無狀态和單元素集合會話Bean;
2、本地EJB接口或無接口;
3、攔截器;
4、容器管理的和Bean管理的事務;
5、聲明和程式設計安全;
6、嵌入式API。
更多EJB 3.1新特性
EJB 3.1除前面談到的這些新特性外,還帶來了更多的新特性和改進,例如,它包括一個用于Java SE環境的嵌入式API和容器,這些特性使在Java EE容器外(通常指Java SE環境)測試EJB 元件更容易,另外,EJB 3.1引入的單元素集合為EJB應用程式提供了一個友善的方法,在應用程式初始化或關閉期間接受回報,預設情況下,由容器決定何時執行個體化單元素集合執行個體,但你可以通過@Startup注解,強制容器在應用程式初始化期間執行個體化單元素集合執行個體,允許Bean定義一個@PostConstruct方法保證在應用程式啟動時調用,此外,@PreDestroy方法可以保證應用程式關閉時調用。