首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Enterprise JavaBeans (EJB) 入門指南:核心概念、三大 Bean 類型與部署描述符

     編輯:Java 相關知識

前言

EJB (Enterprise JavaBeans) 是 J2EE 標準中的伺服器端元件模型,封裝業務邏輯、交易、安全等企業級服務。雖然歷經多版本演進,但其核心架構思想仍具參考價值。本文系統介紹 EJB 動機、容器服務、三大 Bean 類型、程式結構與部署描述符。

為什麼需要 EJB?

  • 關注點分離:開發者專注業務邏輯,容器處理交易、安全、實例管理、持久化等系統級服務
  • 可重用與組裝:Bean 透過部署描述符 (XML) 配置屬性行為,無需重新編譯即可在不同應用組裝
  • 分散式支援:遠端介面支援 RMI/IIOP,跨 JVM、跨語言呼叫

EJB 容器與 J2EE 伺服器關係

EJB 容器提供執行環境(交易、安全、生命週期管理),可內建於 J2EE 伺服器,也可獨立存在。客戶端透過 JNDI 查找 Home/Remote 介面與 Bean 互動。

三大 Bean 類型詳細比較

類型用途狀態管理典型案例
Session Bean
(會話 Bean)
執行業務流程、工作流 Stateless:無狀態,適合單一請求/回應
Stateful:維持客戶會話狀態
Stateless:查詢公開 Bug 列表
Stateful:購物車
Entity Bean
(實體 Bean)
持久化業務資料(對應資料表記錄) 持久身份由 Primary Key 識別 用戶資料、訂單記錄
Message-Driven Bean
(訊息驅動 Bean)
非同步訊息處理 (JMS) 無狀態,由容器管理實例池 異步匯率更新、訂單通知處理

EJB 程式結構三要素

  1. Home Interface:生命週期管理(create、find、remove)
  2. Remote/Local Interface:業務方法定義
  3. Bean Implementation:實作業務邏輯與回調方法(ejbCreate、ejbActivate、ejbPassivate 等)

程式碼範例:無狀態 Session Bean

// Client
Context ctx = new InitialContext();
VerySimpleHome home = (VerySimpleHome) ctx.lookup("simpleton");
VerySimple ejb = home.create();
ejb.setName("Fredrick");
System.out.println("My name is " + ejb.getName());
ejb.remove();

// Home Interface
public interface VerySimpleHome extends EJBHome {
    VerySimple create() throws CreateException, RemoteException;
}

// Remote Interface
public interface VerySimple extends EJBObject {
    String getName() throws RemoteException;
    void setName(String n) throws RemoteException;
}

// Bean Implementation
public class VerySimpleEJB implements SessionBean {
    private String name;
    private SessionContext ctx;
    public void ejbCreate() {}
    public void ejbRemove() {}
    public void ejbActivate() {}
    public void ejbPassivate() {}
    public void setSessionContext(SessionContext ctx) { this.ctx = ctx; }
    public String getName() { return name; }
    public void setName(String n) { name = (n != null) ? n : "Igor"; }
}

部署描述符

標準 ejb-jar.xml

<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>VerySimple</ejb-name>
      <home>org.shifter.ejb.VerySimpleHome</home>
      <remote>org.shifter.ejb.VerySimple</remote>
      <ejb-class>org.shifter.ejb.VerySimpleEJB</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>VerySimple</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

廠商專屬 weblogic-ejb-jar.xml (JNDI 綁定)

<weblogic-ejb-jar>
  <weblogic-enterprise-bean>
    <ejb-name>VerySimple</ejb-name>
    <jndi-name>simpleton</jndi-name>
  </weblogic-enterprise-bean>
</weblogic-ejb-jar>

優缺點權衡

優點挑戰
程式碼重用率高、開發效率提升語法規範嚴格、學習曲線陡峭
容器管理交易/安全/實例,減少樣板碼除錯困難(缺乏容器原始碼)、部署流程繁瑣
透過部署描述符彈性配置,無需重編譯容器故障可能影響所有 Bean、效能調校複雜

總結

EJB 以元件化、容器管理服務解決企業級應用複雜度。雖然現代框架(Spring、Jakarta EE)已演進出更輕量的替代方案,但理解 EJB 架構有助於掌握分散式元件設計精髓。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved