天天看點

EJB生命周期

在做企業業務繼承的時候,通常利用session進行提供同步的遠端過程服務.通過EAI等Q元件,實作企業級的資料總線,把應用之間的網狀結構關系進行星型化..利用mdb從jms(Q)伺服器上擷取相應的消息服務.總之在企業資訊化的過程中,基于j2ee的應用整合,ejb提供了一種良好的方法,當然你也可以選擇websevice,但是在網絡結構和實時處理效率上還是有很大的差别.下面較長的描述以下三種ejb的生命周期,在開發中和利用他的容器回調功能,來注入和回收外部的各種資源。

1 session Bean (有狀态)

有狀态會話Bean執行個體有三種狀态,不存在,就緒,和鈍化。

用戶端調用home接口的create 方法,ejb容器執行個體化一個Bean并調用setSesssionContext

ejbCreate方法,使得Bean處于就緒狀态。然後客戶就可以使用其商業方法了。ejb容器對Bean的生命周期

進行管理,一般會對最少使用的EJB進行鈍化,當客戶在使用這個EJB時,容器會進行激活,這個過程對客

戶來說是透明的。當使用者調用remove方法,容器調用ejbRemove方法,ejb生命周期結束.

無狀态會話Bean執行個體就兩種狀态,不存在和就緒.

用戶端調用home接口的create方法,如果不存在可用的執行個體.jb容器執行個體化一個Bean并調用

setSesssionContext ejbCreate方法.當客戶調用remove方法之後,ejb容器則調用ejbRemove的方法, 

ejb生命周期結束.

2 實體bean

實體bean有三種狀态,不存在,在pool中,就緒

ejb容器建立執行個體時調用setEntityContext,把容器的上下文傳到bean元件中.執行個體化之後bean

會移到池中,此時ejb沒有和任何的實體對象進行關聯,所有的bean執行個體是一樣,容器會指派它和具體的

實體标示關聯,進入就緒狀态。有兩種方法使得一個實體bean從池化進入到就緒狀态,一是用戶端使用

create方法,使得ejb容器調用ejbCreate and ejbPostCreate 方法,二是容器調用ejbActivate 方法,

這對客戶來說是透明的,隻有當實體bean處于就緒狀态時,才能調用其商業方法。同樣如果實體bean要從

就緒進行池化也有兩種方法,一是用戶端調用remove方法,容器調用ejbRemove;二是容器ejbPassivate方法。

bmp和cmp,在bean執行個體從池化到就緒時,對于bmp的實體bean,容器不會自動設定primary key.是以ejbCreate and ejbActivate 需要獲得這個primary key ,如果這個key非法,ejbLoad and ejbStore methods 不能同步實體變量到資料庫。ejbCreate 通過參數傳入,ejbActivate 通過id = (String)context.getPrimaryKey();在pool狀态,這些需要持久化的實體變量則不需要,在ejbPasssivate 中把它指派null。unsetEntityContext,

bean生命周期結束的時候,調用

3 mdb 消息bean

    消息bean就兩種狀态:不存在和就緒

就像sessionless session bean,容器在執行個體化bean的時候,調用setMessageDrivenContext,ebjCreate. 調用ejbRemove方法結束生命周期。當消息到達的時候Onmessage方法。是以可以mdb是一種jms用戶端企業級元件。