科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>软件频道>中间件-zhiding>EJB应用从WebLogic到JBoss的迁移方法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

摘要: 在不作任何改动的情况下,为WebLogic开发的应用无法在JBoss中部署,因为JBoss应用服务器的部署描述符有别于WebLogic的部署描述符。在本指南中,我们将通过把WebLogic部署描述符转换成JBoss部署描述符。

来源:中国IT实验室 2007年09月30日

关键字:java 编程 EJB 应用

摘要:

    在不作任何改动的情况下,为WebLogic开发的应用无法在JBoss中部署,因为JBoss应用服务器的部署描述符有别于WebLogic的部署描述符。在本指南中,我们将通过把WebLogic部署描述符转换成JBoss部署描述符,把一个在WebLogic中开发的实体EJB应用范例迁移到JBoss中。

    WebLogic服务器是一种领先的商业应用服务器。但对于小型企业的开发人员,基于标准的开源应用服务器JBoss可用于替代WebLogic和WebSphere等商业应用服务器。不幸的是,在WebLogic上开发的应用不能部署到JBoss上。JBoss迁移服务(Migration Services)对迁移应用至JBoss提供了支持。该方法,通过将特定厂商的部署描述符转换成JBoss兼容的描述器,使应用迁移到JBoss上。为了示范应用迁移的效果,我们把在WebLogic中对Oracle数据库开发的EJB应用迁移到使用开源的MySQL数据库的JBoss应用服务器。

本指南有如下几个部分:
1.        初始设置
2.        概述
3.        根据MySQL配置JBoss
4.        转换WebLogic的EJB应用
5.        在JBoss中部署EJB应用

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:feichangcai;feichangcai
原文:http://www.matrix.org.cn/resource/article/2006-11-08/WebLogic+JBoss_95a016ee-6ebe-11db-bdce-bdc029e475a1.html
关键字:WebLogic;JBoss

初始设置
用MySQL数据库驱动程序类配置MySQL数据库的JDBC连接
1.        下载MySQL JDBC驱动程序.jar文件。
2.        下载并安装MySQL数据库服务器。
3.        下载并安装JBoss 4.0应用服务器。

    开发一个可用XSLT把WebLogic部署描述符转换成JBoss部署描述符的Java应用程序。部署描述符同样可用XSLT工具进行转换。

概述
    在不作任何改动的情况下,为WebLogic开发的应用无法在JBoss中部署,因为JBoss应用服务器的部署描述符有别于WebLogic的部署描述符。在本指南中,我们将通过把WebLogic部署描述符转换成JBoss部署描述符,把一个在WebLogic中开发的实体EJB应用范例迁移到JBoss中。

    该应用范例由一个Catalog实体EJB构成。本文后的Resources部分有一个weblogic-jboss-resources.zip范例文件,里面存放有EJB的bean类(CatalogBean.java)、远程接口(Catalog.java)和本地接口(CatalogHome.java)。配置JBoss要用到MySQL开源数据库。要把WebLogic中的应用迁移到JBoss,不必改动实体EJB类,只需改动EJB部署描述符即可。

在JBoss中使用MySQL
   MySQL是一个适合开源项目和小型企业的开源数据库。用MySQL数据库配置JBoss需要作如下改动:

配置JBoss的Classpath
    根据MySQL配置JBoss 4.0,首先需要复制驱动程序类的.jar文件mysql-connector-java-3.0.9-stable-bin.jar到<JBoss>/server/default/lib目录。这里<JBoss>是你的JBoss应用服务器安装目录。lib目录中的.jar和.zip文件存在于JBoss服务器的Classpath中。

配置MySQL数据源
    要使用MySQL数据源,复制<JBoss>/docs/examples/jca/mysql-ds.xml到<JBoss>/server/default/deploy目录。在JBoss服务器启动时,存在于deploy目录下的数据源配置文件将被部署。对mysql-ds.xml配置文件的改动如下:
•设置<driver-class/>为com.mysql.jdbc.Driver,<connection-url/>为jdbc:mysql://localhost/<database>,这里的<database>指的是MySQL数据库。<database>值可命名为test――本文所创建的MySQL范例数据库。
•在jndi-name元素中指明数据源JDDI名。
•设定连接MySQL的用户名和密码。默认情况下,对于root用户名无需密码。
•设定type-mapping元素为mySQL。type-mapping元素指明了先前在standardjbosscmp-jdbc.xml部署描述符中定义的数据库类型映射。对于MySQL数据库,类型映射名为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>
    </metadata>
  </local-tx-datasource>
</datasources>



 

查看本文来源

通过数据源的JNDI名,我们可以从数据源获得一条JDBC连接:

    InitialContext initialContext = new InitialContext();
    javax.sql.DataSource ds = (javax.sql.DataSource)
    initialContext.lookup("java:/MySqlDS");
    java.sql.Connection conn = ds.getConnection();



配置登陆
    接下来,我们根据MySQL数据库的设置改动login-config.xml配置文件。登陆MySQL数据库须用到应用方案MySqlDbRealm。在login-config.xml中添加以下<application-policy/>元素:

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



    通过改动mysql-ds.xml和login-config.xml文件,JBoss 4.0服务器已经可以与MySQL数据库协同工作。除上述设置外,可能还需为JBoss部署描述符和JBoss JDBC配置文件作一些额外的改动。

    部署CMP实体EJB时,若选择了“create table”(在jbosscmp-jdbc.xml中把create-table元素改为true),并且某个MySQL表的主键(唯一键)长度超过了500字节,应用的部署将在MySQL数据库中产生一条SQL语法错误警告。对于java.lang.String类型的CMP字段,我们知道在standardjbosscmp-jdbc.xml部署描述符中有mySQL类型映射,所以我们可以设置sql-type为java中的 java.lang.String类型,可减少VARCHAR值,从而减少了主键(唯一键)的长度。另一个可能出现的问题涉及部署描述符中的column-name元素。如果MySQL中某张表的某一字段与MySQL保留字相同,在把J2EE应用部署到JBoss后将产生错误,解决问题的办法是,把该字段名换成非MySQL保留字。

转换WebLogic的EJB应用
    设置完MySQL和JBoss后,我们现在需要把WebLogic的EJB应用转换为JBoss的EJB应用。这一过程涉及改变部署描述符。WebLogic的实体EJB应用由EJB部署描述符(ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml)、bean类(CatalogBean.java)、远程接口(Catalog.java)和本地接口(CatalogHome.java)构成。在WebLogic服务器中部署实体EJB时,创建了一个EJB的.jar文件;这个EJB的.jar文件有如下结构:

META-INF/
  ejb-jar.xml
  weblogic-ejb-jar.xml
  weblogic-cmp-rdbms-jar.xml
CatalogBean.class
Catalog.class
CatalogHome.class



    部署描述符中指明了EJB结构信息和应用组合信息。结构信息包括指出EJB是一个会话EJB还是实体EJB。ejb-jar.xml部署描述符的assembly-descriptor元素指明了应用组合信息。WebLogic的实体EJB部署描述符有ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml,相应的JBoss部署描述符是ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml。下面将介绍两者间的转换。

    除了multiplicity元素,WebLogic和JBoss的ejb-jar.xml部署描述符内容是相同的。JBoss服务器ejb-jar.xml中的multiplicity元素需要首字母大写;例如,one要写成One,many要写成Many。

    在样例代码中,有实体EJB范例的ejb-jar.xml部署描述符。ejb-jar.xml范例定义了一个EJB名为“Catalog.”的实体EJB。EJB范例的CMP字段有catalogId、journal和publisher,其主键字段是catalogId。

把weblogic-ejb-jar.xml转换成jboss.xml

    对EJB来说,weblogic-ejb-jar.xml和jboss.xml部署描述符是特定厂商的部署描述符。想把WebLogic EJB应用部署到JBoss应用服务器上,就要把weblogic-ejb-jar.xml部署描述符转换成jboss.xml。

    weblogic-ejb-jar.xml中的根元素是weblogic-ejb-jar。jboss.xml中的根元素是jboss。在jboss.xml 和weblogic-ejb-jar.xml部署描述符中的EJB JNDI名分别为jndi-name元素和local-jndi-name元素。在样本代码中有实体EJB范例的weblogic-ejb-jar.xml部署描述符。weblogic-ejb-jar.xml部署描述符的DOCTYPE元素是:

<  !DOCTYPE weblogic-ejb-jar PUBLIC 
"-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd" >



jboss.xml部署描述符的DOCTYPE元素是:

<  !DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"
   "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">



    源码的.zip文件中存有转换部署描述符weblogic-ejb-jar.xml到jboss.xml的定制XSLT样式表jboss.xslt。欲了解更多关于XSLT转换的详情,请参阅Sun公司的XSLT指南。样式表在JBoss中创建的jboss.xml,等同于WebLogic的weblogic-ejb-jar.xml部署描述符。jboss.xslt样式表产生的jboss.xml存放在范例代码中。

查看本文来源

把weblogic-cmp-rdbms-jar.xml转换成jbosscmp-jdbc.xml

    weblogic-cmp-rdbms-jar.xml部署为一个CMP实体EJB指明了数据库持久化信息。weblogic-ejb-jar.xml文件包括某实体EJB对应的表名、连接数据库的数据源和数据库中对应实体EJB字段的列。实体EJB范例的weblogic-cmp-rdbms-jar.xml部署描述符存放在.zip文件中。在JBoss中,指明CMP实体EJB持久化信息的部署描述符是jbosscmp-jdbc.xml。

    weblogic-cmp-rdbms-jar.xml的根元素是weblogic-rdbms-jar。jbosscmp-jdbc.xml的根元素是jbosscmp-jdbc。在weblogic-cmp-rdbms-jar.xml文件中,用于指明连接数据库数据源的data-source-name元素,等同于jbosscmp-jdbc.xml部署描述符的datasource元素。在weblogic-cmp-rdbms-jar.xml中用于指明实体EJB CMP字段到数据库表中对应列映射的field-map元素,等同于jbosscmp-jdbc.xml中的cmp-field元素。在weblogic-cmp-rdbms-jar.xml中用于指明字段名的dbms-column元素,等同于jbosscmp-jdbc.xml中的column-name元素。对应weblogic-cmp-rdbms-jar.xml部署描述符的DOCTYPE是:

<  !DOCTYPE weblogic-rdbms-jar PUBLIC 
'-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB RDBMS Persistence//EN'



对应jbosscmp-jdbc.xml的DOCTYPE是:

<  !DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN"
    "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd">



    把部署描述符weblogic-cmp-rdbms-jar.xml转换成jbosscmp-jdbc.xml的定制XSLT样式表jbosscmp-jdbc.xslt存放在范例代码中。JBoss中的样式表创建了jbosscmp-jdbc.xml,它等同于WebLogic中的weblogic-cmp-rdbms-jar.xml部署描述符。jbosscmp-jdbc.xml存放在.zip文件中。
 
    WebLogic部署描述符的DTD不同于JBoss部署描述符。通过定制XSLT(为部署描述符添加新元素时,需对XSLT作一些改动),WebLogic的部署描述符可转换成JBoss部署描述符。接下来的部分,EJB应用将部署到JBoss服务器上。

在JBoss中部署EJB应用
    在把WebLogic的EJB部署描述符转换成JBoss部署描述符之后,你需要创建一个EJB .jar文件,把部署描述符部署在JBoss服务器上。JBoss .jar文件的结构是:

META-INF/
  ejb-jar.xml
  jboss.xml
  jbosscmp-jdbc.xml
CatalogBean.class
Catalog.class
CatalogHome.class



编译范例EJB类和接口。
java Catalog.java CatalogBean.java CatalogHome.java

    复制JBoss部署描述符ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml到目录META-INF下。用jar工具从JBoss部署描述符、类和接口创建一个.jar文件。

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


    要部署JBoss实体EJB应用,需复制.jar文件EntityEJB.jar到<JBoss>\server\default\deploy目录下,这里的<JBoss>是JBoss的安装目录。当JBoss服务器启动时,上面的EJB应用将被部署。JBoss应用服务器的deploy目录对应于WebLogic应用服务器的applications目录。

结论
    通过转换部署描述符,部署在WebLogic上的实体EJB应用可被迁移至JBoss应用服务器。采用类似的方法,把weblogic.xml部署描述符转换成jboss-web.xml,可使WebLogic J2EE web应用迁移至JBoss。

资源
本文代码:
http://www.onjava.com/onjava/2005/03/09/examples/weblogic-jboss-resources.zip

Deepak Vohra is a NuBean consultant and a web developer.
Deepak Vohra是一位NuBean的顾问和web开发人员。

查看本文来源