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

EJB Session Bean 深度解析:狀態與無狀態會話 Bean 完整實作

     編輯:Java 相關知識

Enterprise Bean 兩大類型

  • Session Bean(會話 Bean):執行客戶端委派工作,隨客戶端會話建立/銷毀
  • Entity Bean(實體 Bean):資料模型映射,不含商務邏輯,持久化、高容錯、支援多用戶並發存取

Session Bean 兩種狀態

Stateful Session Bean(有狀態)

維護客戶端跨方法調用的會話狀態。例:ATM 操作流程,驗證後連續多筆交易,狀態保留至取出卡片結束,Bean 隨之銷毀。

Stateless Session Bean(無狀態)

處理單一請求/商務流程,不保留前序請求狀態。例:密碼驗證,輸入密碼→驗證→回傳真/偽,流程結束 Bean 即結束。

Session Bean 核心類別結構

EJB 運行於容器中,客戶端透過 EJBObject(Remote 介面)間接存取。需實作:

  • Enterprise Bean 類別:實作 SessionBean 介面
  • Home 介面:繼承 EJBHome,定義 create()
  • Remote 介面:繼承 EJBObject,定義商務方法

Bean 類別必要回呼方法(以 sailorsy 為例)

public class sailorsy implements SessionBean {
    private SessionContext ctx = null;
    
    public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } // 容器互動入口
    public void ejbCreate() {} // 初始化,可多載不同參數,至少需一個
    public void ejbPassivate() {} // 容器釋放資源時呼叫(釋放佔用資源)
    public void ejbActivate() {} // 容器重新激活時呼叫
    public void ejbRemove() {} // 容器移除 Bean 時呼叫
    
    // 自訂商務方法
    public String showname() { return "Hello, my name is sailorsy"; }
}

Home 介面

public interface sailorsyHome extends EJBHome {
    public sailorsyRemote create() throws RemoteException, CreateException;
}

Remote 介面

public interface sailorsyRemote extends EJBObject {
    public java.lang.String showname() throws RemoteException;
}

客戶端調用流程

public class sailorsyTestClient1 {
    private sailorsyHome sailorsyHomeObject = null;
    
    public sailorsyTestClient1() {
        try {
            Context ctx = new InitialContext();
            Object ref = ctx.lookup("sailorsy"); // JNDI 定位 Home
            sailorsyHomeObject = (sailorsyHome) PortableRemoteObject.narrow(ref, sailorsyHome.class);
        } catch (Exception e) { e.printStackTrace(); }
    }
    
    public static void main(String[] args) throws Exception {
        sailorsyTestClient1 client = new sailorsyTestClient1();
        sailorsyRemote sr = client.getHome().create(); // 建立 Remote 參考
        String s = sr.showname(); // 呼叫商務方法
        System.out.print(s);
    }
}

部署驗證環境

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

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