隨著企業級應用複雜度提升,EJB (Enterprise JavaBeans) 技術在大型分散式系統開發中扮演關鍵角色。本文深入解析 EJB 規範定義、基於 EJB 的三層架構模型、EJB 組件分類(Entity Bean 與 Session Bean),並以「商務預訂系統」為實戰案例,展示從架構設計到核心組件開發的完整流程。
EJB 不是具體產品,而是 Sun 公司制定的伺服器端組件技術規範。其核心目標是提供一種標準化的組件架構,用於開發與部署基於組件的分散式商務應用。採用 EJB 架構的應用具備三大核心特性:
總結來說,EJB 是一個組件事務監控的標準伺服器端組件模型,實現「編寫一次,部署於任意支援 EJB 規範的應用伺服器」。
EJB 架構屬於典型的三層式分層架構,如圖 1 所示:

圖 1:基於 EJB 的應用架構模型
系統核心,進一步劃分為兩個子層:

圖 2:商務預訂系統架構
對應現實世界持久化業務實體(通常映射資料庫記錄)。特點:
代表客戶端的一次會話或任務流程,透過 Home Interface 建立,專屬於單一客戶端。分類:
Session Bean 常作為 Facade 協調多個 Entity Bean 之間的交互,完成複雜業務流程。
系統基於 J2EE 平台,採用 WebSphere Application Server 部署。核心流程:用戶登入 → 選擇頁面導航 → 選擇可用客艙 → 提交預訂 → 支付處理。
| 組件名稱 | 類型 | 主鍵/標識 | 職責描述 |
|---|---|---|---|
| CabinBean | Entity Bean (CMP) | CabinPK | 封裝船艙實體資訊 |
| CustomerBean | Entity Bean (CMP) | CustomerPK | 封裝客戶實體資訊 |
| CruiseBean | Entity Bean (CMP) | CruisePK | 封裝航線實體資訊 |
| ReservationBean | Entity Bean (CMP) | CruiseID + CabinID | 記錄預訂歷史,防止重複預訂 (雙重預訂問題) |
| TravelAgentBean | Stateful Session Bean | - | 核心業務流程協調:查詢可用艙位、執行預訂、計費、生成票據 |
| ProcessPaymentBean | Stateless Session Bean | - | 支付處理:支援支票、現金、信用卡三種付款方式 |
listAvailableCabins():提供可預訂艙位列表供前端下拉選單。bookPassage():核心預訂邏輯,包含信用卡扣款、艙位鎖定、票據生成。CreditCard 類封裝支付資訊,Ticket 類生成電子票證。ByCheck()、ByCash()、ByCredit()。開發環境:IBM VisualAge for Java。實體 Bean 開發相對 Session Bean 更便捷(工具支援 CMP 映射生成)。以 TravelAgentBean 為例:
package com.titan.travelagent;
import java.rmi.RemoteException;
import javax.ejb.FinderException;
import com.titan.cruise.Cruise;
import com.titan.customer.Customer;
import com.titan.processpayment.CreditCard;
public interface TravelAgent extends javax.ejb.EJBObject {
public void setCruiseID(int cruise) throws RemoteException, FinderException;
public int getCruiseID() throws RemoteException, IncompleteConversationalState;
public void setCabinID(int cabin) throws RemoteException, FinderException;
public int getCabinID() throws RemoteException, IncompleteConversationalState;
public int getCustomerID() throws RemoteException, IncompleteConversationalState;
public Ticket bookPassage(CreditCard card, double price) throws RemoteException, IncompleteConversationalState;
}
package com.titan.travelagent;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import com.titan.customer.Customer;
public interface TravelAgentHome extends javax.ejb.EJBHome {
public TravelAgent create(Customer cust) throws RemoteException, CreateException;
}
需實現遠端介面與 Home 介面定義的所有業務方法。受篇幅限制此處省略具體實現代碼,核心邏輯包含:狀態管理、實體 Bean 查找與操作、事務邊界控制、票據生成等。
本文通過商務預訂系統案例,展示了 EJB 組件技術在分散式商務應用中的架構優勢:清晰的分層結構、標準化的組件模型、容器管理的事務與持久化服務。實體 Bean 負責領域資料持久化,會話 Bean 協調業務流程,兩者配合實現高內聚、低耦合的企業級應用架構。