首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 2.x 核心知識問答大全:類型、生命周期、事務與容器服務

     編輯:Java 相關知識

EJB 基礎概念

1. EJB 2.0 規範角色與組件

EJB 規範定義六大角色:Enterprise Bean Provider(組件開發者)、Application Assembler(應用組裝者)、Deployer(部署者)、EJB Server Provider(服務器提供商)、EJB Container Provider(容器提供商)、System Administrator(系統管理員)。核心運行時是 EJB 容器,負責 Bean 的創建、銷毀、激活/鈍化、資源池管理、事務協調、安全檢查等。

2. EJB vs JavaBean

維度JavaBeanEnterprise JavaBean (EJB)
本質可復用組件,無嚴格規範分布式組件,嚴格遵循 EJB 規範
遠程訪問不可跨進程(本地進程內,類似 COM)基於 RMI 可跨進程/機器訪問(類似 DCOM)
容器依賴Web 容器(如 Tomcat)管理生命周期必須部署於 EJB 容器(WebLogic, WebSphere 等)
客戶端調用直接調用實例方法通過容器代理(Home/Remote 接口)間接調用
持久化實現 Serializable 自行管理CMP 由容器管理,BMP 自行實現

3. 核心技術基石

EJB 建立在 JNDI(命名查找)、RMI(遠程調用)、JTA(事務)、JMS(消息) 等 Java EE 標準服務之上。

Bean 類型與區別

Session Bean(會話 Bean)

  • Stateless Session Bean:無狀態,實例可共享,池化管理,適合業務邏輯處理(如查詢、計算)。
  • Stateful Session Bean:有狀態,專屬於單一客戶端,維護會話狀態,消耗較多內存,需激活/鈍化。

Entity Bean(實體 Bean)

  • 代表持久化數據(如數據庫表行)。
  • CMP (Container-Managed Persistence):容器自動生成 SQL,映射配置於描述文件。
  • BMP (Bean-Managed Persistence):開發者手寫 JDBC 代碼實現持久化邏輯。

Message Driven Bean (MDB)

異步消息消費者,實現 MessageListener,由容器自動監聽 JMS Destination 並並發調用 onMessage()。

生命周期管理

Stateless Session Bean

  1. 容器創建實例 → setSessionContext() → ejbCreate() → 放入池。
  2. 客戶調用業務方法 → 容器從池取實例服務 → 歸還池。
  3. 容器決定銷毀 → ejbRemove()。

Stateful Session Bean

  1. 客戶首次調用 → 容器創建實例 → setSessionContext() → ejbCreate() → 綁定客戶。
  2. 業務方法調用 → 直接路由到綁定實例。
  3. 閒置超時 → 容器調用 ejbPassivate() 序列化到二級存儲(鈍化)。
  4. 客戶再次調用 → 容器 ejbActivate() 還原(激活)。
  5. 客戶調用 remove() 或超時 → ejbRemove() 銷毀。

Entity Bean

生命周期較長,隨數據庫數據存在而存在。容器管理實例池與緩存(Cache),通過 ejbLoad()/ejbStore() 同步數據庫狀態。支持激活/鈍化機制控制緩存大小。

事務管理

EJB 支援聲明式事務(Deployment Descriptor 配置)與程序化事務(UserTransaction)。事務屬性:Required、RequiresNew、Mandatory、NotSupported、Supports、Never。底層依賴 OMG OTS、Sun JTS/JTA、X/Open XA 標準。

容器提供的核心服務

  • 生命周期管理(創建、銷毀、激活、鈍化)
  • 實例池化與緩存調度
  • 聲明式事務邊界管理
  • 安全(身份驗證、授權)
  • 持久化管理(CMP)
  • 遠程性(RMI/IIOP 代理生成)
  • 並發控制與鎖管理

EJB 規範禁止操作

  1. 操作線程/線程 API(wait/notify 等)
  2. 使用 AWT/Swing
  3. 實現 ServerSocket 等服務端功能
  4. 讀寫 static 字段(除非 final)
  5. 直接文件 I/O(應用 Resource Adapter)
  6. 加載本地庫(JNI)
  7. 傳遞 this 引用(應用 SessionContext/EntityContext)
  8. 循環調用(導致死鎖)

客戶端調用步驟

  1. 設置 JNDI 初始化上下文屬性(Provider URL, Factory)。
  2. context.lookup("ejb/...Home") 獲取 Home 接口。
  3. 調用 home.create(...) 獲取 Remote/EJBObject 接口。
  4. 通過 Remote 接口調用業務方法。

三大核心接口/類

  • Remote / Local Interface:定義業務方法,客戶端面向接口編程。
  • Home / LocalHome Interface:工廠接口,負責 create/find/remove。
  • Bean Class:實現業務邏輯與回調方法(ejbCreate, ejbActivate 等)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved