EJB 規範定義六大角色:Enterprise Bean Provider(組件開發者)、Application Assembler(應用組裝者)、Deployer(部署者)、EJB Server Provider(服務器提供商)、EJB Container Provider(容器提供商)、System Administrator(系統管理員)。核心運行時是 EJB 容器,負責 Bean 的創建、銷毀、激活/鈍化、資源池管理、事務協調、安全檢查等。
| 維度 | JavaBean | Enterprise JavaBean (EJB) |
|---|---|---|
| 本質 | 可復用組件,無嚴格規範 | 分布式組件,嚴格遵循 EJB 規範 |
| 遠程訪問 | 不可跨進程(本地進程內,類似 COM) | 基於 RMI 可跨進程/機器訪問(類似 DCOM) |
| 容器依賴 | Web 容器(如 Tomcat)管理生命周期 | 必須部署於 EJB 容器(WebLogic, WebSphere 等) |
| 客戶端調用 | 直接調用實例方法 | 通過容器代理(Home/Remote 接口)間接調用 |
| 持久化 | 實現 Serializable 自行管理 | CMP 由容器管理,BMP 自行實現 |
EJB 建立在 JNDI(命名查找)、RMI(遠程調用)、JTA(事務)、JMS(消息) 等 Java EE 標準服務之上。
異步消息消費者,實現 MessageListener,由容器自動監聽 JMS Destination 並並發調用 onMessage()。
setSessionContext() → ejbCreate() → 放入池。ejbRemove()。setSessionContext() → ejbCreate() → 綁定客戶。ejbPassivate() 序列化到二級存儲(鈍化)。ejbActivate() 還原(激活)。remove() 或超時 → ejbRemove() 銷毀。生命周期較長,隨數據庫數據存在而存在。容器管理實例池與緩存(Cache),通過 ejbLoad()/ejbStore() 同步數據庫狀態。支持激活/鈍化機制控制緩存大小。
EJB 支援聲明式事務(Deployment Descriptor 配置)與程序化事務(UserTransaction)。事務屬性:Required、RequiresNew、Mandatory、NotSupported、Supports、Never。底層依賴 OMG OTS、Sun JTS/JTA、X/Open XA 標準。
wait/notify 等)this 引用(應用 SessionContext/EntityContext)context.lookup("ejb/...Home") 獲取 Home 接口。home.create(...) 獲取 Remote/EJBObject 接口。create/find/remove。ejbCreate, ejbActivate 等)。