【轉載+整理】EJB(五) Entity Bean

@cmtobby  http://blog.csdn.net/cmtobby/article/details/1906144

一、什麼是 Entity Bean

Entity Bean提供了一個關係數據庫的面向對象的抽象,它能同時從面向對象技術和麪向過程技術中獲益。

既然Entity Bean和Session Bean都是Enterprise Bean,那麼它們必然具備一定的相同點:Entity Bean也要有一個Home Interface、Bean Interface和Bean Class,如下圖所示:

    Session Bean調用Entity Bean的Home Interface和Bean Interface來創建、查找和刪除Entity Bean,嚴格來講其它客戶端也可以直接調用這些接口,只是這並不是一個很好的做法。

Home Interface

    Entity Bean的Home Interface可以用來創建一個新的Entity Bean、刪除一個Entity Bean以及查找一個已經存在的Entity Bean。調用Home Interface的create方法將會創建一個新的Entity Bean實例,這個方法類似於一般Java類中的構造器;當調用Home Interface的remove方法時,會刪掉指定的Entity Bean實例;當調用Home Interface的find方法時,會尋找合適的Entity Bean實例並返回它們,Entity Bean至少要有一個叫做findByPrimaryKey的find方法。同Session Bean一樣,Entity Bean的Home Interface也必須要繼承EJBHome接口。

Bean Interface:

    同Session Bean相似,Entity BeanBean Interface也是用來暴露一個bean的方法,只不過它的方法大部分都是Entity Bean中域的set和get方法。同Session Bean一樣,Entity Bean的Bean Interface也必須要繼承EJBObject接口。

Bean Class:

    Entity BeanBean Class必須要集成EntityBean接口,它包含了在Bean Interface中指定的setter和getter方法以及包含了業務邏輯的方法,除此之外,它還必須實現那些由EJB容器調用的聲明週期方法如ejbCreate等等。


二、容器管理持久化(Container-Managed Persistence,CMP):

    Entity Bean都與後臺一個持久化的數據存儲相關,這個數據存儲通常是關係數據庫,Entity Bean的一個特性就是能夠使這個持久化過程自動化,這個特徵就叫做容器管理持久化(CMP)。因此,當我們調用Home Interface的create方法時,不僅僅創建了一個新的Entity Bean,同時還在它所對應的數據庫表中新增了一行記錄,整個過程是由容器爲我們管理的,包括在什麼時候插入這一行記錄;調用find方法時,會在相應的數據庫表中查找合適的記錄,每一行記錄對應一個Entity Bean的實例。當使用CMP的時候,數據庫模式直接反映了Entity Bean的設計,這和Hibernate裏面非常相似,通常一個表對應一個實體。

除了CMP外,還有一個策略是BMP(Bean-Managed Persistence),這要求我們自己去管理所有的持久化過程。通常在如下情況下才需要用到BMP:

1.基於一個已經存在的數據庫構建一個EJB應用,如果Entity Bean的設計不能與已有的數據庫模式相匹配,此時需要用到BMP

2.不存在數據庫,Entity Bean用於對一個外部系統進行包裝

3.EJB服務器不支持CMP

一個Entity Bean要求它的一個或多個域能夠唯一的識別它,這些個域就叫做主鍵,就像Hibernate中每個持久化類的ID屬性一樣,主鍵的主要作用就是用於查找一個特定的Entity Bean,它可以是任何一個序列化的對象,如String或者Integer。Entity Bean還一個特徵就是EQL(EJB Query Language),如同Hibernate中的HQL。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章