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

EJB 入門完全指南:會話 Bean 與實體 Bean 核心概念與代碼實戰

     編輯:J2EE

Enterprise Bean 兩大類型

EJB 規範定義兩類企業 Bean:

  • 會話 Bean (Session Bean):執行客戶端委託的業務任務
  • 實體 Bean (Entity Bean):持久化數據模型,映射關係/對象數據庫

會話 Bean 詳解

客戶端與服務器建立連接時創建。按狀態管理分類:

有狀態會話 Bean (Stateful Session Bean)

  • 維護客戶端與服務器間的會話狀態
  • 生命周期:連接建立 → 多次業務調用 → 客戶端結束 → Bean 銷毀
  • 典型場景:ATM 操作序列(驗證 → 存款 → 查詢 → 取款 → 退卡)

無狀態會話 Bean (Stateless Session Bean)

  • 處理單一請求或業務過程,不依賴前序狀態
  • 調用完成即結束,實例可池化復用
  • 典型場景:用戶密碼驗證(輸入密碼 → 返回真/假)

實體 Bean 特徵

  • 純數據模型,不包含業務邏輯
  • 將數據庫數據映射到內存供其他組件使用
  • 持久存在,高容錯,支持多用戶並發訪問

EJB 運行架構:容器、Home、Remote、Bean 類

客戶端不直接調用 Bean 類,而是通過EJB 容器生成的代理對象:

  1. Home 接口:創建/查找/刪除 EJB 對象的工廠
  2. Remote 接口:業務方法定義,繼承 EJBObject
  3. Bean 類:實現業務邏輯,實現 SessionBean/EntityBean 接口

會話 Bean 完整代碼實戰

1. Bean 類:實現 SessionBean 接口

package examples;
import java.rmi.*;
import javax.ejb.*;

public class SailorsyBean implements SessionBean {
    private SessionContext ctx = null;

    // 1. 設置會話上下文(容器回調)
    public void setSessionContext(SessionContext ctx) {
        this.ctx = ctx;
    }

    // 2. 創建初始化(可重載多個 ejbCreate)
    public void ejbCreate() {
        // 初始化邏輯
    }

    // 3. 鈍化:容器釋放資源前回調
    public void ejbPassivate() {
        // 釋放非持久資源
    }

    // 4. 激活:容器恢復實例時回調
    public void ejbActivate() {
        // 重新獲取資源
    }

    // 5. 移除:客戶端調用 remove 或超時銷毀前回調
    public void ejbRemove() {
        // 清理工作
    }

    // 業務方法
    public String showName() {
        return "Hello, my name is sailorsy";
    }
}

2. Home 接口:繼承 EJBHome

package examples;
import java.rmi.*;
import javax.ejb.*;

public interface SailorsyHome extends EJBHome {
    public SailorsyRemote create() throws RemoteException, CreateException;
}

3. Remote 接口:繼承 EJBObject

package examples;
import java.rmi.*;
import javax.ejb.*;

public interface SailorsyRemote extends EJBObject {
    public String showName() throws RemoteException;
}

客戶端調用流程

public class SailorsyTestClient {
    private SailorsyHome home = null;

    public SailorsyTestClient() {
        try {
            Context ctx = new InitialContext();
            Object ref = ctx.lookup("sailorsy"); // JNDI 查找 Home
            home = (SailorsyHome) PortableRemoteObject.narrow(ref, SailorsyHome.class);
        } catch (Exception e) { e.printStackTrace(); }
    }

    public static void main(String[] args) throws Exception {
        SailorsyTestClient client = new SailorsyTestClient();
        SailorsyRemote bean = client.getHome().create(); // 創建 EJB 對象
        String result = bean.showName(); // 調用業務方法
        System.out.println(result);
    }
}

EJB 完整執行流程

  1. 客戶端通過 JNDI 檢索 Home 對象引用
  2. JNDI 返回 Home 引用
  3. 客戶端調用 create() 請求創建 EJB 對象
  4. 容器創建 EJB 對象(實例化 Bean、生成 EJBObject、綁定 Stub)
  5. 返回 EJB 對象(Remote Stub)給客戶端
  6. 客戶端調用業務方法
  7. 容器委派調用到 Bean 實例

部署驗證環境

測試環境:Windows 2000 + JBuilder 5/6 + BES 4.5。部署時需編寫 ejb-jar.xml 描述符,定義 Bean 類型、事務屬性、安全角色等。

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