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

WebLogic EJB 遷移至 JBoss 完整實戰:從 Oracle 到 MySQL 的零代碼修改部署指南

     編輯:Java 程式設計入門

商業應用伺服器 WebLogic 功能強大但授權昂貴。開源 JBoss (WildFly) 提供完整 Java EE 認證,是遷移首選。本文以「Catalog 實體 EJB + Oracle → MySQL」為例,詳細演示**僅修改部署描述檔、資料源配置、登入模組**即可完成遷移,EJB 業務邏輯代碼**零修改**。

遷移前置準備

  1. 下載 MySQL JDBC 驅動 (`mysql-connector-java-x.x.x.jar`) 複製至 `/server/default/lib/`。
  2. 安裝 MySQL Server,建立資料庫 `test` (或自定)。
  3. 下載 JBoss 4.0 (或 WildFly 現代版本)。

JBoss 資料源與安全配置

1. MySQL 資料源 (mysql-ds.xml)


<?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> <!-- 對應 standardjbosscmp-jdbc.xml 型別映射 -->
    </metadata>
  </local-tx-datasource>
</datasources>

放置於 `/server/default/deploy/`,啟動自動部署。

2. 登入模組 (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>

3. 取得連線 (驗證配置)


InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/MySqlDS");
Connection conn = ds.getConnection(); // 成功即配置正確

部署描述檔轉換矩陣

WebLogic 檔案JBoss 對應檔案轉換重點
`ejb-jar.xml``ejb-jar.xml`**標準檔,僅 `multiplicity` 值需大寫** (`One`/`Many` 而非 `one`/`many`)
`weblogic-ejb-jar.xml``jboss.xml`廠商專屬:JNDI 名稱、資料源映射、快取/鎖定政策、安全身份
`weblogic-cmp-rdbms-jar.xml``jbosscmp-jdbc.xml`CMP 欄位-欄位映射、表建立/移除政策、查詢優化、關係映射

XSLT 自動化轉換策略

編寫 `jboss.xslt` 將 `weblogic-ejb-jar.xml` → `jboss.xml`,`jbosscmp.xslt` 將 `weblogic-cmp-rdbms-jar.xml` → `jbosscmp-jdbc.xml`。核心模板規則:

  • 根元素重命名:`` → ``。
  • JNDI 名稱:`` / `` 保留。
  • 資料源映射:WebLogic `` → JBoss `` + ``/``。
  • CMP 欄位映射:`` → ``/``。
  • 表名:`` 直接對應。
  • 型別映射:引用 `mySQL` 映射 (定義於 `standardjbosscmp-jdbc.xml`)。

MySQL 特有遷移陷阱與對策

問題原因解決方案
建表失敗:主鍵長度超過 500 位元組MySQL 預設索引長度限制 (InnoDB 767 bytes / 3072 bytes 視版本)在 `standardjbosscmp-jdbc.xml` 的 `mySQL` 映射中,將 `java.lang.String` 對應的 SQL 型別從 `VARCHAR(255)` 縮減為 `VARCHAR(100)` 或適當長度
欄位名稱衝突 MySQL 保留字如 `order`、`group`、`key` 等作為欄位名修改 `jbosscmp-jdbc.xml` 中 `` 為非保留字 (如 `order_col`),或使用反引號包裹 (需 JBoss 支援)
CMP 關係映射外鍵約束失敗MySQL 儲存引擎不支援 (MyISAM) 或語法差異確保表為 InnoDB;檢查 `jbosscmp-jdbc.xml` `` `` 設定

EJB JAR 封裝結構 (不變)


META-INF/
  ejb-jar.xml          (標準,已調整 multiplicity)
  jboss.xml            (轉換自 weblogic-ejb-jar.xml)
  jbosscmp-jdbc.xml    (轉換自 weblogic-cmp-rdbms-jar.xml)
CatalogBean.class
Catalog.class          (Remote Interface)
CatalogHome.class      (Home Interface)

驗證遷移成果

  1. 啟動 JBoss,觀察主控台無例外、資料源綁定成功、EJB 部署成功。
  2. 撰寫測試客戶端:JNDI 查找 `CatalogHome` → `create()` → 呼叫業務方法 → 驗證資料庫讀寫正確。
  3. 壓力測試:併發存取、事務回滾、連線池耗盡恢復。

現代化補充:WildFly / JBoss EAP 7+ 遷移要點

  • 資料源配置移至 `standalone.xml` / `domain.xml` `` 子系統。
  • 安全域配置移至 `` (Elytron)。
  • CMP 被 JPA 取代,舊版 CMP EJB 需啟用 `cmp` 子系統或改寫為 JPA Entity。
  • 部署掃描器自動偵測 `deployments/` 目錄 `.jar/.war/.ear`。

「標準化業務邏輯 + 廠商隔離部署描述檔」是 Java EE 移植性的核心承諾。善用 XSLT 自動化轉換,配合標準化資料源與安全抽象,WebLogic → JBoss 遷移可控、可重複、低風險。

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