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

EJB 專家進階指南(三):無狀態會話 Bean 基礎與 HelloWorld 完整實作

     編輯:Java 相關知識

無狀態會話 Bean 核心特性

Stateless Session Bean 不維護客戶會話狀態,單次方法調用結束即釋放回實例池,支援高併發、極佳擴展性。核心特徵:

  • 無對話狀態:方法間不保留客戶特定資料。
  • 內部狀態共享:所有實例對客戶端無差別,可安全共用(如資料庫連線池、設定快取)。
  • 初始化無參數:ejbCreate() 不接受參數,因無狀態可保留。
  • 容器聚集重用:實例池動態調整,支援大量並發請求。

HelloWorld 完整開發流程

1. 遠端介面

package com.wiley.compBooks.roman.session.helloworld;
import javax.ejb.*;
import java.rmi.RemoteException;

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

2. Bean 實作類

package com.wiley.compBooks.roman.session.helloworld;
import javax.ejb.*;

public class HelloBean implements SessionBean {
    public void ejbCreate() { System.out.println("ejbCreate()"); }
    public void ejbRemove() { System.out.println("ejbRemove()"); }
    public void ejbActivate() { System.out.println("ejbActivate()"); } // 無狀態 Bean 不會被鈍化,方法留空
    public void ejbPassivate() { System.out.println("ejbPassivate()"); }
    public void setSessionContext(SessionContext ctx) { System.out.println("setSessionContext()"); }

    public String hello() {
        System.out.println("hello()");
        return "Hello, World!";
    }
}

注意:無狀態 Bean 不實作遠端介面,ejbActivate/ejbPassivate 容器不會呼叫,但介面規範要求實作。

3. Home 介面

package com.wiley.compBooks.roman.session.helloworld;
import javax.ejb.*;
import java.rmi.RemoteException;

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

4. 部署描述符關鍵設定

  • Bean 類名、Home/Remote 介面名
  • 會話類型:Stateless
  • 交易屬性、安全角色、環境屬性
  • EJB 1.1 起採用 XML 格式(ejb-jar.xml)

5. 打包與部署

將類檔、介面、部署描述符打包為 HelloWorld.jar,部署至容器(如 WebLogic),容器工具產生 Stub/Skeleton、EJBObject/Home 物件實作。

6. 客戶端程式

package com.wiley.compBooks.roman.session.helloworld;
import javax.ejb.*;
import javax.naming.*;
import java.util.Properties;

public class HelloClient {
    public static void main(String[] args) {
        try {
            Properties props = System.getProperties();
            Context ctx = new InitialContext(props);
            HelloHome home = (HelloHome) ctx.lookup("HelloHome");
            Hello hello = home.create();
            System.out.println(hello.hello()); // 輸出: Hello, World!
            hello.remove();
        } catch (Exception e) { e.printStackTrace(); }
    }
}

執行驗證

啟動 WebLogic (t3server),執行客戶端:

java -Djava.naming.factory.initial=weblogic.jndi.TengahInitialContextFactory
     -Djava.naming.provider.url=t3://localhost:7001
     com.wiley.compBooks.roman.session.helloworld.HelloClient

伺服端日誌依序輸出:setSessionContext() → ejbCreate() → hello() → ejbRemove(),確認 Bean 生命週期正確。

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