在做企業業務繼承的時候,通常利用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用戶端企業級元件。