首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

WebLogic EJB 遷移至 JBoss 完整實戰:從 Oracle 到 MySQL

     編輯:J2EE

遷移背景

WebLogic 是商業級應用服務器,而 JBoss 作為開源標準實現,是中小項目降低成本的首選。直接部署 WebLogic 開發的 EJB 到 JBoss 會失敗,核心差異在於廠商專用部署描述符。本文通過一個帶 CMP Entity Bean 的目錄應用,演示完整遷移流程:WebLogic 描述符 → JBoss 描述符(XSLT 轉換)+ 數據庫遷移(Oracle → MySQL)。

環境準備

  • MySQL 5.x + JDBC Driver (mysql-connector-java-3.0.9-stable-bin.jar)
  • JBoss 4.0
  • 示例資源包:weblogic-jboss-resources.zip(含 EJB 源碼、部署描述符、XSLT 樣式表)

一、配置 JBoss + MySQL

1. 安裝 JDBC 驅動

將 mysql-connector-java-3.0.9-stable-bin.jar 複製到 <JBoss>/server/default/lib。

2. 配置數據源

複製 <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 中的類型映射。

3. 配置登錄模組

編輯 <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>

4. 避坑指南

  • 主鍵長度超限: MySQL 主鍵/唯一鍵超過 500 字節會報 SQL 語法錯誤。在 standardjbosscmp-jdbc.xml 的 mySQL 類型映射中,將 java.lang.String 對應的 SQL 類型改為較小的 VARCHAR 長度。
  • 保留字衝突: 表列名若為 MySQL 保留字(如 order, group),部署時報錯,需重命名列。

二、部署描述符轉換(核心步驟)

WebLogic 三大描述符對應 JBoss 三大描述符:

WebLogicJBoss說明
ejb-jar.xmlejb-jar.xml標準描述符,僅 multiplicity 元素需大寫(One/Many)
weblogic-ejb-jar.xmljboss.xml廠商專用:JNDI 名稱、安全角色、事務屬性等
weblogic-cmp-rdbms-jar.xmljbosscmp-jdbc.xmlCMP 映射:表名、數據源、字段-列映射

1. ejb-jar.xml 微調

將 multiplicity 值從 one/many 改為 One/Many(JBoss 強制大寫)。

2. weblogic-ejb-jar.xml → jboss.xml (XSLT)

使用隨附樣式表 jboss.xslt 轉換。關鍵映射:

  • 根元素:weblogic-ejb-jar → jboss
  • DOCTYPE 更新為 JBoss 4.0 DTD
  • jndi-name/local-jndi-name 保留

3. weblogic-cmp-rdbms-jar.xml → jbosscmp-jdbc.xml (XSLT)

使用 jbosscmp-jdbc.xslt 轉換。關鍵映射:

  • 根元素:weblogic-rdbms-jar → jbosscmp-jdbc
  • data-source-name → datasource(引用 MySqlDS)
  • field-map → cmp-field
  • dbms-column → column-name
  • DOCTYPE 更新為 JBossCMP-JDBC 4.0 DTD

注意: XSLT 可能無法覆蓋所有自定義元素,轉換後需人工檢查補全。

三、打包與部署 JBoss EJB

1. JAR 結構

CatalogEJB.jar
├── META-INF/
│   ├── ejb-jar.xml
│   ├── jboss.xml
│   └── jbosscmp-jdbc.xml
├── CatalogBean.class
├── Catalog.class
└── CatalogHome.class

2. 編譯打包命令

javac Catalog.java CatalogBean.java CatalogHome.java
jar cf CatalogEJB.jar CatalogBean.class Catalog.class CatalogHome.class META-INF/*.xml

3. 部署

將 CatalogEJB.jar 複製到 <JBoss>\server\default\deploy,啟動 JBoss 自動部署。

四、驗證與擴展

  • 通過 JMX Console 檢查 Entity Bean 掛載狀態。
  • 編寫測試客戶端通過 JNDI java:/MySqlDS 獲取連接驗證數據源。
  • 同理可將 Web 應用(weblogic.xml → jboss-web.xml)遷移。

結語

通過標準描述符保持不變、廠商描述符 XSLT 轉換、數據源配置適配,可實現 WebLogic EJB 到 JBoss 的低成本遷移。關鍵在於理解兩者描述符的語義對應關係,並妥善處理數據庫類型映射差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved