企業級 JavaBeans(EJB)是 J2EE 平台中最複雜的技術之一,許多開發者因畏懼其複雜度而猶豫是否採用。本文面向仍在觀望的開發團隊,系統梳理 EJB 的優缺點、適用/不適用場景,並釐清常見誤區,助力理性決策。
EJB 是技術規範,幾乎描述了實現的所有面向:數據類型、組件生命週期、角色分配等。這雖增加學習成本,但確保了跨廠商的可移植性與一致性——這既是最大優點,也是主要缺點。
J2EE 提供完整伺服器端技術棧:Servlet、JSP、JMS、JCA、JDBC、JAAS、JTA、JavaMail 等。EJB 作為核心業務組件,與這些服務無縫協作,構成極具吸引力的企業級解決方案。
將資源管理委託給應用伺服器,廠商可運用複雜演算法實現叢集、負載均衡、故障轉移,支撐海量併發。
EJB 容器提供成千上萬行成熟代碼管理:事務、安全、目錄服務、資源池化。若無 EJB,這一切皆需自行實現。
簡單 Servlet + JDBC 模式下,手動映射 ResultSet 到業務對象、處理主鍵/條件查詢、支援事務與回滾、實現對象緩存與連接池,皆屬重複造輪子。CMP Entity Bean 僅需實現 1-2 個接口即可自動處理持久化;若不滿足需求,BMP 允許自定義持久化邏輯。
業務邏輯不應散落在 Servlet 中。Session Bean 封裝業務行為,支援有狀態/無狀態模式,天然解決跨請求的會話信息保持問題。
| 誤區 | 真相 |
|---|---|
| EJB 是昂貴技術 | 部分正確。但已有多款免費/低成本應用伺服器(如 JBoss、GlassFish),大型專案中伺服器成本佔比極小。 |
| 用 CMP 就不懂 SQL | 錯誤。CMP 仍需理解 SQL 與關係模型,否則無法優化查詢、排查性能問題。 |
| EJB 天然跨容器可移植 | 部分正確。僅當代碼以可移植方式編寫時成立。Session Bean/BMP 易移植,CMP 移植工作量大。 |
| Entity Bean 執行緩慢 | 基本屬實。實體 Bean 確有性能短板,許多場合以 Session Bean + DAO 替代更佳。 |
在決定是否採用 EJB 前,請確保團隊:
技術無善惡,唯適合與否。理性選型,方能事半功倍。