環境設定
基本需求:快速安裝步驟:
- 首先你要有一個能正常運行的 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 Beanimport 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 檔還有待研究。
沒有留言:
張貼留言