EJB 巨大優勢在於可像 GUI 組件一樣可攜式打包分發伺服端邏輯。四項工作完成後產生 Demo.jar,準備配置安裝至 EJB 容器。
javac ejb/Demo/demohome.java
javac ejb/Demo/demo.java
javac ejb/Demo/demobean.java
部署描述符讓部署者在安裝前客製化 Bean 屬性。範例為 SessionDescriptor 實例,以文字檔輸入 WebLogic 工具產生序列化實例 DemoBeanDD.ser。
# 指令
java weblogic.ejb.utils.DDCreator -dir ejb/demo DeploymentDescriptor.txt
# DeploymentDescriptor.txt 關鍵內容
(SessionDescriptor
beanHomeName demo.DemoHome
enterpriseBeanClassName ejb.demo.DemoBean
homeInterfaceClassName ejb.demo.DemoHome
remoteInterfaceClassName ejb.demo.Demo
isReentrant false
stateManagementType STATELESS_SESSION
sessionTimeout 5
(controlDescriptors (DEFAULT isolationLevel TRANSACTION_SERIALIZABLE transactionAttribute TX_REQUIRED runAsMode CLIENT_IDENTITY))
(environmentProperties maxBeansInFreePool 100)
)
註:WebLogic 以分號 ; 為註解標記。
java.util.Properties 實例 (若需)Manifest:識別 ejb-jar 內部署描述符# manifest.txt
Name: ejb/demo/DemoBeanDD.ser
Enterprise-Bean: True
jar cvfm Demo.jar ejb/demo/manifest.txt ejb/demo/*.class ejb/demo/*.ser
# 驗證
jar tf Demo.jar
# 輸出應含:META-INF/MANIFEST.MF, ejb/demo/Demo.class, DemoBean.class, DemoHome.class, DemoBeanDD.ser
java weblogic.ejbc -d /export/weblogic/classes ejb/demo/DemoBeanDD.ser
# 產生:DemoBeanEOImpl.class, DemoBeanHomeImpl.class, Stub/Skeleton 類別
最簡單:複製至 /export/weblogic/classes,編輯 startTengah.sh 加入 Classpath。
cd /export/weblogic/classes
jar xvf Demo.jar ejb/demo/DemoBeanDD.ser
weblogic.ejb.deploy=\
/export/weblogic/classes/ejb/demo/DemoBeanDD.ser
用工具或殺掉主進程後跑 startTengah.sh。
不同容器/伺服器可能需不同版本客戶端代碼 (如 JNDI 初始化屬性不同)。
package ejb.demo;
import javax.ejb.*; import javax.naming.*; import java.rmi.*; import java.util.Properties;
public class demoClient {
public static void main(String[] args) {
System.out.println("\nBegin demoClient...\n");
parseArgs(args);
try {
Context ctx = getInitialContext();
DemoHome dhome = (DemoHome) ctx.lookup("demo.DemoHome");
System.out.println("Creating Demo\n");
Demo demo = dhome.create();
System.out.println("The result is " + demo.demoSelect());
} catch (Exception e) { e.printStackTrace(); }
System.out.println("\nEnd demoClient...\n");
}
// parseArgs, getInitialContext (WebLogic: weblogic.jndi.T3InitialContextFactory, t3://localhost:7001)
}
javac ejb/Demo/democlient.java
java ejb.Demo.democlient
Begin demoClient...
Creating Demo
The result is Hello World
End demoClient...
Hello World 來自 Bean 的 demoSelect() 方法。
成功建立並執行 DemoBean 無狀態 Session Bean 完整範例,涵蓋編譯、打包、部署描述符、容器部署、客戶端開發與驗證全流程。