EJB 規範定義了六個標準化角色,實現「開發、部署、運行」關注點徹底分離,支撐大型團隊並行工程。
| 角色 | 職責 | 產出/關注點 | 典型人員 |
|---|---|---|---|
| EJB 組件開發者 (Bean Provider) | 編寫業務邏輯、定義接口、提供部署描述符 | Bean 類、Remote/Home 接口、ejb-jar.xml、主鍵類 | 領域專家、業務邏輯開發工程師 |
| 應用組裝者 (Application Assembler) | 組合多個 EJB-JAR 為完整應用 (EAR),提供 Web 模塊 (JSP/Servlet) | application.xml、Web 模塊、EJB 引用綁定 | 架構師、集成工程師 |
| 部署者 (Deployer) | 將 EJB-JAR/EAR 安裝到目標環境,綁定資源 (JDBC/JMS)、配置安全角色、生成容器類 | 綁定後的 EAR、運行時配置、測試腳本 | 運維工程師、發布工程師 |
| EJB 服務器提供者 (Server Provider) | 提供底層分布式基礎設施:事務管理器、對象監視器、集群、負載均衡 | 應用服務器產品 (WebLogic, WebSphere, JBoss) | 中間件廠商 (BEA, IBM, Red Hat) |
| EJB 容器提供者 (Container Provider) | 實現 EJB 契約:生命週期管理、事務攔截、安全檢查、實例池、持久化引擎 | EJB 容器運行時、部署工具、監控工具 | 通常與服務器提供者同一廠商 |
| 系統管理員 (System Administrator) | 維護硬件/OS/網絡/服務器運行環境,監控運行狀態、調優性能 | 運行日誌、監控指標、備份恢復策略 | IT 運維團隊 |
Required, RequiresNew, Mandatory, NotSupported, Supports, Never);分布式兩階段提交 (JTA/JTS);自動回滾 (RuntimeException/SystemException)。method-permission);角色映射 (Principal → Role);程序化安全 (isCallerInRole, getCallerPrincipal);傳播安全上下文 (IIOP Service Context)。| 特性 | Stateless (無狀態) | Stateful (有狀態) |
|---|---|---|
| 狀態保持 | 無會話狀態 (實例間等價) | 保持特定客戶會話狀態 |
| 實例共享 | 池化共享,任意實例服務任意調用 | 專屬實例,單線程訪問 |
| 生命週期 | 短 (方法調用期間) | 長 (會話期間),支持激活/鈍化 |
| 容器故障影響 | 無狀態丟失,重新獲取即可 | 狀態丟失 (除非持久化鈍化存儲) |
| 事務 | 方法級事務邊界 | 可跨方法保持事務 (延遲提交) |
| 典型場景 | 工具服務、驗證、查詢、批次處理 | 購物車、向導式流程、多步驟業務 |
PrimaryKey 類)。ejbLoad/ejbStore JDBC),靈活但複雜。ejbFindByPrimaryKey (強制)、ejbFindXXX、ejbCreate/ejbPostCreate、ejbRemove。ejbActivate/ejbPassivate 配合 ejbLoad/ejbStore 同步狀態。SessionBean/EntityBean 或 POJO + 註解)ejb-jar.xml + 廠商 XML) 或 註解 (EJB 3.x+: @Stateless, @Entity, @TransactionAttribute 等)。jar cvf myejb.jar ...。application.xml + 模塊) 部署。rmic -iiop、生成 Stub/Tie、容器攔截器、持久化映射代碼。create/find → 業務方法調用。EJB 架構通過**六大角色分工**、**容器系統級服務**、**Session/Entity 兩大 Bean 模型**,實現了企業級業務邏輯的標準化組件化、分布式部署與聲明式服務質量。WebLogic 8.1 時代推薦 EJB 2.0 (本地接口 + CMP + CMR) 為最佳實踐。現代 Jakarta EE / Spring 生態繼承了其核心思想 (IoC、AOP 事務、JPA、CDI),理解 EJB 經典架構,是掌握現代框架本質的捷徑。