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

CMP Entity Bean 完整範例 (一):RosterApp 球員、球隊、聯盟關聯模型實作

     編輯:J2EE

CMP 優勢回顧

  • 容器管理所有資料庫儲存/同步指令
  • 容器管理 Entity Bean 間關聯關係
  • 無需撰寫資料庫邏輯,僅在部署描述符描述映射
  • 節省時間、支援多資料庫、程式碼可移植

RosterApp 應用總覽

  • 維護運動聯盟球員名單與球隊名單
  • 5 組件:RosterAppClient (客戶端) → RosterEJB (Session Bean) → PlayerEJB/TeamEJB/LeagueEJB (CMP Entity Bean)
  • 存取透過 Local Interface
  • 關聯關係:
    • TeamEJB ↔ PlayerEJB:多對多、雙向
    • LeagueEJB ↔ TeamEJB:一對多、雙向

PlayerEJB 實作細節

三大必要檔案

  1. Entity Bean Class:PlayerBean (public abstract)
  2. Local Home Interface:LocalPlayerHome
  3. Local Interface:LocalPlayer

Entity Bean Class 要求

  • 實作 EntityBean 介面
  • 0 或多個 ejbCreate/ejbPostCreate
  • 持久化欄位的 get/set 抽象方法
  • 關聯關係的 get/set 抽象方法
  • Select 方法 (抽象)
  • Home 方法
  • 業務方法
  • 不實作:Finder 方法、finalize()

持久化欄位存取方法


public abstract String getPlayerId(); public abstract void setPlayerId(String id);
public abstract String getName(); public abstract void setName(String name);
public abstract String getPosition(); public abstract void setPosition(String position);
public abstract double getSalary(); public abstract void setSalary(double salary);

命名慣例:get/set + 欄位名 (首字大寫)。容器自動管理儲存/同步。

關聯關係存取方法 (teams)


public abstract Collection getTeams();
public abstract void setTeams(Collection teams);

Select 方法 (內部查詢,非客戶直接呼叫)


public abstract Collection ejbSelectLeagues(LocalPlayer player) throws FinderException;
public abstract Collection ejbSelectSports(LocalPlayer player) throws FinderException;
  • 可回傳關聯 Bean、持久化欄位或集合
  • 需在部署描述符定義 EJB QL
  • 由業務方法封裝對外暴露

業務方法封裝 Select


public Collection getLeagues() throws FinderException {
    LocalPlayer player = (LocalPlayer) context.getEJBLocalObject();
    return ejbSelectLeagues(player);
}
public Collection getSports() throws FinderException {
    LocalPlayer player = (LocalPlayer) context.getEJBLocalObject();
    return ejbSelectSports(player);
}

生命週期方法


public String ejbCreate(String id, String name, String position, double salary) throws CreateException {
    setPlayerId(id); setName(name); setPosition(position); setSalary(salary);
    return null; // CMP 必須回傳 null
}
public void ejbPostCreate(String id, String name, String position, double salary) throws CreateException {
    // 建立關聯關係程式碼放這裡
}

ejbRemove 通常為空,容器自動刪除資料庫記錄。ejbLoad/ejbStore 由容器自動管理。

Local Home Interface


public interface LocalPlayerHome extends EJBLocalHome {
    LocalPlayer create(String id, String name, String position, double salary) throws CreateException;
    LocalPlayer findByPrimaryKey(String id) throws FinderException;
    Collection findByPosition(String position) throws FinderException;
    Collection findByLeague(LocalLeague league) throws FinderException;
}

Local Interface


public interface LocalPlayer extends EJBLocalObject {
    String getPlayerId(); String getName(); String getPosition(); double getSalary();
    Collection getTeams();
    Collection getLeagues() throws FinderException;
    Collection getSports() throws FinderException;
    // set 方法不應暴露於 Local Interface
}

下一步

後續將介紹 TeamEJB、LeagueEJB 實作、部署描述符關聯定義、EJB QL 查詢語句撰寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved