企業開發面臨的挑戰
- 分散式商務應用開發複雜度高
- 需可靠執行商務邏輯 → 綜合化程度更高
- 企業營運環境多樣,期望「寫一次,到處部署」,不受單一平台限制
EJB 技術正是為此而生:可重用伺服器端組件,建立可升級、安全、跨平台、商務導向應用。
什麼是企業 JavaBeans 技術?
Java 平台上的伺服器端組件模型。讓開發者專注商務邏輯,消除編寫「管道代碼」(交易、安全、連線池、執行緒) 的需求,委託伺服器廠商完成。
核心收益
- 生產力:專注商務邏輯,效率倍增
- 業界支援:25+ 公司接受/支援/應用,多方案選擇
- 投資保護:建立於既有系統之上,今日系統明日運行 EJB
- 架構獨立:隔離開發者與底層中介軟體,廠商可改進中介層不干擾應用
- 伺服器端 Write Once, Run Anywhere:只要伺服器提供 EJB API,應用即可運行
設計目標
- 減少建立分散式應用過程:將手工編碼特性轉為 Bean 宣告屬性 (安全/交易以「標記」設定)
- 建立底層結構處理系統級編程 (交易、安全、執行緒、命名、物件生命週期、資源共享、遠端存取、持久化)
- 簡化存取既有應用,提供統一開發模型供工具建立/使用
企業應用程式模型:兩大基本模式
- Session Bean:客戶從對象開始對話,對象代表客戶執行工作 (含多重資料庫交易)。瞬時對話、資料庫讀寫在交易中、狀態瞬時 (伺服器/客戶崩潰即消失)。典型用於 PL/SQL 等資料庫程式語言。
- Entity Bean:客戶存取代表資料庫實體的對象。代表資料及操作方法。關聯式資料庫每列一 Bean。交易性、長壽命 (資料存在 Bean 即存在)。典型用於物件導向資料庫。
注意:EJB 規範強制支援 Session Bean,Entity Bean 1.x 為選擇性,2.0 將強制。
EJB 架構圖解

EJB 架構
- 支援任何客戶端類型,不強制遠端協議 (RMI/IIOP/DCOM 皆可),客戶端不限 Java
- EJB Server:分散式交易/物件管理/調用、低層系統服務集合,管理 EJB 組件資源
- Container:Bean 生活環境,提供可升級/安全/交易環境,處理物件生命週期、狀態管理
- Container 透明於客戶端,安裝 Bean 時提供:EJBHome 實作、Remote 介面實作 (EJBObject)、JNDI 發布 EJBHome
- EJBObject 代理遠端呼叫,轉派至 Bean 實例
- EJBHome 允許建立/清除/查詢 Bean,Entity Bean 含 Finder 方法
關鍵特性
- 分散式交易支援:部署階段宣告交易行為,負擔轉移容器/伺服器;高階需求可程式化管理
- 安全:發揮 Java 安全模型,兩種方式:EJB-JAR 安全描述符、Java.security 程式化管理
- 通訊協議獨立:客戶端免選擇協議,伺服器建立者實作最重要協議 (ORB→CORBA, UNIX→RMI+CORBA),對 Bean 開發者透明
- Java 平台繼承優勢:跨平台部署、升級性 (效能問題可遷移至高效能平台)
- 專用容器簡化既有應用存取:非 Java 應用以 Bean 形式出現,Java 開發者無需了解既有系統即可存取
五大開發角色
- Server Provider:分散式交易專家 (資料庫/TP 監控器廠商)
- Container Provider:系統程式專家,橋接既有應用 (SAP R/3, CICS),需安全/升級/交易經驗
- Enterprise Bean Provider:領域專家,撰寫商務邏輯 Bean,產出 EJB JAR (物件庫廠商)
- Application Assembler:領域專家,用第三方 Bean 建立應用,可能建立客戶端 GUI
- Deployer:熟悉企業營運環境,設定安全/交易描述符,可能修正商務邏輯
開發流程範例:帳戶檢查 Session Bean
- 用 IDE (Java Workshop, Cafe, JBuilder) 撰寫商務邏輯
- 編譯打包成 EJB JAR (含序列化 DeploymentDescriptor:安全/交易設定)
- 用伺服器廠商部署工具安裝 Bean
- 部署者設定站點屬性 (交易模式/安全等級)
- 客戶端調用遠端方法
電子商務範例:購物車 Bean
// Remote Interface
public interface ShoppingCart extends EJBObject {
boolean addItem(int itemNumber) throws RemoteException;
boolean purchase() throws RemoteException;
}
// Bean Class
public class ShoppingCartEJB implements SessionBean {
public boolean addItem(int itemNumber) { /* JDBC code */ }
public boolean purchase() { /* JDBC update */ }
public void ejbCreate(String accountName, String account) { /* init */ }
}
// Home Interface
public interface CartHome extends EJBHome {
ShoppingCart create(String customerName, String account) throws RemoteException, BadAccountException;
}
// Client
Context ctx = new InitialContext();
CartHome home = (CartHome) ctx.lookup("application/mall/shopping-carts");
ShoppingCart cart = home.create("Emma", "0507");
cart.addItem(100);
cart.addItem(251);
cart.purchase();
EJB 未來發展
- 1.0 規範 (1998 JavaOne) 奠定基礎,非終點
- 需改進:持久化物件模型、標準化開發工具/系統協議、統一除錯介面
- 相容性計劃:定義「EJB 相容」伺服器標準、確保不同廠商伺服器互操作性
結論
EJB 技術提供開發/部署/管理分散式商務應用新途徑,簡化可重用伺服器組件開發,無需擔心系統級編程。代表企業應用開發/部署/管理簡化的巨大進步。