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

JBoss 3.2.6 實戰教程:從安裝到編寫部署第一個 HelloWorld EJB

     編輯:Java 相關知識

環境準備

  • JDK 1.3+ (JBoss 不捆綁 JDK,必須預裝)
  • 下載 jboss-3.2.6.zip (含 Tomcat 4.1)
  • 解壓至 C:\jboss-3.2.6

啟動與驗證

cd C:\jboss-3.2.6\bin
run.bat          # Windows
# run.sh         # Linux

等待 ~1 分鐘,控制台滾動停止顯示 "Started" 即成功。訪問 Web Console: https://127.0.0.1:8080/web-console/ 進行服務管理監控。

編寫無狀態會話 Bean: HelloWorld

1. 遠程接口 (HelloWorld.java)

package sample;
public interface HelloWorld extends javax.ejb.EJBObject {
    String hello() throws java.rmi.RemoteException;
}

2. Home 接口 (HelloWorldHome.java)

package sample;
public interface HelloWorldHome extends javax.ejb.EJBHome {
    HelloWorld create() throws java.rmi.RemoteException, javax.ejb.CreateException;
}

3. Bean 實現 (HelloWorldBean.java)

package sample;
import javax.ejb.*;

public class HelloWorldBean implements SessionBean {
    private SessionContext ctx;

    public void setSessionContext(SessionContext ctx) { this.ctx = ctx; }
    public void ejbRemove() { System.out.println("ejbRemove()"); }
    public void ejbActivate() { System.out.println("ejbActivate()"); }
    public void ejbPassivate() { System.out.println("ejbPassivate()"); }

    public String hello() {
        System.out.println("hello()");
        return "hello,world";
    }
}

4. 標準部署描述符 (ejb-jar.xml)

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
  <description>JBoss Hello World Application</description>
  <display-name>Hello World EJB</display-name>
  <enterprise-beans>
    <session>
      <ejb-name>Hello</ejb-name>
      <home>sample.HelloWorldHome</home>
      <remote>sample.HelloWorld</remote>
      <ejb-class>sample.HelloWorldBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Bean</transaction-type>
    </session>
  </enterprise-beans>
</ejb-jar>

放置於項目 META-INF/ 目錄。

5. 打包部署

cd F:\projects\jboss-tutorial
jar cf HelloWorld.jar sample META-INF
copy HelloWorld.jar C:\jboss-3.2.6\server\default\deploy\

控制台輸出部署成功日誌:Successfully completed deployment of package: HelloWorld.jar

客戶端調用

package sample;
import javax.naming.*;
import java.util.Hashtable;

public class HelloWorldClient {
    public static void main(String[] args) {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        env.put(Context.PROVIDER_URL, "localhost:1099"); // 遠程機器改 IP:1099
        env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
        try {
            Context ctx = new InitialContext(env);
            Object obj = ctx.lookup("HelloWorld"); // JNDI 名稱默認為 ejb-name
            HelloWorldHome home = (HelloWorldHome) PortableRemoteObject.narrow(obj, HelloWorldHome.class);
            HelloWorld hello = home.create();
            System.out.println(hello.hello()); // 輸出: hello,world
            hello.remove();
        } catch (Exception e) { e.printStackTrace(); }
    }
}

編譯運行客戶端

  • Classpath 需包含 j2ee.jar、jboss-client.jar、jnp-client.jar 等
  • 編譯:javac -cp ... sample/HelloWorldClient.java
  • 運行:java -cp ... sample.HelloWorldClient

關鍵點總結

常見錯誤

  • NoClassDefFoundError:客戶端缺少 JBoss 客戶端 JAR
  • NameNotFoundException:JNDI 名稱錯誤,可通過 Web Console 查看實際綁定名
  • ClassCastException:漏掉 narrow 步驟

結語

JBoss 以開源免費、標準合規、熱部署友好,成為學習 EJB 的最佳平台。掌握「接口對、Bean 實現、描述符、打包、部署、客戶端調用」六步曲,即踏入企業級 Java 開發大門。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
環節要點
JNDI 名稱默認與 ejb-name 一致 (本例 "HelloWorld")
JBoss 命名工廠org.jnp.interfaces.NamingContextFactory
端口1099 (JRMP),非 8080 (HTTP)
窄化PortableRemoteObject.narrow 必須用於 RMI-IIOP 兼容
熱部署直接覆蓋 deploy 目錄 JAR 即可自動重新部署