J2EE Architecture(14)
1、實體Bean的生命期
1)建立實體Bean
容器調用如下方法建立實體Bean:
newInstance()
setEntityContext(...)
newInstance()建立Bean執行個體,setEntityContext(...)将Entity Context屬性對象作為參數。
2)實體Bean的活動和服務
池化的Bean不表示任何特定資料。對于這樣的實體Bean而言,不能調用其它業務方法。
可利用池化Bean執行一些通用活動,另外,當容器不需要池時,可進行銷毀。
此階段,可以執行如下3個動作:
(1)調用ejbHome(),在Bean執行個體上執行一些通用操作;
(2)調用ejbFind(),以查找持久資料集合;
(3)調用unsetEntityContext()方法銷毀Bean執行個體,并對執行個體進行無用單元回收處理。
如需要建立資料,容器将從Bean池選一個執行個體,并按順序調用以下方法:
ejbCreate()
ejbPostCreate()
在企業Bean中,ejbCreate()方法将接收大量參數,符合主鍵概念。故可能使用大量重載的ejbCreate()方法,以滿足企業持久資料定義的需要。
在供應業務資料時,ejbCreate()方法用供應值重新整理Bean執行個體的執行個體變量。
可以在Bean上運作ejbPostCreate()方法,以完成Bean的建立。此時,Bean進入“就緒”狀态,可以接收業務方法的調用。
在實體Bean執行個體就緒後,它實際上将與資料庫表的特殊記錄等例子對應。現在,可在特定Bean執行個體上運作業務方法。
在Bean上運作業務方法比較複雜,因為多個用戶端可能同時通路此類持久資料。為此,容器需要将Bean上的方法調用與資料庫保持同步。容器必須確定用戶端總能通路到最新的持久資料。
通過以下兩種方法實作:
ejbStore()
ejbLoad()
調用ejbLoad()方法,它用來自資料庫的最新值更新Bean的屬性;調用ejbStore()方法,它将Bean執行個體的最新值儲存在資料庫表的記錄中。
實體Bean如長期處于不活動狀态,容器可能覺得将其換出,并将資源配置設定給活動Bean。相反,容器也可能決定将Bean換入,将其激活。
3)鈍化
容器如決定換出Bean時,将順序調用如下方法:
ejbPassivate()
這将使Bean進入池化狀态,并将Bean的資料儲存在輔助存儲器中;
4)激活
當容器決定換入Bean時,将順序調用如下方法:
ejbActivate()
5)銷毀實體Bean。
容器調用Bean上的ejbRemove()方法來銷毀實體Bean。
這個操作使Bean執行個體重“就緒”狀态進入“池化”狀态。
2、消息驅動Bean的生命期
MDB的生命期最簡單。
1)MDB的建立
容器調用3個方法建立MDB執行個體:
setMessageDrivenContext()
2)MDB的活動和服務
當業務方法onMessage()接收到JMS消息時,池化MDB将轉入操作狀态。消息必須是JMS支援的類型。
MDB的onMessage()可能接收以下類型的消息對象:
TextMessage
ByteMessage
ObjectMessage
StreamMessage
MapMessage
需正确識别消息類型,進行适當操作。發送電子郵件消息、更新資料庫是一些JMS操作執行個體。
3)銷毀MDB
調用Bean上的ejbRemove()方法,以釋放Bean所占的所有資源。
3、EJB進階特性
CMP Bean中的進階特性:
1)Home方法
2)抽象持久模式(Abstract Persistence Schema)
3)EJB查詢語言
4)使用CMP Bean管理關系
5)本地接口