JavaBeans 與 Enterprise JavaBeans (EJB) 雖名稱相似,卻代表截然不同的元件層級與應用場景。本文從架構定位、部署模型、服務品質、視覺化特性、WebSphere 整合等維度深度剖析兩者差異,並以電子購物車案例說明協同運作模式。
核心定位差異
| 維度 | JavaBeans | EJB |
| 核心定位 | 可視/非可視可重用軟體元件 | 企業級商業邏輯元件 |
| 執行環境 | 單一 JVM 行程 (本地) | EJB 容器 (分散式、受管) |
| 可視性 | 通常可視 (按鈕、圖表、表單) | 非可視 (純商業邏輯) |
| 部署形態 | 獨立應用、Applet、ActiveX、JSP 標籤 | EJB JAR 部署至應用伺服器 |
| 服務品質 | 無內建 (需自行實作) | 交易、安全、持久化、並發、生命週期管理 |
JavaBeans:輕量級元件模型
三大核心契約
- 屬性:透過 Getter/Setter 存取,支援設計工具屬性檢視器
- 事件:標準事件源/監聽器模式,支援視覺化建構工具連線
- 方法:公開業務方法,提供元件功能
部署靈活性
- 獨立 Java 應用程式
- Applet 嵌入瀏覽器
- ActiveX 元件 (透過橋接器,僅限 Windows)
- JSP 頁面中分離業務邏輯 (
<jsp:useBean>)
開發流程
「先建構、後重用」:元件開發者封裝功能 → 應用開發者拖拉拽組裝 → 部署至目標環境
EJB:企業級分散式元件模型
關鍵創新:宣告式服務品質
EJB 開發者宣告「需要什麼服務」而非「如何實作服務」:
- 交易屬性 (Required、RequiresNew、NotSupported...)
- 安全角色 (method-permission)
- 持久化策略 (CMP/BMP)
- 並發管理 (單執行緒存取保證)
二階段開發模型
- Bean Provider:撰寫業務邏輯 + 部署描述檔 (XML/Annotation) 宣告服務需求
- Deployer:使用部署工具讀取描述檔 → 產生攔截器程式碼 (交易邊界、安全檢查、狀態管理) → 安裝至容器
兩者可為不同人員,實現關注點分離。
三大 EJB 類型 (EJB 2.x/3.x 統覽)
- Session Bean:有狀態/無狀態商業流程
- Entity Bean (CMP/BMP):持久化領域物件 (JPA 取代)
- Message-Driven Bean:非同步訊息處理
協同運作:購物車經典案例
前端:JavaBeans 構建豐富使用者介面
ShoppingCartBean:可視購物車,管理商品清單、金額計算
ProductBean:可視商品展示元件 (圖片、規格、價格)
- 部署於 Web 層 (JSP/Servlet/JSF),直接與使用者互動
後端:EJB 執行核心商業邏輯
OrderProcessingEJB (Stateless Session Bean)
- 信用卡授權、額度檢查 (交易管理)
- 生成訂單、扣減庫存 (持久化)
- 發送確認郵件、通知物流系統 (整合外部服務)
互動流程
- 使用者透過 JavaBeans 介面加入商品至購物車
- 結帳時,前端序列化購物車資料呼叫 EJB 遠端介面
- EJB 容器啟動交易、執行商業邏輯、提交/回滾
- 返回訂單確認資訊至前端 JavaBeans 顯示
WebSphere 企業版:元件代理架構深度整合
EJB 即受管商業物件
在 WebSphere 中,EJB 透過元件代理功能獲得超越 EJB 規格的企業級能力:
- 負載平衡與叢集容錯
- 跨機器叢集的物件分佈
- 進階系統管理與監控
- 舊有系統整合 (CICS、IMS、DB2 等)
部署與命名服務
- 使用部署工具安裝 EJB 至一或多台伺服器
- 註冊至全域命名服務 (JNDI)
- 任何用戶端查找 JNDI 取得 Proxy → 透明呼叫遠端方法
擴展性承諾
同一組 JavaBeans/EJB 可從部門級小型伺服器無縫遷移至全球叢集環境,無需修改程式碼,僅調整部署拓撲。
架構演進與現代視角
EJB 3.0+ 簡化革命
- POJO 程式模型 + Annotation 取代複雜 XML
- JPA 取代 Entity Bean CMP/BMP
- 依賴注入取代 JNDI 查找
- 攔截器機制統一橫切關注點
Spring 生態的替代方案
Spring + Hibernate/JPA + 宣告式交易 (@Transactional) 在輕量級容器 (Tomcat/Jetty) 提供類似 EJB 能力,部署更輕量,測試更容易。
總結
JavaBeans 是表現層元件,強調可視化、可重用、跨平台部署;EJB 是商業邏輯層元件,強調分散式、交易、安全、持久化等企業級服務品質。現代架構傾向於:前端使用 JavaBeans/POJO 構建豐富 UI (配合 Spring MVC、JSF、Vaadin 等),後端使用 Spring/EJB 3+ 實作核心業務,兩者透過服務介面 (REST/gRPC/RMI) 解耦合作。理解兩者定位差異,是設計可擴展企業應用架構的關鍵。