Enterprise JavaBeans (EJB) 向來聲名狼藉:介面繁瑣、測試困難、強制容器運行。然而,它們卻是 J2EE 開發的基石。在這期「Geronimo 異數」專欄中,OpenEJB 共同創始人 David Blevins 揭秘 EJB 的真正價值,並講述 OpenEJB 如何脫穎而出,成為 Apache Geronimo 的 EJB 實現引擎。
David 幽默地稱早期 Geronimo 為「陰謀」——創始人們拋開自我與既有代碼,從白板出發,優先聚合「對的人」而非「對的組件」。Dain Sundstrom 的堅持邀請,加上雙方在舊金山的巧遇,讓 OpenEJB 自然融入這張白圖。David 回憶:「重心轉向 Apache J2EE 實現時,答案立刻變成了 yes。」
OpenEJB 獨特地將 EJB 規範中模糊的「容器」與「伺服器」契約具體化為兩大獨立組件:
afterBegin、beforeCompletion、afterCompletion)。Geronimo 採納 OpenEJB 伺服器幾乎原封不動,卻完全重寫容器以支援 EJB 2.1(OpenEJB 原僅支援 1.1)。這種「弗蘭肯斯泰因式」拼裝,卻成就了極致的模組化:用戶可像挑選 GBean 一樣,按需組裝 CORBA、Web Services、本地調用等協議,甚至僅保留本地調用以極致輕量化。
容器將開發者從基礎設施泥潭解脫:
onMessage() 即可。EJB 2.x 的代價是強制實作大量回調介面,即便不需要。EJB 3.0 以註解取代介面,構造器注入替代 Setter 注入,徹底簡化開發模型。David 指出:「所有這些反模式(Service Locator 等)現在都不再必要。」OpenEJB 3 將整合 OpenJPA 支援 JPA,並恢復 OpenEJB 1 時代的嵌入式測試能力——讓 JUnit 能在無容器環境直接運行 EJB 組件,極大提升開發效率。
OpenEJB 進入 Apache 孵化器,核心在於證明「健康社區」與「乾淨 IP」。David 強調:「多樣性是人力撤退時代代碼存活的關鍵。」六年積澱、Geronimo 注入的貢獻者群體,正是這份韌性的證明。
EJB 雖曾痛苦,卻在分布式事務、集群、Web Services 整合上擁有不可替代的優勢。對於註定運行於 Geronimo 的專案,深入理解 OpenEJB 的容器/伺服器分離架構,將是駕馭企業級應用的關鍵鑰匙。