J2EE Architecture(13)
1、EJB調用模型
普通調用模型,考慮遠端用戶端的調用。步驟:
1)開始時,遠端用戶端需要定位業務元件,并獲得元件引用;
2)用戶端使用JNDI查找服務,以檢索Bean的home對象的引用;
3)用戶端收到引用;
4)用戶端請求home對象建立或查找企業Bean;
5)home對象建立或查找企業Bean;
6)作為結果,傳回EJB對象的引用;
7)用戶端使用引用,通過EJB對象調用業務方法;
8)或者,在調用Bean的業務方法前,EJB對象可能會使用其它服務;
9)EJB對象最終調用Bean的業務方法,在成功運作業務方法後,将結果傳回到EJB對象;
10)EJB對象将結果傳回用戶端。
注:用戶端任何時候都不能直接通路Bean執行個體。
2、EJB的生命期
不同的EJB具有不同的生命期。
會話Bean表示用戶端,而實體Bean表示持久資料。
會話Bean執行個體在用戶端啟動會話時建立,當用戶端完成活動時,将銷毀會話Bean執行個體;在建立資料時,将建立實體Bean執行個體,而當銷毀資料時,将銷毀實體Bean執行個體。
1)無狀态會話Bean的生命期
收到用戶端請求後,業務層容器将調用如下方法建立無狀态會話Bean:
newInstance()
setSessionContext(...)
ejbCreate()
按順序調用。newInstance()建立一個會話Bean執行個體;setSessionContext(...)接受一個稱為SessionContext對象的參數。SessionContext對象包含Bean需要的所有上下文資訊。執行ejbCreate(),标志Bean執行個體建立完成,可接收客戶請求了。
用戶端可調用Bean的業務方法來進行Bean的活動和服務。業務方法可根據業務要求的性質執行任何工作。
容器将調用ejbRemove()方法來銷毀無狀态會話Bean。
2)有狀态會話Bean的生命期
2.1)有狀态會話Bean的建立
收到用戶端請求後,業務層容器調用如下方法建立有狀态會話Bean:
ejbCreate(...)
與無狀态會話Bean不同,其ejbCreate()方法帶參數。
2.2)有狀态會話Bean的活動和服務
用戶端可調用這個Bean上的一個或多個業務方法,業務方法可根據業務要求的性質執行任何工作。
與無狀态會話Bean的不同:有狀态會話Bean的服務和活動要求:Bean要在多個方法調用過程中維護會話狀态。
為了在多個方法調用的過程中維護會話狀态,有狀态會話Bean占用的資源比無狀态會話Bean多,需要長時間維護鈍化狀态,以滿足資源或使用者傲氣。
容器使用兩個方法來管理和維護會話狀态:
(1)ejbActivate()
(2)ejbPassivate()
為等候的Bean調用ejbActivate()方法時,将釋放所有資源和Bean,使Bean進入鈍化狀态。
釋放後的資源可供其它Bean使用。
如用戶端長期不活動,則容器不能無限期地保留資源。
容器可根據自身設定,永久銷毀Bean,将資源提供給其它Bean使用。
要恢複Bean狀态,可調用Bean的ejbActivate()方法。
有狀态會話Bean的銷毀:容器将調用Bean上的ejbRemove()方法。