歡迎您光臨本站 註冊首頁

EJB 3.1五大模式改進令Java EE 6更好用

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  EJB(Enterprise JavaBeans)是使用Java EE開發和部署業務應用系統的服務端組件架構,使用EJB編寫的應用系統是可擴展的、事務型和安全的.EJB 3.0是Java EE 5平台的一部分,相對前面的版本,它更加易於使用,它的最新版本 — JSR318:EJB 3.1 — 隨Java EE 6發布,進一步簡化了使用,並提供了許多反應常見使用模式的改進,如:

  1、無介面視圖:允許你指定一個企業Bean,只使用Bean類,不用編寫獨立的業務介面.

  2、單元素集合:讓你在一個企業Bean組件的多個實例間輕鬆地共享狀態,或是在一個應用程序的多個企業Bean組件之間共享狀態.

  3、非同步會話Bean調用:通過指定一個註解,讓你可以非同步調用會話狀態方法.

  4、簡化打包:消除了企業Bean類必須打包到ejb-jar文件的限制,現在你可以直接將EJB類放到WAR文件中.

  5、輕量級EJB:它是EJB 3.1的子集,包括大量的Java EE profiles.

  無介面視圖

  EJB 3.0本地客戶端視圖是基於普通舊式Java介面(POJI)調用本地業務介面的,本地介面定義了暴露給客戶端的業務方法,並是在Bean類上實現的,這種獨立的介面有時會帶來不必要的麻煩,並且價值也不大,相同模塊內的來自客戶端的本地訪問細粒度組件尤其如此.

  EJB 3.1通過讓本地業務介面成為可選組件簡化了這個方法,沒有本地業務介面的Bean暴露的是無介面視圖,現在你不用編寫獨立的業務介面就可以獲得相同的企業Bean功能.

  無介面視圖與EJB 3.0中的本地視圖具有相同的行為,例如,它支持如通過按引用調用語義、事務和安全傳播等特性,但無介面視圖不需要單獨的介面,即Bean類所有的公共方法自動暴露給調用者.默認情況下,任何有空implements子句,且沒有定義任何其它本地或遠程客戶端視圖的會話Bean,暴露的是一個無介面視圖.下面的會話Bean暴露了一個無介面視圖:

  1.@Stateless

  2. public class HelloBean {

  3.

  4. public String sayHello() {

  5. String message = propertiesBean.getProperty("hello.message");

  6. return message;

  7. }

  8.

  9. }

  10.

  使用本地視圖時,無介面視圖的客戶端總是獲得一個EJB引用 - 通過注入或JNDI查找,唯一的不同之處是EJB引用的Java類型是Bean類類型,而不是本地介面的類型,如下面的Bean客戶端:

  11.@EJB

  12. private HelloBean helloBean;

  13.

  14. ...

  15.

  16. String msg = helloBean.sayHello();

  注意,雖然這裡沒有介面,客戶端不能使用new()明確地實例化Bean類,那是所有Bean調用都是通過一個特殊的EJB引用,或由容器提供的代理實現的,這樣就允許容器提供其它的Bean服務,如池、容器管理的事務,併發管理等.

  單元素集合

  單元素集合Bean也被稱為單元素集合,它是一種新的會話Bean,它保證在一個特定的Java虛擬機(JVM)應用程序中只被實例化一次.使用單元素集合,你可以在一個企業Bean組件的多個實例之間輕鬆地共享狀態,也可以在一個應用程序的多個企業Bean之間共享狀態,它就象為某個應用程序緩存數據的類一樣.你可以以單元素集合形式定義類,這樣可以確保在應用程序內只有一個緩存實例,一個共享狀態.

  使用@Singleton註解定義單元素集合,如:

  1.@Singleton

  2. public class PropertiesBean {

  3.

  4. private Properties props;

  5.

  6. public String getProperty(String name) { ... }

  7.

  8. @PostConstruct

  9. public void initialize { // props = ...}

  10.

  11. }

  12.

  它只是另一種會話Bean,單元素集合可以定義相同的本地和遠程客戶端視圖,可以象無狀態的和有狀態的Bean那樣,客戶端以訪問無狀態和有狀態Bean相同的方式訪問單元素集合,即通過EJB引用.例如,下面是一個可以訪問PropertiesBean單元素集合的客戶端示例:

  13.@EJB

  14. private PropertiesBean propsBean;

  15.

  16. ...

  17.

  18. String msg = propsBean.getProperty("hello.message");

  19.

  在這裡,容器確保所有通過PropertiesBean引用的調用是由相同的PropertiesBean實例提供的服務,默認情況下,容器強制執行和其它組件類型相同的線程保證,換句話說,單元素集合是全線程安全的,特別值得一提的是,在任一時刻,允許多個調用訪問一個特定的Bean實例,默認情況下,單元素集合會阻塞所有併發調用,但還有其它併發選項允許更高效地訪問單元素集合實例.

  非同步會話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>對象返回的值.

  1.@Stateless

  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所示,這種打包方法非常複雜,它需要指定模塊之間共享的類和資源.


圖 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文件中.


圖 2 簡化的企業應用程序打包方法

  輕量級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方法可以保證應用程序關閉時調用.

  【51CTO.com譯稿,非經授權請勿轉載.合作站點轉載請註明原文譯者和出處為51CTO.com <http://www.51cto.com/>,且不得修改原文內容.】

  原文:EJB Technology, Even Easier to Use 作者:Ed Ort


[火星人 ] EJB 3.1五大模式改進令Java EE 6更好用已經有959次圍觀

http://coctec.com/docs/java/show-post-60613.html