本文以 Sun 官方 Converter 範例為基礎,完整示範從撰寫 EJB、編譯、打包、部署至撰寫客戶端呼叫的完整流程,幫助初學者建立 J2EE 開發全貌。
J2EE_HOME/doc/guides/ejb/examples/converterimport javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Converter extends EJBObject {
public double dollarToYen(double dollars) throws RemoteException;
public double yenToEuro(double yen) throws RemoteException;
}
定義客戶端可呼叫的商業方法,必須繼承 EJBObject,方法須拋出 RemoteException。
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteException, CreateException;
}
定義建立、尋找、移除 EJB 的方法,本例僅定義 create() 回傳遠端介面型別。
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class ConverterEJB implements SessionBean {
public double dollarToYen(double dollars) {
return dollars * 121.6000;
}
public double yenToEuro(double yen) {
return yen * 0.0077;
}
// SessionBean 必須實作的生命週期方法
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
本例為無狀態 Session Bean,實作兩個匯率轉換商業邏輯。
需將 J2EE_HOME/lib/j2ee.jar 加入 classpath。
set J2EE_HOME=你的J2EE安裝路徑
set CPATH=.;%J2EE_HOME%\lib\j2ee.jar
javac -classpath %CPATH% ConverterEJB.java ConverterHome.java Converter.java
j2ee -verbosedeploytoolConverterApp.ear → 確定ConverterAppConverterJAR.class 檔:Converter.class, ConverterEJB.class, ConverterHome.classConverterApp.ear在部署工具中選擇 ConverterApp.ear,點選「部署」按鈕,選擇目標伺服器完成部署。
import converter.Converter;
import converter.ConverterHome;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
public class ConverterClient {
public static void main(String[] args) {
try {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory");
props.put(Context.PROVIDER_URL, "iiop://localhost:3700");
Context ctx = new InitialContext(props);
ConverterHome home = (ConverterHome) ctx.lookup("ConverterHome");
Converter converter = home.create();
double yen = converter.dollarToYen(100.00);
System.out.println("100 美元 = " + yen + " 日圓");
double euro = converter.yenToEuro(yen);
System.out.println(yen + " 日圓 = " + euro + " 歐元");
} catch (Exception e) {
e.printStackTrace();
}
}
}
javac -classpath %J2EE_HOME%\lib\j2ee.jar ConverterClient.java
java -classpath .;%J2EE_HOME%\lib\j2ee.jar ConverterClient
完成上述流程,即掌握 EJB 開發部署的核心骨架。實務上再加上資料庫連線、交易管理、安全性配置等進階主題,即可建構企業級應用。