環境設定
基本需求:快速安裝步驟:
- 首先你要有一個能正常運行的 Tomcat server
- 把從 OpenEJB 抓下來的 openejb.war 放到 ${tomcat.home}/webapps/ 下
(注意:這個檔案必須名為openejb.war,所以不要去改名稱...) - 啟動 Tomcat,打開網址 http://localhost:8080/openejb/installer 並點下 Install 按鈕
EJB 程式碼部分
由於是舊系統,所以這邊用的是 EJB 2.x 的規格來寫,範例寫的是一顆 stateless 的 session bean,EJB 的介紹在這邊就不詳述了。Remote介面
import java.rmi.RemoteException; import javax.ejb.EJBObject; public interface FruitShop extends EJBObject { public String getBanana() throws RemoteException; }Home介面
import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface FruitShopHome extends EJBHome { public FruitShop create() throws CreateException, RemoteException; }Session Bean
import java.rmi.RemoteException; import javax.ejb.*; public class FruitShopBean implements SessionBean { public void ejbActivate() throws EJBException, RemoteException {} public void ejbPassivate() throws EJBException, RemoteException {} public void ejbRemove() throws EJBException, RemoteException {} public void setSessionContext(SessionContext context) throws EJBException, RemoteException {} public String getBanana() { return "You get a banana."; } }
別忘了在 classpath 上加上 javaEE 的 jar 檔,以免編譯錯誤。如果照上面的步驟安裝的話,在 ${tomcat.home}/webapps/openejb/lib/ 下可以找到 openEJB 提供的 javaee-api-5.0-3.jar
然後建立一個 ejb-jar.xml 如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>FruitShop</ejb-name> <remote>FruitShop</remote> <home>FruitShopHome</home> <ejb-class>FruitShopBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <security-identity> <description></description> <use-caller-identity></use-caller-identity> </security-identity> </session> </enterprise-beans> </ejb-jar>
部署 EJB
編譯成 jar 檔後,放在 ${tomcat.home}/conf/openejb.xml 中設定的路徑下<!-- # # The <Deployments> element can be used to configure file # paths where OpenEJB should look for ejb jars or ear files. # # See http://openejb.apache.org/3.0/deployments.html # # The below entry is simply a default and can be changed or deleted --> <!-- 可以用相對路徑的方式, 相對於openejb.base設定的路徑 --> <Deployments dir="ejb/" /> <!-- 或是指定一個目錄, 讓openEJB自動搜尋相關jar檔 --> <Deployments dir="D:/Tomcat/ejb/" /> <!-- 最後還可以直接指定目標jar檔 --> <Deployments jar="D:/Tomcat/ejb/FruitShop.jar" />
測試 client 端呼叫 EJB
根據官方的說明文件,用 Remote Client with HTTP (in tomcat) 的方式來呼叫 EJBimport java.util.Properties; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; public class EJBTest { public static void main(String args[]) throws Exception { Properties p = new Properties(); p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory"); p.put("java.naming.provider.url", "http://localhost:8080/openejb/ejb"); InitialContext ctx = new InitialContext(p); Object ref = ctx.lookup("FruitShopRemoteHome"); FruitShopHome home = (FruitShopHome) PortableRemoteObject.narrow(ref, FruitShopHome.class); FruitShop remote = home.create(); System.out.println(remote.getBanana()); //You get a banana. } }
沒意外的話應該可以從 console 看到輸出。
另外... 關於 eclipse helios 怎樣將 EJB project 輸出 client 用的 jar 檔還有待研究。