J2EE(Java 2 Platform, Enterprise Edition)以元件化、平台無關、容器管理服務三大支柱,定義了企業級應用開發標準。本文系統梳理 J2EE 架構核心:容器類型、七大核心服務、元件部署模型。
開發者將業務邏輯封裝為可重用元件(EJB、Servlet、JSP),部署至對應容器。容器以標準化服務(安全、交易、命名、遠端連線、生命週期、連線池)托管元件,**開發者專注業務,容器擔繫系統複雜度**。
| 服務 | 關鍵能力 | 開發者受益 |
|---|---|---|
| 安全性 (Security) | 角色基礎存取控制 (RBAC)、宣告式權限、方法級授權 | 無需編寫安全代碼,在部署描述符宣告角色/方法權限即可 |
| 交易管理 (Transaction Management) | 分散式交易 (JTA)、宣告式交易屬性 (Required/RequiresNew 等)、自動提交/回滾 | 免寫複雜交易邊界代碼,容器依描述符自動管理 |
| JNDI 命名查詢 | 統一介面存取多種命名/目錄服務 (LDAP、DNS、RMI Registry、COS Naming) | 元件以邏輯名稱查找資源 (DataSource、EJB、JMS Queue),解耦物理部署 |
| 遠端連線 (Remote Connectivity) | RMI-IIOP 透明遠端呼叫、Stub/Skeleton 自動生成、負載平衡/容錯支援 | 呼叫遠端 EJB 如同本地物件,無需處理網路通訊細節 |
| 生命週期管理 | 實例池化、啟動/鈍化、狀態轉換、銷毀回收 | 容器自動管理實例池大小、啟動鈍化時機,開發者無感知 |
| 資料庫連線池 | DataSource 管理、連線借用/歸還、洩漏偵測、PreparedStatement 快取 | 獲取連線從「昂貴操作」變為「輕量借用」,顯著提升效能與穩定性 |
| 資源管理 (Resource Management) | JCA 整合、JMS/JavaMail/JDBC 統一存取、工作管理 | 異構企業資源 (ERP、MQ、Legacy) 統一接入模型 |
| 容器類型 | 管理元件 | 執行環境 | 核心契約 |
|---|---|---|---|
| EJB 容器 | Session Bean (有/無狀態)、Entity Bean (CMP/BMP)、Message-Driven Bean | J2EE 伺服器進程內 | javax.ejb.*、EJBHome/EJBLocalHome、部署描述符 ejb-jar.xml |
| Web 容器 | Servlet、JSP、Filter、Listener、Tag Library | J2EE 伺服器進程內 (或獨立 Servlet 容器如 Tomcat) | javax.servlet.*、部署描述符 web.xml |
| 應用程式客戶端容器 | Application Client (main() 類別、Swing/JavaFX UI) | 客戶機器 JVM (支援 Web Start 部署) | application-client.xml、JNDI 存取伺服器端資源 |
| Applet 容器 | Applet (瀏覽器 + Java Plug-in) | 客戶瀏覽器進程內 | 沙箱安全模型、JNLP 擴充 |
.jar,含 ejb-jar.xml、類別、介面.war,含 web.xml、Servlet/JSP、靜態資源.jar,含 application-client.xml.ear,聚合上述模組,含 application.xml 定義模組關係、安全角色、資源參考
┌─────────────────────────────────────────────────────────────┐
│ J2EE Server │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ EJB容器 │ │ Web容器 │ │ Client容器(伺服端) │ │
│ │ - Session │ │ - Servlet │ │ - App Client │ │
│ │ - Entity │ │ - JSP │ │ │ │
│ │ - MDB │ │ - Filter │ │ │ │
│ └──────┬──────┘ └──────┬──────┘ └─────────────────────┘ │
│ │ │ │
│ └──────┬───────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 共享服務 │ (安全、交易、JNDI、連線池、資源...) │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
▲
┌───────────────┴───────────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 瀏覽器 │ │ 應用客戶端 │
│ (Applet容器)│ │ (Client容器)│
└─────────────┘ └─────────────┘
| 角色 | 職責 | 產出 |
|---|---|---|
| 元件開發者 | 編寫業務邏輯、實作介面 | Java 類別、介面 |
| 元件組裝者 | 組合元件、定義依賴、撰寫部署描述符 | ejb-jar.xml, web.xml, application.xml |
| 部署者 | 對應邏輯名稱至物理資源、配置安全/交易屬性 | 廠商專屬部署描述符、EAR 檔 |
| 系統管理員 | 伺服器調優、監控、資源配置 | 運行時配置、效能報表 |
J2EE 架構的精髓在於關注點分離:業務邏輯在元件,系統服務在容器,部署配置在描述符。這種分層讓大型企業應用的開發、部署、維護、擴展各有專責,支撐起關鍵業務系統的長期演進。雖然 Java EE (J2EE 後繼者) 已引入 CDI、REST、JSON-B 等現代特性,但容器管理元件、宣告式服務、標準化部署的核心架構哲學始終未變。