帶你走進EJB--它都有哪些Bean
通過前面一系列EJB的部落格,我們已經對EJB有了一個巨集觀的瞭解.為夠更好的在企業專案中使用EJB,我們很有必要對EJB的一些基本內容進行深入,這次我們主要進行的主題是Enterprise Java Bean 中都有哪些Bean?
在EJB中主要有以下三種類型的Bean,分別是
- Session Beans
- Message-Driven Beans
- Entities Beans
每種型別的Bean都能夠提供特定型別的服務.這三種分類能夠幫助我們更好的去理解並組織一個應用程式.例如,Bean的這些型別能夠讓我們基於分層的架構來開發應用.
Session Beans 和Message-Driven Beans(MDBs)
接下來我們通過一張圖來總結上面所闡述的內容.同時也是對EJB型別的一個概括.
這裡需要注意的是Java Persistence API 跟EJB3 的容器是完全分開的.
SessionBeans
一個會話Bean例項是客戶端呼叫一個特定業務操作的結果,比如檢查客戶的訪問歷史.共有兩種型別的Session Beans,有狀態的會話Bean和無狀態的會話Bean.
有狀態的
無狀態的SessionBean是不會儲存的資訊的和狀態,無狀態的SessionBean是可以重用的,它不會被立刻銷燬.一個簡單的例子就是你在淘寶購物所用到的查詢購物記錄的過程.
Session Beans可以通過Java的RMI來進行本地或者遠端呼叫.無狀態的會話Bean還可以釋出成Web Service.
有狀態的Beans和無狀態的Beans有什麼區別呢?
這兩種Session Bean都可以將系統邏輯放在方法之中執行,
Stateless Session Bean 雖然也是邏輯元件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB 容器並不會尋找特定的 Stateless Session Bean 的實體來執行這個method。換言之,很可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean的例項在執行。
從記憶體方面來看,Stateful Session Bean 與 StatelessSession Bean 比較,Stateful Session Bean 會消耗 J2EE Server 較多的記憶體,然而 Stateful Session Bean 的優勢卻在於他可以維持使用者的狀態。
Message-DrivenBeans
Message-Driven Beans (MDBs)跟Session Bean一樣,都是用來處理業務邏輯.但是MDBs非常不同於Session Beans是客戶端不會直接呼叫MDB的方法.MDB會被髮到訊息服務的訊息所觸發,它能夠在不同的系統元件之間進行非同步訊息傳輸.有很多的訊息服務例如:IBMWebSphere MQ, SonicMQ, OracleAdvanced Queueing, and TIBCO.MDB的一個簡單例子是在淘寶中你請求查詢相關寶貝的物流資訊.
Entities
Entities是能夠持久化到資料庫的那些java物件.EJB3 其中一個新特徵就是能夠處理持久化,關於什麼是持久化可以參考我的部落格:Hibernate 之 Persistence 而EJB的持久化是通過JPA來進行管理的.它能夠自動的將Java物件通過ORM技術持久化.
至此,我們已經對EJB各個組成部分有了深一步的瞭解,知道在EJB中都有哪些Bean和他們基本的功能.