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

EJB Session Bean 深度解析:Stateful vs Stateless 生命週期、介面契約與客戶端調用實戰

     編輯:J2EE

Enterprise Bean 兩大類別

  • Session Bean:執行客戶端委派的工作,隨會話建立/銷毀
  • Entity Bean:持久化資料模型,不含業務邏輯,長期存在、高容錯、支援併發存取

Session Bean 兩種狀態模式

類型狀態保持適用場景生命週期
Stateful 跨方法調用保持會話狀態 購物車、ATM 連續操作、多步驟精靈 客戶端建立 → 移除/逾時銷毀
Stateless 無會話狀態,單次業務邏輯 密碼驗證、查詢服務、無狀態業務處理 容器管理池化,按需分配/回收

EJB 容器代理機制:三大介面契約

  1. Home Interface:生命週期工廠(create(), find(), remove())
  2. Remote Interface:業務方法契約(extends EJBObject)
  3. Bean Class:實作 SessionBean,容器回調方法

Bean Class 必須實作的回調方法

public class MyBean implements SessionBean {
    private SessionContext ctx;

    // 1. 註入容器上下文
    public void setSessionContext(SessionContext ctx) { this.ctx = ctx; }

    // 2. 初始化(可多載參數)
    public void ejbCreate() { ... }
    public void ejbCreate(String param) { ... }

    // 3. 被動化:釋放資源前持久化狀態
    public void ejbPassivate() { ... }

    // 4. 活化:還原狀態
    public void ejbActivate() { ... }

    // 5. 移除清理
    public void ejbRemove() { ... }

    // 業務方法
    public String showname() { return "Hello"; }
}

介面定義範例

// Home
public interface MyBeanHome extends EJBHome {
    MyBeanRemote create() throws RemoteException, CreateException;
}

// Remote
public interface MyBeanRemote extends EJBObject {
    String showname() throws RemoteException;
}

客戶端調用流程

Context ctx = new InitialContext();
Object ref = ctx.lookup("MyBean");                    // JNDI 定位 Home
MyBeanHome home = (MyBeanHome) PortableRemoteObject.narrow(ref, MyBeanHome.class);
MyBeanRemote remote = home.create();                  // 建立 EJBObject 代理
String result = remote.showname();                    // 呼叫業務方法

驗證環境

Win2000 + JBuilder 5/6 + BES 4.5 測試通過。

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