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

WebLogic EJB 遷移至 JBoss 完整實戰:部署描述符轉換與數據源重構

     編輯:Java 相關知識

WebLogic 作為商業應用服務器功能強大但授權成本高,JBoss (現 WildFly) 作為開源替代方案廣受中小團隊青睞。本文以 Oracle → MySQL、WebLogic → JBoss 4.0 為例,詳細演示 EJB 2.x 實體 Bean 遷移全流程,核心在於廠商專用部署描述符的等效轉換。

遷移前提與環境準備

  • MySQL 5.x + JDBC 驅動 (mysql-connector-java.jar)
  • JBoss 4.0.x 安裝包
  • 原 WebLogic EJB 項目源碼(Bean 類、Home/Remote 接口、三個部署描述符)

JBoss 數據源與安全域配置

1. 安裝 MySQL 驅動

cp mysql-connector-java-3.0.9-stable-bin.jar $JBOSS_HOME/server/default/lib/

2. 配置數據源 mysql-ds.xml

cp $JBOSS_HOME/docs/examples/jca/mysql-ds.xml $JBOSS_HOME/server/default/deploy/

修改關鍵屬性:

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

3. 配置安全域 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 字節會報錯,需在 standardjbosscmp-jdbc.xml 中調整 VARCHAR 長度
  • 保留字衝突:列名勿使用 MySQL 保留字(如 order, group)
  • 建表策略:jbosscmp-jdbc.xml 中 create-table=true 僅開發環境使用

部署描述符轉換矩陣

EJB 2.x 標準描述符 ejb-jar.xml 通用,僅 multiplicity 元素需大寫 (One/Many 而非 one/many)。核心轉換在廠商描述符:

功能WebLogicJBoss轉換工具
EJB 容器配置weblogic-ejb-jar.xmljboss.xmlXSLT: jboss.xslt
CMP 字段映射weblogic-cmp-rdbms-jar.xmljbosscmp-jdbc.xmlXSLT: jbosscmp-jdbc.xslt

關鍵元素映射對照

WebLogic → JBoss
weblogic-ejb-jar (根)           → jboss (根)
jndi-name / local-jndi-name     → jndi-name / local-jndi-name
data-source-name                → datasource
field-map                       → cmp-field
dbms-column                     → column-name
weblogic-rdbms-jar (根)         → jbosscmp-jdbc (根)

XSLT 轉換示例片段

<!-- jboss.xslt 片段 -->
<xsl:template match="weblogic-ejb-jar">
    <jboss>
        <xsl:apply-templates select="@*|node()"/>
    </jboss>
</xsl:template>

<xsl:template match="jndi-name">
    <jndi-name><xsl:value-of select="."/></jndi-name>
</xsl:template>

<xsl:template match="data-source-name">
    <datasource><xsl:value-of select="."/></datasource>
</xsl:template>

完整 XSLT 文件隨源碼提供,執行 xsltproc jboss.xslt weblogic-ejb-jar.xml > jboss.xml 即可生成。

打包與部署結構對比

WebLogic EJB JAR:          JBoss EJB JAR:
META-INF/                    META-INF/
  ejb-jar.xml                  ejb-jar.xml
  weblogic-ejb-jar.xml       jboss.xml
  weblogic-cmp-rdbms-jar.xml jbosscmp-jdbc.xml
  CatalogBean.class          CatalogBean.class
  Catalog.class              Catalog.class
  CatalogHome.class          CatalogHome.class

構建部署命令

# 編譯
javac -cp $JBOSS_HOME/client/jboss-client.jar *.java

# 打包
jar cf CatalogEJB.jar CatalogBean.class Catalog.class CatalogHome.class META-INF/*.xml

# 部署
cp CatalogEJB.jar $JBOSS_HOME/server/default/deploy/

驗證與測試

  1. 啟動 JBoss,觀察控制台:WSVR0221I: Application started
  2. 編寫獨立客戶端測試:
Properties props = new Properties();
props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.put("java.naming.provider.url", "jnp://localhost:1099");  // JBoss 默認 JNDI 端口
props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

Context ctx = new InitialContext(props);
CatalogHome home = (CatalogHome) ctx.lookup("CatalogHome");  // jndi-name 值
Catalog catalog = home.create(new Integer(1), "Journal", "Publisher");
// 測試 CRUD 操作...

Web 應用遷移延伸

同理,Web 模塊遷移核心為 weblogic.xml → jboss-web.xml 轉換:

WebLogic: <context-root>/myapp</context-root>
JBoss:    <context-root>/myapp</context-root>

WebLogic: <resource-description><res-ref-name>jdbc/MyDS</res-ref-name><jndi-name>OracleDS</jndi-name></resource-description>
JBoss:    <resource-ref><res-ref-name>jdbc/MyDS</res-ref-name><jndi-name>java:/MySqlDS</jndi-name></resource-ref>

總結

EJB 遷移本質是「標準 API 不變,廠商描述符重寫」。掌握 XSLT 自動化轉換可大幅降低工作量,關鍵難點在數據源類型映射、安全域集成、主鍵生成策略差異。建議遷移前完成全量自動化測試覆蓋,確保業務邏輯零回歸。

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