J2EE與EJB架構定位
J2EE提供多層分散式應用模型:Client層、Web層、EJB業務層。EJB元件在J2EE伺服器執行,容器提供事務、安全、資源管理等系統級服務,開發者專注業務邏輯。
兩類EJB核心差異
| 特性 | Session Bean | Entity Bean |
| 角色 | 客戶端會話延伸 | 業務實體持久化表達 |
| 生命週期 | 暫時,客戶結束即銷毀 | 持久,儲存於資料庫 |
| 共享性 | 專屬單一客戶 | 多客戶共享 |
| 主鍵 | 無 | 唯一主鍵標識 |
| 持久化管理 | 自行管理 | Bean管理(BMP)或容器管理(CMP) |
資料庫存取選型決策樹
使用Session Bean存取資料庫:
- 應用相對簡單
- SQL回傳資料無多客戶共享需求
- 資料不代表核心業務實體
使用Entity Bean:
- 多客戶共享同一資料
- 資料代表核心業務實體(訂單、帳戶、商品)
- 需從Session Bean隱藏關聯模型細節
- 需要容器管理事務與並發控制
資料庫連線池與EJB容器整合
EJB容器維護連線池,對元件透明。元件請求連線 → 容器從池分配 → 使用完畢釋放回池。優勢:
- 連線重用,避免頻繁建立/關閉開銷
- 單元件佔用時間極短,高併發支援
- 容器統一管理事務邊界(宣告式事務)
實務建議
- 簡單查詢/報表:Session Bean + JDBC
- 核心業務實體增刪改查:CMP Entity Bean(容器管理關聯、查詢優化)
- 複雜SQL/存儲過程:BMP Entity Bean或Session Bean
- 非分散式應用:考慮輕量級替代方案,EJB遠端呼叫開銷大
EJB 3.0後以JPA取代Entity Bean,現代架構多採用Spring + Hibernate/JPA,但理解EJB經典模式仍有助於維護舊系統與把握企業級設計精髓。