| 介面 | 擴展自 | 慣稱 | 職責 |
| Remote Interface | EJBObject (→ java.rmi.Remote) | EJB Object | 暴露業務邏輯方法,客戶端調用入口 |
| Home Interface | EJBHome (→ java.rmi.Remote) | Home Object | 生命週期管理:create/remove/finder |
委派流程
// 客戶端程式碼
CartHome home = (CartHome) PortableRemoteObject.narrow(
initialContext.lookup("applications/shopping_cart"), CartHome.class);
Cart cart = home.create(); // Home Object 建立 EJB Object
cart.addItem(item29); // EJB Object 委派給 Bean 實例
cart.purchase();
cart.remove();
- 客戶端調用
Home.create() → 容器實例化 Bean → setSessionContext() → ejbCreate()
- 業務方法調用:Client → EJB Object (Stub) → 容器攔截 (事務/安全/並發) → Bean 實例
- 並發由容器自動處理,開發者無需撰寫同步代碼
EJB Server 與 Container 分工
| 元件 | 角色 | 說明 |
| EJB Server | 執行環境提供者 | TP Monitor、CORBA Runtime、Web Server 等皆可適配;IBM WebSphere 即將其整合於應用伺服器 |
| EJB Container | Bean 運行時管理者 | 運行於 Server 內,對應用透明;負責安全、並發、事務、Passivation、工具支援 (部署、監控、持久化映射) |
容器將伺服器端服務從 Bean「剝離」,使 Bean 無平台綁定、專注業務邏輯。
Session Bean vs Entity Bean 深度對比
| 特性 | Session Bean | Entity Bean |
| 代表語意 | 單一客戶端的業務流程/工作階段 | 持久化資料實體 (資料庫列/物件) |
| 共享性 | 不共享,專屬於一客戶端 | 多用戶並發存取 |
| 生命週期 | 短,通常等同客戶端會話 | 長,跨伺服器重啟存活 |
| 持久化 | 僅 Bean-managed (BMP) | BMP 或 Container-managed (CMP) |
| 故障恢復 | 伺服器故障即銷毀 | 伺服器故障後仍存活 |
Session Bean 細分
- Stateless: 無狀態,所有實例等價,容器池化管理,不 Passivate,
create() 不保證新實例
- Stateful: 保持會話狀態,容器可
ejbPassivate() 序列化至磁碟、ejbActivate() 還原,開發者須確保狀態可序列化;叢集環境需注意同步支援
- 事務性:可實作
SessionSynchronization 接收事務狀態通知,或用 UserTransaction (BMT)
Entity Bean 核心機制
- Primary Key + Finder: Home 介面提供
findByPrimaryKey() 等查詢方法
- 狀態: Pooled (未關聯 EJB Object) ↔ Ready (關聯 EJB Object,可服務業務呼叫)
- 同步回調: 容器調用
ejbLoad() (從 DB 載入) / ejbStore() (寫回 DB) 保持一致性
- 並發控制: 容器負責 (資料庫鎖/序列化存取/多實例+DB 並發控制),Bean 開發者無需處理
下一篇預告
第三部分將詳細講解部署描述符細節、CORBA 整合深度、三層架構完整案例。
- 上一篇文章: Enterprise JavaBeans 組件全景解析 (三):部署流程、持久化策略、事務安全與三層架構實戰
- 下一篇文章: Enterprise JavaBeans 組件全景解析 (一):技術演進、設計目標、核心優勢與 JNDI/JTA 基石
Copyright ©
程式碼之家 All Rights Reserved