經過前面一系列EJB的博客,咱們已經對EJB有了一個宏觀的瞭解.爲夠更好的在企業項目中使用EJB,咱們頗有必要對EJB的一些基本內容進行深刻,此次咱們主要進行的主題是Enterprise Java Bean 中都有哪些Bean?java
在EJB中主要有如下三種類型的Bean,分別是數據庫
每種類型的Bean都可以提供特定類型的服務.這三種分類可以幫助咱們更好的去理解並組織一個應用程序.例如,Bean的這些類型可以讓咱們基於分層的架構來開發應用.架構
Session Beans 和Message-Driven Beans(MDBs)用來建立業務邏輯,它們是由EJB容器來管理生命週期.Entities Beans是數據持久化的模型.跟容器同樣,Entities Beans是經過Persistence provider(持久性提供者)來進行管理的.less
接下來咱們經過一張圖來總結上面所闡述的內容.同時也是對EJB類型的一個歸納.異步
這裏須要注意的是Java Persistence API 跟EJB3 的容器是徹底分開的.ide
SessionBeansspa
一個會話Bean實例是客戶端調用一個特定業務操做的結果,好比檢查客戶的訪問歷史.共有兩種類型的Session Beans,有狀態的會話Bean和無狀態的會話Bean..net
有狀態的SessionBean只爲一個用戶來服務,而且可以自動記錄用戶的狀態同時你也不須要去寫額外的代碼.一個簡單的例子就是你在淘寶購物所用的購物車的過程.code
無狀態的SessionBean是不會保存的信息的和狀態,無狀態的SessionBean是能夠重用的,它不會被馬上銷燬.一個簡單的例子就是你在淘寶購物所用到的查詢購物記錄的過程.對象
Session Beans能夠經過Java的RMI來進行本地或者遠程調用.無狀態的會話Bean還能夠發佈成Web Service.
有狀態的Beans和無狀態的Beans有什麼區別呢?
這兩種Session Bean均可以將系統邏輯放在方法之中執行,不一樣的是 Stateful 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和他們基本的功能.