前言
本文轉譯自 IBM developerWorks,旨在快速建立 EJB 技術全貌認知。第一部分涵蓋歷史背景、設計目標、優勢與核心技術棧。
EJB 技術簡史
- 1998 年 3 月:EJB 1.0 發布,引入伺服器端元件模型
- 1999 年:EJB 1.1,修正互通性、加強 XML 部署描述符
- 2001 年:EJB 2.0,重大突破:本地介面、CMP 2.0 (關係映射)、訊息驅動 Bean (MDB)
- 2003 年:EJB 2.1,Web Service 整合、計時器服務
- 2006 年:EJB 3.0 (JSR 220),革命性簡化:POJO 程式模型、註解配置、JPA 整合、移除 Home 介面
- 2009/2013/2017:EJB 3.1/3.2 (Java EE 6/7/8),單例、非同步、可攜式全域 JNDI 名稱
Sun 官方評價 (當年)
「EJB 伺服器透過為中介層服務 (事務、安全、資料庫連線等) 提供自動支援,降低了中介軟體開發複雜度。EJB 服務器端元件模型簡化了中介軟體元件開發,這些元件都是事務性的、可擴展的和可移植的。」
從 Applet 到伺服器端 Java 的演進
階段一:Applet 與應用程式 (JDK 1.0)
- 焦點:
Applet (瀏覽器端)、main() 應用程式
- 伺服器端無專屬 API,CGI/Perl 主導 Web 後端
階段二:Servlet API (1997~)
- Sun 發布 Java Servlet Specification
- Servlet:運行於 Web 伺服器、請求-回應模型、HTTP 為基礎
- 優於 CGI:進程內執行、執行緒模型、效能高、可移植
- Servlet 容器 (Tomcat, Jetty, Resin) 可外掛至現有 Web 伺服器
階段三:EJB — 企業級中介層標準 (1998~)
- Servlet 適合 Web 表現層,但缺乏企業級中介層服務:
- 事務管理 (跨資源、分散式)
- 安全性 (聲明式角色/權限)
- 資源池化 (資料庫連線、JMS 連線)
- 生命週期管理、狀態管理、遠端存取透明化
- EJB 將 Java 元件概念從客戶端延伸至伺服器端,奠定 Java EE 基石
EJB 核心價值主張
| 維度 | 傳統 CGI/早期 Servlet | EJB 架構 |
| 事務 | 手動編碼 (JDBC commit/rollback) | 容器管理 (CMT) / Bean 管理 (BMT),聲明式 |
| 安全 | 自行實作 | 聲明式角色映射、JAAS 整合 |
| 持久化 | JDBC 手寫 SQL | CMP (容器管理持久化) / BMP / JPA |
| 遠端存取 | RMI/HTTP 自行實作 | RMI-IIOP/WS 透明遠端介面 |
| 資源管理 | 手動連線池 | JNDI 查找 DataSource/JMS/Environment |
| 可移植性 | 低 (綁定容器實作) | 高 (標準 API + 部署描述符) |
EJB 三種 Bean 型別
- Session Bean:業務邏輯封裝
- Stateful (有狀態,專屬客戶)
- Stateless (無狀態,共享池化,高擴展)
- Singleton (單例,應用級共享狀態,EJB 3.1+)
- Entity Bean (EJB 1/2) / JPA Entity (EJB 3+):持久化領域模型
- Message-Driven Bean (MDB):非同步訊息消費者 (JMS 整合)
EJB 依賴的基礎 Java 服務
- JTA (Java Transaction API) — 分散式事務
- JNDI (Java Naming and Directory Interface) — 命名查找
- JMS (Java Message Service) — 訊息傳遞
- JCA (Java EE Connector Architecture) — EIS 整合
- JAAS (Java Authentication and Authorization Service) — 安全
- RMI-IIOP / CORBA — 分散式通訊
關鍵: 使用 EJB 不需精通 以上所有底層 API,容器負責整合與代管。
總結
EJB 代表 Java 進軍企業級計算的關鍵里程碑。從早期「重量級、複雜、XML 地獄」到 EJB 3 「POJO、註解、輕量、JPA 整合」,其演進折射出 Java EE 生態對開發者體驗與生產力的持續優化。雖然 Spring 框架曾以「更輕量」挑戰 EJB,但 EJB 3+ 已吸收並標準化了眾多 Spring 創新 (DI、AOP、JPA),現代 Jakarta EE / Spring Boot 雙強並存,共同推動 Java 企業級開發邁向雲原生時代。