前言
Enterprise JavaBeans (EJB) 自 1998 年 3 月 1.0 版發布以來,確立了伺服器端元件模型標準。本文回顧其歷史脈絡、設計目標與核心優勢。
歷史脈絡:從 Applet 到三層架構
1. Java 早期:Applet 與應用程式
- JDK 1.0 以 Applet 為核心,瀏覽器載入執行。
- 一般應用程式需 `main()` 進入點,伺服器端缺乏標準介面。
2. Servlet 的誕生
- Sun 制定 Java Servlet 規範,專為 Web 伺服器設計。
- Servlet 容器管理生命週期、請求/回應模型,效率與可攜性優於 CGI。
- 但 Servlet 僅適合薄薄的中介層,缺乏事務、安全、資源管理等企業級服務。
3. 三層架構興起
- 兩層架構(胖客戶端直連資料庫)擴展性差、維護難。
- 三層架構:表現層(瀏覽器/瘦客戶端) → 中介層(應用伺服器/業務邏輯) → 資料層(資料庫/ERP)。
- 中介層集中管理業務邏輯,支援多種客戶端與資料源。
4. JavaBeans 元件模型
- 可視化建構工具支援、屬性/事件/方法慣例、內省、持久化、可客製化。
- 雖常用於 GUI 元件,但規範不限於客戶端,伺服器端同樣適用。
5. J2EE 平台整合
J2EE 整合 EJB、JNDI、JMS、JTA、JDBC、Servlet/JSP、RMI/IIOP 等技術,提供統一部署與執行環境。EJB 為核心伺服器端元件模型,建立在其上層。
EJB 設計目標(規範 1.0)
- 標準元件架構,構建分散式、面向物件商務應用。
- 跨廠商工具開發元件可組合部署。
- 簡化開發:應用開發者無需處理事務、狀態、執行緒、資源共享等底層細節;專家仍可存取低階 API。
- 「一次編寫,到處部署」:跨平台免重新編譯。
- 涵蓋開發、部署、執行全生命週期。
- 定義慣例,多廠商工具產出的元件運行期可互操作。
- 相容既有伺服器平台,廠商可擴充支援 EJB。
- 相容其他 Java API。
- 提供與非 Java 應用互操作能力。
- 相容 CORBA。
採用 EJB 的核心效益
- 開發簡化:EJB 容器提供系統服務(事務、安全、連線池、命名),開發者專注業務邏輯。
- 伺服器端業務邏輯可攜:標準化 Bean-Container 介面,跨環境部署免改碼。
- 元件重用:如同 JavaBeans 組裝客戶端應用,EJB 組裝伺服器端應用。
- 內建企業級服務:分散式物件、事務、資料庫、安全、全域命名。
- 多廠商互操作:客戶可自由選購元件、容器、伺服器,避免廠商鎖定。
- 可擴展性:元件嚴格分離,支援伺服器叢集與負載平衡。
- 保護既有投資:舊系統可包裝為實體 Bean 存取,無須重寫。
深度剖析:JNDI 與 JTA 在 EJB 中的角色
JNDI:命名與目錄服務抽象層
- API + SPI 架構,支援 LDAP、NIS、COS Naming、檔案系統、RMI Registry、Novell NDS 等。
- EJB 應用透過 `InitialContext.lookup()` 取得 Bean 參考,不假設部署位置,支援分散式環境。
- 關鍵概念:Binding、Context、Naming System、Namespace、名稱分類(原子/複合/合成)。
JTA/JTS:分散式事務標準
- ACID 特性:原子性、一致性、隔離性、持久性。
- OMG OTS → Sun JTS (Java 映射) → JTA (高階 API)。
- XA 介面定義資源管理器與外部事務管理器協議。
- JTA 允許應用、應用伺服器或外部管理器管理事務,介面在 `javax.transaction`、`javax.transaction.xa`。
結語
EJB 將 Java 元件概念從客戶端延伸至伺服器端,配合 J2EE 整合平台,構建出支援任務關鍵企業系統的強健環境。其設計目標與效益至今仍是現代微服務與雲原生架構的靈感來源。