天天看點

J2EE Architecture(13)

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()方法。

繼續閱讀