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

EJB 核心技術深度解析:架構、角色、開發流程與實戰範例

     編輯:Java 相關知識

一、EJB 技術簡介

EJB (Enterprise JavaBeans) 是 Java EE 平台上構建分佈式、事務性、安全的企業級業務邏輯組件的標準規範。它將系統級服務(事務、安全、持久化、並發等)從業務代碼中分離,由容器自動管理,讓開發者專注於領域邏輯。

二、EJB 體系結構中的六大角色

規範定義了六個角色,各司其職,通過標準接口協作:

角色職責產出物
企業 Bean 開發者編寫業務邏輯、定義接口、提供部署描述符EJB 類、Home/Remote 接口、ejb-jar.xml
應用組裝者組合多個 EJB 為完整應用,可能編寫 Web 層 (JSP/Servlet)應用程序 EAR 包
部署者將 ejb-jar 部署到特定環境,配置資源 (JDBC、JMS)、生成存根/骨架已配置的 EJB 容器部署單元
EJB 服務器提供者提供底層分佈式事務、對象管理等系統服務 (通常由中間件廠商兼任容器提供者)EJB Server 產品
EJB 容器提供者實現容器運行時:生命周期管理、事務/安全攔截、部署工具、監控工具EJB Container 產品
系統管理員維護服務器/容器運行環境,監控組件狀態穩定的生產環境

三、EJB 核心組件類型

1. Session Bean (會話 Bean)

  • 有狀態:維護客戶會話狀態,生命周期與客戶綁定,非集群友好。
  • 無狀態:不保持狀態,實例可池化共享,高擴展性,適合業務服務門面。

2. Entity Bean (實體 Bean) —— 注意:EJB 3.0 後由 JPA 取代

  • 對應數據庫記錄,提供對象視圖;主鍵標識唯一性;支持容器管理持久化 (CMP) 或 Bean 管理持久化 (BMP)。
  • 生命周期長,可跨容器崩潰存活 (取決於數據庫)。

3. Message-Driven Bean (消息驅動 Bean)

異步消息處理,實現鬆耦合集成 (JMS)。

四、開發 EJB 關鍵步驟 (基於 EJB 2.x 風格)

  1. 定義接口:Remote (業務方法)、Home (生命周期: create/find/remove)。
  2. 實現 Bean 類:實現 SessionBean 或 EntityBean 接口,包含 ejbCreate、業務方法、回調方法 (ejbActivate/ejbPassivate 等)。
  3. 主鍵類 (僅 Entity Bean):實現 Serializable,對應數據庫主鍵。
  4. 部署描述符 (ejb-jar.xml):聲明 Bean 類型、事務屬性、安全角色、資源引用等。
  5. 打包部署:編譯 → 生成存根/骨架 → 打包為 JAR → 部署到容器。

五、經典 HelloWorld 實戰 (基於 Apusic Server)

1. 遠程接口

package ejb.hello;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;

public interface Hello extends EJBObject {
    String getHello() throws RemoteException;
}

2. Home 接口

package ejb.hello;
import javax.ejb.*;
import java.rmi.RemoteException;

public interface HelloHome extends EJBHome {
    Hello create() throws CreateException, RemoteException;
}

3. Bean 實現類

package ejb.hello;
import javax.ejb.*;
import java.rmi.RemoteException;

public class HelloBean implements SessionBean {
    private SessionContext ctx;
    public void ejbCreate() {}
    public String getHello() throws RemoteException { return "Hello World"; }
    // 容器回調方法...
    public void setSessionContext(SessionContext ctx) { this.ctx = ctx; }
    public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() {}
}

4. 部署描述符 (ejb-jar.xml)

<?xml version="1.0"?>
<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>Hello</ejb-name>
      <home>ejb.hello.HelloHome</home>
      <remote>ejb.hello.Hello</remote>
      <ejb-class>ejb.hello.HelloBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
  <assembly-descriptor>
    <container-transaction>
      <method><ejb-name>Hello</ejb-name><method-name>*</method-name></method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

5. 客戶端調用

Context ctx = new InitialContext(env);
HelloHome home = (HelloHome) ctx.lookup("HelloHome");
Hello hello = home.create();
System.out.println(hello.getHello()); // 輸出: Hello World

六、EJB 3.x+ 現代化演進

現代 EJB (3.0+) 採用註解配置 (@Stateless, @PersistenceContext 等),摒棄 Home/Remote 接口與 XML 描述符,引入 JPA 替代 Entity Bean,大幅簡化開發。但理解經典架構有助於掌握容器服務本質。

七、開發工具支持

  • JBuilder:提供向導生成接口、類、部署描述符,集成編譯/部署/調試。
  • Eclipse/IntelliJ + 插件:主流現代選擇,支持 EJB 3.x 開發。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved