WebLogic 是商業級應用服務器,而 JBoss 作為開源標準實現,是中小項目降低成本的首選。直接部署 WebLogic 開發的 EJB 到 JBoss 會失敗,核心差異在於廠商專用部署描述符。本文通過一個帶 CMP Entity Bean 的目錄應用,演示完整遷移流程:WebLogic 描述符 → JBoss 描述符(XSLT 轉換)+ 數據庫遷移(Oracle → MySQL)。
mysql-connector-java-3.0.9-stable-bin.jar)weblogic-jboss-resources.zip(含 EJB 源碼、部署描述符、XSLT 樣式表)將 mysql-connector-java-3.0.9-stable-bin.jar 複製到 <JBoss>/server/default/lib。
複製 <JBoss>/docs/examples/jca/mysql-ds.xml 到 <JBoss>/server/default/deploy,修改關鍵屬性:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password></password>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
關鍵點: type-mapping 必須為 mySQL,對應 standardjbosscmp-jdbc.xml 中的類型映射。
編輯 <JBoss>/server/default/conf/login-config.xml,新增應用策略:
<application-policy name="MySqlDbRealm">
<authentication>
<login-module code="org.jboss.resource.security.ConfiguredIdentityLoginModule" flag="required">
<module-option name="principal"></module-option>
<module-option name="userName">root</module-option>
<module-option name="password"></module-option>
<module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=MySqlDS</module-option>
</login-module>
</authentication>
</application-policy>
standardjbosscmp-jdbc.xml 的 mySQL 類型映射中,將 java.lang.String 對應的 SQL 類型改為較小的 VARCHAR 長度。order, group),部署時報錯,需重命名列。WebLogic 三大描述符對應 JBoss 三大描述符:
| WebLogic | JBoss | 說明 |
|---|---|---|
ejb-jar.xml | ejb-jar.xml | 標準描述符,僅 multiplicity 元素需大寫(One/Many) |
weblogic-ejb-jar.xml | jboss.xml | 廠商專用:JNDI 名稱、安全角色、事務屬性等 |
weblogic-cmp-rdbms-jar.xml | jbosscmp-jdbc.xml | CMP 映射:表名、數據源、字段-列映射 |
將 multiplicity 值從 one/many 改為 One/Many(JBoss 強制大寫)。
使用隨附樣式表 jboss.xslt 轉換。關鍵映射:
weblogic-ejb-jar → jbossjndi-name/local-jndi-name 保留使用 jbosscmp-jdbc.xslt 轉換。關鍵映射:
weblogic-rdbms-jar → jbosscmp-jdbcdata-source-name → datasource(引用 MySqlDS)field-map → cmp-fielddbms-column → column-name注意: XSLT 可能無法覆蓋所有自定義元素,轉換後需人工檢查補全。
CatalogEJB.jar
├── META-INF/
│ ├── ejb-jar.xml
│ ├── jboss.xml
│ └── jbosscmp-jdbc.xml
├── CatalogBean.class
├── Catalog.class
└── CatalogHome.class
javac Catalog.java CatalogBean.java CatalogHome.java
jar cf CatalogEJB.jar CatalogBean.class Catalog.class CatalogHome.class META-INF/*.xml
將 CatalogEJB.jar 複製到 <JBoss>\server\default\deploy,啟動 JBoss 自動部署。
java:/MySqlDS 獲取連接驗證數據源。weblogic.xml → jboss-web.xml)遷移。通過標準描述符保持不變、廠商描述符 XSLT 轉換、數據源配置適配,可實現 WebLogic EJB 到 JBoss 的低成本遷移。關鍵在於理解兩者描述符的語義對應關係,並妥善處理數據庫類型映射差異。