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

實體 Bean 與 CMP:EJB 持久化核心詳解

     編輯:Java 相關知識

什麼是實體 Bean

  • 持久對象,通常代表長期存在的業務實體(銀行賬戶、員工、訂單)
  • 擁有狀態與行為,直接映射數據庫表行
  • 不受服務器宕機影響,創建即寫入數據庫

實體 Bean vs 會話 Bean

特性實體 Bean會話 Bean
持久性持久,不受宕機影響非持久,隨服務器生命周期
標識有主鍵,可查找無主鍵,不可查找
共享多客戶共享通常專屬一客戶
生命周期顯式刪除非活動超時自動回收

主鍵設計原則

  • 唯一標識一行數據/Bean
  • 生命周期內不可變,基於不變數據
  • 通常為生成值而非業務數據(如 SSN 適合,但不推薦業務字段)
  • 主鍵類需實現 equals() 和 hashCode()

容器管理持久化 (CMP)

  • 容器管理生命周期:創建、載入、存儲、刪除
  • 容器提供存儲機制,部署者定義 Bean-數據庫映射
  • VisualAge 提供工具:從 Schema 生成 Bean、從 Bean 生成 Schema、中間會合

關鍵方法

Create 方法

// Home 接口
Employee create(int arg1, String arg2, String arg3) throws CreateException, RemoteException;

// Bean 實現
public void ejbCreate(int argId, String first, String last) throws CreateException {
    id = argId; setFirst(first); setLast(last);
    setManagerId(0); setDepartmentId(0);
}

Post-Create

每個 ejbCreate 對應 ejbPostCreate,參數相同。容器調用順序:ejbCreate → 創建 EJBObject 引用 → ejbPostCreate 完成初始化。

Finder 方法

// Home 接口
Employee findByPrimaryKey(EmployeeKey key) throws FinderException;
Enumeration findByLastLike(String pattern) throws FinderException;
Enumeration findBySalaryRange(double low, double high) throws FinderException;

返回單個 Remote 或 Enumeration。VAJ Persistence Layer 自動實現。

同步訪問控制與死鎖

  • 容器管理同步:每個 Bean 方法 synchronized
  • 死鎖風險:Bean 作為客戶調用其他 Bean 形成循環等待

VisualAge CMP 開發流程

  1. 定義容器管理字段
  2. 創建 Schema 和 Map:EJB > Add > Schema and Map from EJB Group
  3. 導出 Schema 到數據庫
  4. 配置 JDBC 驅動與數據源
  5. 生成表(測試用,生產需 DBA 優化)
  6. 定義 FinderHelper Where 子句

FinderHelper 示例

public interface EmployeeBeanFinderHelper {
    public static final String findByIdWhereClause = "ID = ?";
    public static final String findAllWhereClause = "1 = 1";
    public static final String findByLastLikeWhereClause = "LAST LIKE ?";
    public static final String findBySalaryRangeWhereClause = "SALARY > ? and SALARY < ?";
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved