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

Session Bean 入門教學 (一):Hello World 元件完整建構流程

     編輯:Java 相關知識

Session Bean 角色定位

Session Bean 代表客戶與 EJB 容器之間的會話,封裝商業邏輯、協調 Entity Bean、或直接存取資料庫。是企業級應用中「處理流程」的核心元件。

開發原則:介面優先

先定義 Remote/Home 介面 (契約),再實作 Bean 類別。契約優先確保:客戶端與 Bean 解耦、團隊並行開發、介面穩定性。

步驟 1:定義 Remote 介面 — HelloWorldSession.java


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

public interface HelloWorldSession extends EJBObject {
    String getGreeting() throws RemoteException;
    void setGreeting(String aGreeting) throws RemoteException;
}
  • 繼承 EJBObject:獲得分散式物件身分 (getHandle、remove、isIdentical 等)
  • 所有方法拋出 RemoteException:網路呼叫失敗語意
  • 方法命名遵循 JavaBean 屬性慣例 (get/set)

步驟 2:定義 Home 介面 — HelloWorldSessionHome.java


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

public interface HelloWorldSessionHome extends EJBHome {
    HelloWorldSession create() throws RemoteException, CreateException;
    HelloWorldSession create(String aGreeting) throws RemoteException, CreateException;
}
  • 繼承 EJBHome:提供生命週期管理方法
  • 多載 create:支援預設值與客製化初始化
  • 拋出 CreateException:建立失敗業務語意 (如參數驗證失敗)

步驟 3:實作 Bean 類別 — HelloWorldSessionImpl.java


package usingj2ee.hello;
import java.rmi.*;
import java.util.*;
import javax.ejb.*;

public class HelloWorldSessionImpl implements SessionBean {
    // 會話狀態欄位
    protected String greeting;
    
    // 容器提供的執行環境
    private SessionContext context;

    // 必須:public 無參建構子
    public HelloWorldSessionImpl() {}

    // 容器回呼:注入 SessionContext
    public void setSessionContext(SessionContext aContext) {
        context = aContext;
    }

    // 容器回呼:對應 Home.create()
    public void ejbCreate() throws CreateException {
        greeting = "Hello World!";
    }

    // 容器回呼:對應 Home.create(String)
    public void ejbCreate(String aGreeting) throws CreateException {
        greeting = aGreeting;
    }

    // 容器回呼:Bean 從 Passivate 狀態喚醒
    public void ejbActivate() {}

    // 容器回呼:Bean 進入 Passivate 狀態 (序列化前)
    public void ejbPassivate() {}

    // 容器回呼:Bean 被移除前清理
    public void ejbRemove() {}

    // 業務方法:實作 Remote 介面定義 (不拋出 RemoteException)
    public String getGreeting() { return greeting; }
    public void setGreeting(String aGreeting) { greeting = aGreeting; }
}

關鍵概念對照表

Home 介面實作類別觸發時機
create()ejbCreate()客戶建立新會話
create(String)ejbCreate(String)客戶建立帶參數會話
remove()ejbRemove()客戶結束會話或容器逾時
(容器管理)ejbPassivate()容器閒置 Bean 釋放資源
(容器管理)ejbActivate()容器重新啟用 Bean

命名慣例建議

元件命名模式範例
Remote 介面XXXShoppingCart
Home 介面XXXHomeShoppingCartHome
實作類別XXXImpl / XXXBeanShoppingCartImpl
Bean 邏輯名XXXShoppingCart bean

團隊開發務必統一命名,避免混淆。

IDE 支援現況

早期 EJB 開發需手寫大量樣板代碼。現代 IDE (IntelliJ IDEA、Eclipse、NetBeans) 提供:

  • EJB 專案範本自動生成介面/實作骨架
  • 部署描述符視覺化編輯器
  • 內建應用伺服器整合 (一鍵部署/除錯)
  • 程式碼產生:getter/setter、ejbCreate 對應 create 等

EJB 開發的價值權衡

「對小專案,EJB 樣板代碼成本與業務代碼相当;但應用增長時,元件化架構讓混合組裝新功能變簡單。」

  • 優點:交易管理、安全性、資源池化、分散式透明、生命週期管理由容器負責
  • 成本:學習曲線、部署複雜度、效能額外負擔 (RMI-IIOP)

結語

Hello World Session Bean 雖簡單,却完整展示了 EJB 核心架構:契約介面 (Remote/Home)、容器管理生命週期 (ejbCreate/Passivate/Activate/Remove)、會話狀態封裝、SessionContext 環境存取。掌握此基礎模式,即可進階學習無狀態 Bean、Entity Bean、訊息驅動 Bean 等企業級元件模型。

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