Enterprise JavaBeans(EJB)作為 Java EE 平台三大核心組件之一(另兩者為 Servlet 與 JSP),專為構建分散式、可擴展的企業級商務應用而設計。它提供了一套標準化的伺服器端元件模型,讓開發者能透過遠端介面呼叫分散式物件,極大地簡化了複雜業務邏輯的實作與部署。
EJB 規範定義了伺服器端元件系統的技術標準,為元件開發者與使用者屏蔽了底層系統級服務的複雜性——如交易管理、安全性控制、生命週期管理、持久化、併發處理、叢集與負載平衡等。這使得開發團隊能專注於核心業務邏輯,而將基礎設施層面的難題交由 EJB 容器統一處理。隨著應用規模增長,EJB 仍能透過容器提供的負載平衡與資源存取控制實現平滑擴展。
EJB 容器為 EJB 元件提供執行環境,其管理方式類似 Web 容器對 Servlet 的管理。容器負責實例化、池化、激活/鈍化、交易邊界劃分、遠端通訊協議處理等核心任務。開發者透過 ejbContext、JNDI 查找、回調函式等機制與容器互動。
以 JBoss 為例,它是支援 EJB 1.1、2.0 至 3.x 規範的成熟容器,常與 Tomcat 或 Jetty 整合部署。在分散式架構下,EJB 實例被封裝於骨架對象中,透過存根與客戶端通訊:存根實現業務介面但不含邏輯,接收呼叫後將網路訊息轉發給骨架,骨架再調用實際的 Bean 實例並回傳結果。這雙層代理模式有效屏蔽了分散式通訊的複雜度,且存根與骨架均由工具自動生成,無需手寫程式碼。
EJB 主要分為會話 Bean與訊息驅動 Bean兩大類:
不保留客戶端會話狀態,屬性僅在方法呼叫期間有效。生命週期由容器完全控制:請求到達時若無實例則建立、注入資源、回調 @PostConstruct;呼叫結束後回調 @PreDestroy 銷毀實例。兩狀態:「不存在」與「存在」。
為特定客戶端保留會話狀態,一客戶端對應一實例,不可共享。擁有三種狀態:不存在、活動、鈍化。長時間閒置時容器將狀態序列化至暫存區(鈍化,回調 @PrePassivate),再次請求時還原(激活,回調 @PostActivate)。最終閒置過久則徹底銷毀(回調 @PreDestroy)。
應用程式僅實例化一次,生命週期與應用同步。類似無狀態 Bean 但全應用僅一實例,支援併發共享存取。不鈍化,僅「不存在」與「存在」兩態。
專責處理 JMS 訊息,實作 MessageListener 介面。容器維護實例池,收到訊息時調用 onMessage()。不鈍化,生命週期同無狀態 Bean。