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

EJB 3.x 開發全流程指南:從 Session Bean 到客戶端調用

     編輯:Java 相關知識

Session Bean 開發標準步驟(EJB 2.x 風格,歷史參考)

現代 EJB 3.x 已大幅簡化(無需 Home/Remote 介面,使用注解),但理解傳統流程有助於維護舊系統。

1. 定義遠程業務介面

@Remote
public interface MyEJB {
    String sayHello() throws RemoteException;
}

2. 定義 Home 介面(工廠模式)

@RemoteHome
public interface MyEJBHome extends EJBHome {
    MyEJB create() throws RemoteException, CreateException;
}

3. 實現 Bean 類

@Stateless
public class MyEJBBean implements SessionBean {
    public void ejbCreate() throws CreateException {}
    public void ejbActivate() {}
    public void ejbPassivate() {}
    public void ejbRemove() {}
    public void setSessionContext(SessionContext ctx) {}

    public String sayHello() { return "Hello EJB"; }
}

4. 部署描述符 ejb-jar.xml

<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>helloEjb</ejb-name>
      <home>com.jsper.ejb.MyEJBHome</home>
      <remote>com.jsper.ejb.MyEJB</remote>
      <ejb-class>com.jsper.ejb.MyEJBBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
</ejb-jar>

5. 打包與部署

  • 將類文件與 META-INF/ejb-jar.xml 打成 JAR
  • 使用容器專用工具(如 WebLogic appc、JBoss ejbc)生成存根/骨架
  • 部署至 EJB 容器(啟動時自動或熱部署)

客戶端調用模式

本地調用(同一 JVM/容器)

Context ctx = new InitialContext();
MyEJBHome home = (MyEJBHome) ctx.lookup("hello");
MyEJB ejb = home.create();
ejb.sayHello();

遠程調用(跨 JVM/容器)

需配置 JNDI 環境屬性(Provider URL、初始工廠、安全憑證):

Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.SECURITY_PRINCIPAL, "user");
env.put(Context.SECURITY_CREDENTIALS, "pass");
Context ctx = new InitialContext(env);
MyEJBHome home = (MyEJBHome) ctx.lookup("hello");

EJB 3.x 現代化簡化

  • 無需 Home/Remote 介面,直接用 @Remote 或 @Local 標註業務介面
  • Bean 類用 @Stateless/@Stateful/@Singleton 標註
  • 依賴注入替代 JNDI 查找:@EJB MyEJB ejb;
  • 攔截器、定時服務、異步調用均由注解聲明

最佳實踐

  1. 優先使用 @Local 介面(同一應用內調用),避免遠程序列化開銷
  2. 無狀態 Bean (@Stateless) 適合高併發業務邏輯
  3. 有狀態 Bean (@Stateful) 僅用於會話級狀態維護
  4. 事務屬性預設 REQUIRED,按業務需要調整
  5. 大量數據傳輸使用 DTO/VO,避免實體 Bean 直接暴露
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved