天天看點

J2EE Architecture(14)

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)本地接口