EJB(Enterprise JavaBeans)作為 Java EE 核心組件模型,功能強大但概念較重,開發者常遇到困惑。本文彙整 12 個高頻問題,從規範內容、類型區別、生命週期、事務管理到調用流程,提供清晰解答與實戰建議。
1. EJB 2.0 規範涵蓋哪些角色?核心是什麼?
EJB 2.0 定義六大角色:Bean 提供者、應用程式組裝者、EJB 容器、部署工具、EJB 服務提供者、系統管理員。EJB 容器是核心,負責 Bean 的創建、銷毀、激活/鈍化、資料庫連接等生命週期管理。相關技術棧包括 JSP、Servlet、JNDI、JDBC、JMS 等。
2. Java Bean vs. Enterprise JavaBean:本質區別
- Java Bean:可重用組件,無嚴格規範,通常有無參建構子、實作 Serializable,相當於 COM 進程內組件,不可跨進程訪問。
- EJB:分散式組件,基於 RMI 實現遠程訪問(跨進程、跨機器),必須部署於 WebSphere、WebLogic 等容器中,客戶端透過容器代理訪問真實 Bean。
3. EJB 底層技術與核心 Bean 類型區別
EJB 基於 JNDI、RMI、JTA 等技術。三大 Bean 類型:
- Session Bean:執行伺服器端業務邏輯(如存取資料庫、調用其他 EJB),非持久。
- Entity Bean:代表持久資料實體(資料庫記錄),持久化存活。
- Message Driven Bean (MDB):非同步訊息處理。
Session Bean 細分:
- Stateful:維護客戶端狀態,每用戶一實例,記憶體佔用較大。
- Stateless:無狀態,實例共享,容器從池中任意分配,效能較佳。
4. 生命週期與事務管理
- Stateless Session Bean:實例由容器池管理,客戶端調用時容器任意分配現有實例。
- Stateful Session Bean:首次調用創建專屬實例,後續調用分派給該實例。
- Entity Bean:生命週期長,隨資料存在而存活,容器崩潰不影響,支援容器管理 (CMP) 或 Bean 管理 (BMP) 持久化。
事務管理採用 OMG OTS、Sun JTS/JTA、X/Open XA 等標準。
5. 六大角色與三大核心介面
六角色確保不同廠商實現互操作。三大介面:Remote/Local(業務方法)、Home/LocalHome(工廠:建立/移除/查找)、Bean 類(實作邏輯)。
6. 容器提供的核心服務
生命週期管理、代碼生成、持久化管理、安全、事務管理、鎖與並發管理。
7. EJB 規範禁止操作
不可操作執行緒/AWT/靜態欄位/IO/本地庫;不可實作伺服器功能;不可將 this 作參數/返回值;不可迴圈調用。
8. Remote vs. Home 介面職責
- Remote:定義業務方法,供客戶端調用。
- Home:工廠介面,負責建立、移除、查找 EJB 實例。
9. Bean 實例生命週期管理策略
- 池化管理(Stateless、Entity、MDB):建立後不銷毀,重用實例。
- 快取管理(Stateful、Entity):透過激活/鈍化(序列化)維持狀態,限制實例數量。
10. 激活/鈍化機制詳解
以 Stateful Session Bean 為例:快取大小限制並發實例數;依 LRU/MRU 算法在激活/鈍化間遷移;客戶端調用時若無綁定實例,從鈍化存儲(序列化)還原,觸發 ejbActivate/ejbPassivate 回調。
11. EJB 類型完整分類
- Session Bean:Stateful / Stateless
- Entity Bean:BMP / CMP
- Message Driven Bean
12. 客戶端調用 EJB 標準流程
- 設定 JNDI 初始化上下文(Factory、Provider URL)。
- 查找 Home 介面。
- 調用
create() 獲取 Remote 介面。
- 透過 Remote 介面調用業務方法。