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

EJB 入門完整指南:架構角色、開發步驟與 HelloWorld 實戰

     編輯:J2EE

背景與定位

Java 跨平台特性使其成為伺服器端首選。Sun 推出 J2EE 平台,核心為 EJB:定義伺服器端組件標準、組件與應用伺服器間契約,支援可擴展企業級應用快速開發。

JavaBeans vs Enterprise JavaBeans

同為組件模型但關注點不同:JavaBeans 面向視覺化工具組裝;EJB 面向可攜式部署服務框架。無事件/屬性機制,屬性由部署描述符描述。JavaBeans 非專屬客戶端,EJB 非專屬伺服器端。用 JavaBeans 做伺服器應用需自建框架,EJB 提供現成框架。

EJB 體系架構六大角色

  1. Bean Provider:提供可重用商業組件
  2. Container Provider:提供 EJB 運行環境
  3. Server Provider:提供應用伺服器(含容器),如 WebLogic, WebSphere, NetDynamics, Oracle 8i
  4. Application Assembler:組裝組件成應用
  5. Deployer:安裝配置組件至伺服器
  6. System Administrator:管理已配置系統

核心介面契約

  • EJBHome:定位/建立/刪除實例,Home Object 實作
  • EJBObject:實作遠端介面,客戶端代理,提供包裝功能
  • 客戶端透過 Home 管理實例,透過 EJBObject 呼叫商業方法
  • 支援 Java RMI 與 CORBA/IIOP 存取

Session Bean vs Entity Bean

Session BeanEntity Bean
代表商業流程對象持久資料實體
生命週期與客戶端同在與資料同在
類型Stateful / Stateless單一/多表映射
共享性專屬客戶端多客戶端共享
狀態保存客戶端狀態保存資料記錄狀態

最佳組合:客戶端 → Session Bean (流程/交易) → Entity Bean (資料)。

EJB 開發構成要素

  1. Enterprise Bean 類別:商業/資料邏輯實作
  2. EJB Object:容器實作遠端介面
  3. Home 介面:EJB Object 工廠
  4. Deployment Descriptor:中介軟體需求(交易、安全等)
  5. Bean 專屬屬性:運行時動態調整
  6. EJB-JAR:打包部署

開發具體步驟

  1. 實作 SessionBean 或 EntityBean 介面
  2. 擴展 EJBObject 定義遠端介面(方法同名、拋 RemoteException)
  3. 擴展 EJBHome 定義 create() 對應 ejbCreate()
  4. 撰寫 XML 部署描述符 (EJB 1.1 規範)
  5. 打包生成 EJB-JAR

HelloWorld 完整實戰

1. Bean 實作

public class HelloBean implements SessionBean {
    public void ejbCreate() { System.out.println("ejbCreate()"); }
    public void ejbActivate() { System.out.println("ejbActivate()"); }
    public void ejbPassivate() { System.out.println("ejbPassivate()"); }
    public void ejbRemove() { System.out.println("ejbRemove()"); }
    public void setSessionContext(SessionContext ctx) { System.out.println("setSessionContext()"); }
    public String hello() { return "Hello, World!"; }
}

2. 遠端介面

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

3. Home 介面

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

4. 部署描述符

<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>helloworld</ejb-name>
      <home>com.JSPer.ejbexample.session.helloworld.HelloHome</home>
      <remote>com.JSPer.ejbexample.session.helloworld.Hello</remote>
      <ejb-class>com.JSPer.ejbexample.session.helloworld.HelloBean</ejb-class>
      <session-type>Stateless</session-type>
      <container-transaction>
        <method><ejb-name>helloworld</ejb-name><method-name>*</method-name></method>
        Required
      </container-transaction>
    </session>
  </enterprise-beans>
</ejb-jar>

5. WebLogic 專屬描述符

<weblogic-ejb-jar>
  <weblogic-enterprise-bean>
    <ejb-name>helloworld</ejb-name>
    <jndi-name>hello.HelloHome</jndi-name>
  </weblogic-enterprise-bean>
</weblogic-ejb-jar>

6. 打包與部署

  1. 編譯 .java → .class
  2. 建立 META-INF 目錄放描述符、images 目錄放圖示
  3. jar cv0f std_hello.jar META-INF com images
  4. WebLogic: weblogic.ejbc 產生可部署 JAR
  5. 配置 weblogic.properties 加入 JAR 路徑
  6. 啟動伺服器驗證

7. 客戶端呼叫

Context ctx = getInitialContext("t3://localhost:7001", null, null);
HelloHome home = (HelloHome) ctx.lookup("hello.HelloHome");
Hello hello = home.create();
System.out.println(hello.hello());
hello.remove();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved