環境準備
- 下載範例碼:
j2eetutorial/examples/src/ejb/converter (Sun 下載頁)
- 安裝 Ant (Apache Ant)
- 設定環境變數:
JAVA_HOME, J2EE_HOME, ANT_HOME, PATH 包含三者 bin 目錄
- 啟動 J2EE Server:
j2ee -verbose (停止:j2ee -stop)
- 啟動 DeployTool (GUI):
deploytool
建立 J2EE 應用程式
- DeployTool:File → New Application
- 目錄選
j2eetutorial/examples/src/ejb/converter
- 檔案名
ConverterApp.ear
建立 Enterprise Bean (ConverterEJB)
三大組件
- Remote Interface:
Converter.java
public interface Converter extends EJBObject {
BigDecimal dollarToYen(BigDecimal dollars) throws RemoteException;
BigDecimal yenToEuro(BigDecimal yen) throws RemoteException;
}
- Home Interface:
ConverterHome.java
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteException, CreateException;
}
- Bean Class:
ConverterBean.java (Stateless)
public class ConverterBean implements SessionBean {
BigDecimal yenRate = new BigDecimal("121.6000");
BigDecimal euroRate = new BigDecimal("0.0077");
public BigDecimal dollarToYen(BigDecimal dollars) {
return dollars.multiply(yenRate).setScale(2, BigDecimal.ROUND_UP);
}
public BigDecimal yenToEuro(BigDecimal yen) {
return yen.multiply(euroRate).setScale(2, BigDecimal.ROUND_UP);
}
// ejbCreate, ejbRemove, ejbActivate, ejbPassivate, setSessionContext 皆為空實作
}
編譯與打包
- 命令列:
ant converter (輸出至 build/ejb/converter)
- DeployTool:File → New Enterprise Bean → 建立 JAR (ConverterJAR) → 加入三個類別
- Bean Type:Session, Stateless, Class: ConverterBean, Name: ConverterEJB
- Remote Home: ConverterHome, Remote: Converter
建立應用程式客戶端
原始碼:ConverterClient.java
public class ConverterClient {
public static void main(String[] args) {
try {
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter");
ConverterHome home = (ConverterHome) PortableRemoteObject.narrow(objref, ConverterHome.class);
Converter currencyConverter = home.create();
BigDecimal param = new BigDecimal("100.00");
BigDecimal amount = currencyConverter.dollarToYen(param);
System.out.println(amount); // 12160.00
amount = currencyConverter.yenToEuro(param);
System.out.println(amount); // 0.77
} catch (Exception ex) { ex.printStackTrace(); }
}
}
打包客戶端
- DeployTool:New Application Client → 加入 ConverterClient.class
- Main Class: ConverterClient, Callback Handler: container-managed
- EJB Refs:Coded Name
ejb/SimpleConverter, Type Session, Interface Remote, Home ConverterHome, Remote Converter
建立 Web Client (JSP)
index.jsp (無需編譯)
- DeployTool:New Web Component → New WAR (ConverterWAR) → 加入 index.jsp
- EJB Refs:Coded Name
ejb/TheConverter (其他同客戶端)
指定 JNDI 名稱
- 選擇 ConverterApp → JNDI Names 標籤 → 全部輸入
MyConverter
部署與執行
- Tools → Deploy → Return Client JAR → 指定輸出路徑
- 確認 JNDI Name → WAR Context Root:
converter
執行應用程式客戶端
cd j2eetutorial/examples/src/ejb/converter
set APPCPATH=ConverterAppClient.jar
runclient -client ConverterApp.ear -name ConverterClient -textauth
# user: guest / pass: guest123
# 輸出: 12160.00 / 0.77
執行 Web Client
https://:8000/converter