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

EJB Session Bean 入門實戰:HelloWorld 完整開發流程 (Remote、Home、Bean、部署)

     編輯:J2EE

前言

Session Bean 代表客戶與 EJB 容器的會話,封裝業務邏輯並協調 Entity Bean 或直接存取資料庫。本文以經典「HelloWorld」示範完整開發流程:先定義介面,再實現 Bean,最後部署驗證。

開發順序建議:先介面,後實現

先設計客戶如何使用 (Remote/Home),再編寫 Bean 邏輯,避免介面與實現脫節。

1. Remote 介面 - HelloWorldSession.java


package usingJ2EE.hello;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;

public interface HelloWorldSession extends EJBObject {
    String getGreeting() throws RemoteException;
    void setGreeting(String greeting) throws RemoteException;
}

2. Home 介面 - HelloWorldSessionHome.java


package usingJ2EE.hello;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface HelloWorldSessionHome extends EJBHome {
    HelloWorldSession create() throws RemoteException, CreateException;
    HelloWorldSession create(String initialGreeting) throws RemoteException, CreateException;
}

3. Bean 實現類 - HelloWorldSessionImpl.java


package usingJ2EE.hello;
import javax.ejb.*;

public class HelloWorldSessionImpl implements SessionBean {
    private String greeting;
    private SessionContext context;

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

    // 容器回調:注入 SessionContext
    public void setSessionContext(SessionContext ctx) { this.context = ctx; }

    // 對應 Home.create()
    public void ejbCreate() throws CreateException { greeting = "Hello World!"; }
    // 對應 Home.create(String)
    public void ejbCreate(String g) throws CreateException { greeting = g; }

    // 生命週期回調 (Stateful Bean 才會真正觸發 Passivate/Activate)
    public void ejbActivate() {}
    public void ejbPassivate() {}
    public void ejbRemove() {}

    // 業務方法 (不拋 RemoteException)
    public String getGreeting() { return greeting; }
    public void setGreeting(String g) { greeting = g; }
}

4. 部署描述符 片段



  
    
      HelloWorldSession
      usingJ2EE.hello.HelloWorldSessionHome
      usingJ2EE.hello.HelloWorldSession
      usingJ2EE.hello.HelloWorldSessionImpl
      Stateful 
      Container
    
  

5. 客戶端調用範例


Context ctx = new InitialContext();
HelloWorldSessionHome home = (HelloWorldSessionHome)
    PortableRemoteObject.narrow(ctx.lookup("java:comp/env/ejb/HelloWorld"),
                                HelloWorldSessionHome.class);
HelloWorldSession session = home.create("Hi EJB!");
System.out.println(session.getGreeting()); // 輸出: Hi EJB!
session.remove();

關鍵點總結

  • 三個檔案:Remote、Home、BeanImpl — 即使最簡單邏輯也需三件套。
  • ejbCreate vs create:Home 定義 create,Bean 實現 ejbCreate,容器負責映射。
  • SessionContext:Bean 必須保存 setSessionContext 注入的上下文,用於 getEJBObject()、getUserTransaction() 等。
  • Stateful vs Stateless:範例用 Stateful (有 greeting 狀態);Stateless 則無 ejbActivate/Passivate 實際觸發。
  • IDE 支援:早期 EJB 開發極度依賴商業 IDE (WebLogic Workshop、JBuilder、Allaire) 產生樣板碼。

現代視角

EJB 3.0+ (JPA、CDI、@Stateless/@Stateful 註解) 已大幅簡化此模型,但理解 2.x 架構有助於掌握容器服務 (事務、安全、並發、遠程) 的本質運作方式。

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