J2EE Connector Architecture (JCA) 讓應用服務器統一管理 EIS(企業信息系統)連接。本文以自定義 Resource Adapter 為例,詳細演示在四大主流平台上的完整部署流程:J2SDKEE 1.3、IBM WebSphere 5.0、JBoss 3.2、BEA WebLogic 8.1,揭示配置差異與可移植性要點。
public String sayHello(String arg) throws Exception {
InitialContext iniCtx = new InitialContext();
Context enc = (Context) iniCtx.lookup("java:comp/env");
Object ref = enc.lookup("eis/DemoEISFactory"); // 查找連接工廠
ConnectionFactory dcf = (ConnectionFactory) ref;
DemoConnection dc = (DemoConnection) dcf.getConnection();
String result = dc.sayHello(arg);
dc.close();
return result;
}
resource.ear
├── hello.jar // EJB 模塊
│ ├── META-INF/ejb-jar.xml
│ └── com/hellking/jca/ejb/*.class
├── demo.rar // Resource Adapter
│ ├── META-INF/ra.xml
│ └── com/hellking/jca/*.class
├── web.war // Web 模塊
│ ├── WEB-INF/web.xml
│ └── test.jsp
└── META-INF/application.xml
j2ee -verbose 和 deploytooleis/DemoEISFactory / javax.resource.cci.ConnectionFactoryejb/demo、Web Context: /resourceeis/DemoEISFactoryhttps://localhost:8000/resource/test.jspejb/demoeis/DemoEISFactory 到資源 JNDIDemoEISFactory、JNDI eis/DemoEISFactoryhttps://localhost:9080/resource/test.jsp關鍵差異:Resource Adapter 部署時綁定 JNDI,EJB 部署時映射引用。
hellkingjca-service.xml(MBean 定義 NoTxConnectionManager、RARDeployment、ManagedConnectionPool、JNDI: java:/NoTransDemo)jboss.xml 指定 EJB JNDI: ejb/demo、Resource Ref 映射: eis/DemoEISFactory → java:/NoTransDemoresource.ear 目錄和 hellkingjca-service.xml 拷入 %JBOSS_HOME%/server/default/deploy/https://localhost:8080/resource/test.jsp特點:無圖形工具,完全靠 XML,支持爆炸式目錄部署,開發調試極快。
ejb/demoDemoEISFactory、JNDI eis/DemoEISFactoryeis/DemoEISFactoryhttps://localhost:7001/resource/test.jsp特點:裝配階段即綁定 RA JNDI,啟動時自動綁定。
| 環節 | WebLogic | WebSphere | JBoss | J2SDKEE |
|---|---|---|---|---|
| EJB JNDI 綁定 | 裝配時 | 裝配時 | jboss.xml | 部署時 |
| RA 連接工廠 JNDI 綁定 | 裝配時 | 部署後控制台 | 服務 XML | 部署後控制台 |
| EJB 引用 RA 映射 | 裝配時 | 部署時映射 | jboss.xml | 裝配時 |
ejb-jar.xml, ra.xml, application.xml) 保持純標準,不含廠商擴展weblogic-ejb-jar.xml, ibm-ejb-jar-bnd.xmi, jboss.xml, hellkingjca-service.xml)所有平台部署成功後,啟動 EIS Server (src/eis-server/run.bat),瀏覽器訪問對應 URL,頁面顯示:
調用 ejb → jca → eis
發送了: hellking, 返回以下的值:
echo, arg=hellking
EIS Server 控制台輸出:接收到以下輸入: hellking