| 維度 | JavaBean | EJB (Enterprise JavaBean) |
|---|---|---|
| 運行位置 | 客戶端 JVM (Applet、Application、JSP/Servlet 容器內) | 服務端 EJB 容器 (應用服務器進程) |
| 可視性 | 通常可視 (GUI 組件:按鈕、表格、圖表) 或非可視工具類 | 非可視 遠程業務對象,無 UI |
| 分布式能力 | 本地進程內調用 (同 JVM),無遠程透明性 | 天然分布式:RMI-IIOP/CORBA 遠程調用,位置透明 |
| 容器服務 | 無標準容器服務 (BeanBox 等設計時容器) | 運行時容器 管理事務、安全、並發、持久化、生命週期、資源池 |
| 部署描述符 | 無標準部署描述符 (依賴 BeanInfo/屬性編輯器) | 標準 XML 部署描述符 (ejb-jar.xml + 廠商專用) 聲明式配置服務質量 |
| 接口契約 | 公共方法 + 命名模式 (getXxx/setXxx) + 事件監聽器 | Remote/Home 接口 (EJB 2.x) / 無接口/業務接口 (EJB 3.x+),嚴格契約 |
| 事務管理 | 程序化 (JDBC/JTA 手動控制) | 容器管理 (CMT) 聲明式事務屬性 / Bean 管理 (BMT) |
| 安全模型 | 依賴運行環境 (Applet 沙箱、應用權限) | 方法級聲明式安全 (角色映射、Principal 傳播) |
| 持久化 | 無標準 (手動序列化/JDBC/JPA) | CMP (EJB 2.x) / JPA (EJB 3.x+) 容器管理持久化 |
| 平台獨立性 | 純 Java,跨平台運行 | 純 Java 規範,跨應用服務器部署 (理論可移植) |
用戶瀏覽器
│
▼
JSP/Servlet (Web 容器)
│ ├── 視圖渲染
│ ├── 請求參數綁定 → JavaBean (表單數據封裝、驗證、顯示邏輯)
│ └── 業務委派 → EJB (遠程調用)
▼
EJB 容器 (應用服務器)
│ ├── Session Bean (業務流程、事務邊界)
│ ├── Entity Bean / JPA (領域模型、持久化)
│ └── MDB (異步處理)
▼
數據庫 / MQ / Legacy Systems
| 階段 | JavaBean | EJB |
|---|---|---|
| 開發 | IDE 可視化編輯器 (屬性表、事件綁定) | IDE + EJB 專用向導 (生成 Home/Remote/Bean/描述符) |
| 打包 | JAR (含類、資源、可選 BeanInfo) | EJB-JAR (Bean類、接口、主鍵類、ejb-jar.xml、weblogic-ejb-jar.xml 等) |
| 部署 | 放入 CLASSPATH / WEB-INF/lib / BeanBox | 部署工具 讀取描述符 → 生成 Stub/Skeleton/容器代碼 → 安裝到容器 → 綁定 JNDI |
| 運行 | 調用者同線程直接執行 | 容器攔截調用 → 安全檢查 → 事務邊界 → 實例池分配 → 執行 Bean → 返回 |
開發者職責分離:
Required、安全角色 admin、資源引用 jdbc/MyDB)。**關鍵價值**:「什麼服務」由開發者聲明,「如何實現」由容器/部署者決定,**業務代碼零侵入**。
JavaBean 是**客戶端/表現層**的可復用組件模型 (屬性、事件、可視化);EJB 是**服務端/業務層**的分布式事務組件模型 (容器管理服務、遠程調用、聲明式 QoS)。兩者**互補協作**,而非替代。WebSphere 組件代理通過群集、負載均衡、故障轉移、遺留整合等企業級能力,將 EJB 規範價值最大化。現代架構中,JavaBean 角色由 Spring Bean / CDI Bean / DTO / VO 承擔;EJB 角色由 Spring Service / @Transactional / JPA Entity / 微服務 承擔,核心設計哲學 (關注點分離、聲明式服務) 一脈相承。