核心定位差異
| 維度 | JavaBean | Enterprise JavaBean (EJB) |
| 運行環境 | 客戶端/桌面/瀏覽器 (本地進程) | 應用服務器容器 (遠程/分布式) |
| 可視性 | 通常可視 (按鈕、表格、圖表等 UI 組件) | 非可視業務組件 |
| 部署形式 | 獨立程序、ActiveX、Applet、JAR | EAR/JAR 部署到 EJB 容器 |
| 服務質量 | 無內置服務,自行管理 | 容器提供事務、安全、持久化、並發、生命周期管理 |
| 訪問方式 | 本地直接調用 | 遠程接口 (RMI/IIOP/Web Services) |
| 開發職責 | 業務邏輯 + 界面交互 | 純業務邏輯,基礎設施授權給容器 |
JavaBean 核心特徵
- 遵循命名規約:無參構造器、私有字段 + 公有 getter/setter。
- 支持
BeanInfo / PropertyDescriptor 實現可視化構建工具集成。
- 可序列化 (
Serializable) 支持持久化/網絡傳輸。
- 事件模型:
add/removeXxxListener 支持觀察者模式。
- 部署靈活:桌面應用、Applet、ActiveX 控件、JSP 標簽庫組件。
EJB 核心架構
三類 Bean
- Session Bean:業務流程控制,有狀態/無狀態。
- Entity Bean:持久化領域對象 (EJB 3.0 後由 JPA 替代)。
- Message-Driven Bean:異步消息處理。
容器管理服務 (聲明式)
- 事務管理:
@TransactionAttribute 定義邊界 (Required/RequiresNew 等)。
- 安全授權:
@RolesAllowed、@RunAs 基於角色訪問控制。
- 並發控制:容器管理實例池、線程安全。
- 持久化:CMP (容器管理) 或 BMP (Bean 管理),現代用 JPA。
- 依賴注入:
@EJB、@Resource 注入資源/其他 Bean。
部署描述符 vs 註解
早期用 ejb-jar.xml,EJB 3.0+ 主流用註解 (@Stateless 等),部署工具讀取元數據生成存根/骨架代碼。
協作模式:JavaBean + EJB
典型電子商務場景:
- 瀏覽器/桌面 JavaBean (購物車、商品展示組件) 捕獲用戶操作。
- 提交訂單時調用服務器 EJB (訂單處理、支付、庫存扣減)。
- EJB 完成事務性業務,返回結果給 JavaBean 更新界面。
優勢:UI 邏輯與業務邏輯分離,EJB 可集群部署實現高可用/擴展,JavaBean 專注用戶體驗。
ActiveX 部署差異
- JavaBean 可打包為 ActiveX (如
Beans.instantiate + COM 橋接) 運行於 IE/Windows。
- EJB 本身不可成 ActiveX (服務器端組件),但其代理/門面可封裝為 ActiveX 提供給桌面調用。
WebSphere / EJB 容器增值
IBM WebSphere "Component Broker" 提供超越 EJB 規範的企業級能力:
- 負載均衡、服務器集群、故障轉移。
- 高級系統管理、性能監控。
- 舊系統集成適配器 (CICS、IMS、DB2 等)。
- 全局命名服務、對象事務管理器 (OTS)。
選型指南
- 需分布式、事務、安全、高併發、集群 → EJB。
- 本地 UI 組件、簡單數據封裝、工具可視化構建 → JavaBean。
- 現代架構常用 POJO + Spring (提供類似 EJB 服務) 替代傳統 EJB,但 EJB 仍是 Java EE 標準核心。