首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 專家之路(六):Entity Bean 深度解析與持久化機制

     編輯:Java 相關知識

Entity Bean 定位

在成熟多層架構中,組件分為兩類:

  • 應用邏輯組件:Session Bean,提供業務方法。
  • 持久資料組件:Entity Bean,代表資料庫資料,生命週期長、可恢復、多客戶共享。

實作 javax.ejb.EntityBean,由容器管理生命週期、並發、持久化。

構成檔案

  1. Entity Bean 類別:對應資料表,含業務邏輯與持久化回調。
  2. Remote Interface:客戶端呼叫的業務方法簽名(EJBObject 代理)。
  3. Home Interface:建立/查找/移除 EJBObject 的工廠方法。
  4. Primary Key 類別:唯一標識,可為單欄位或複合鍵,須實作 equals/hashCode。
  5. Deployment Descriptor (ejb-jar.xml):容器配置屬性(交易、安全、持久化策略)。
  6. Environment Entries:部署時可配置的參數。

核心特徵

  • 長生命週期:超越客戶端會話,伺服器重啟仍存在。
  • 恢復性:容器故障後自動恢復狀態。
  • 共享實例:多客戶同時存取同一實體,容器負責同步/鎖定。
  • 鈍化/活化:ejbPassivate() 釋放資源+ejbStore() 存盤;ejbActivate()+ejbLoad() 還原。

容器管理持久化 (CMP) vs Bean 管理持久化 (BMP)

關鍵回調方法(EntityBean 介面)


public interface EntityBean extends EnterpriseBean {
    void setEntityContext(EntityContext ctx);
    void unsetEntityContext();
    void ejbRemove();           // 刪除實體資料
    void ejbActivate();         // 活化:載入狀態
    void ejbPassivate();        // 鈍化:存儲狀態+釋放資源
    void ejbLoad();             // 從資料庫載入狀態
    void ejbStore();            // 寫入資料庫
}
  • ejbStore/Load 由容器在交易邊界/鈍化活化時自動調用(CMP 容器實作,BMP 開發者實作)。
  • ejbCreate 可選、可多載,對應 Home 介面 create;ejbPostCreate 完成關聯設定。
  • ejbFindByPrimaryKey 強制實作,回傳 Primary Key;其他 ejbFindXXX 可回傳 Enumeration/Collection。

EntityContext 介面


public interface EntityContext extends EJBContext {
    EJBObject getEJBObject();      // 取得遠端代理
    Object getPrimaryKey();        // 取得主鍵
}

繼承 EJBContext 提供:getCallerIdentity(), isCallerInRole(), getUserTransaction() (BMT 專用), setRollbackOnly() 等。

持久化狀態管理兩種方式

  1. Bean 管理:在 ejbLoad/Store 中直寫 JDBC/SQL。
  2. 容器管理:描述符宣告持久化欄位(<cmp-field>),容器自動同步。

實體 Bean 可被直接修改(繞過 EJB)

資料庫層面的變更(批次作業、其他應用)不經 EJB 容器,容器需透過 ejbLoad 重新同步(隔離級別與快取策略影響一致性)。

Entity Bean (CMP) 是早期 J2EE 嘗試解決「物件-關係映射」的標準化方案,雖被 JPA/Hibernate 取代,但其生命週期模型、容器契約、主鍵/查找機制對理解現代 ORM 框架設計極有啟發。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度CMPBMP
SQL 撰寫容器依描述符自動生成Bean 開發者手寫 JDBC
資料庫移植性高(描述符調整)低(SQL 綁定特定方言)
複雜查詢/優化受限於容器能力完全掌控
開發效率高(專注業務)低(大量樣板碼)