欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

把WebLogic EJB程序迁移到JBoss上

程序员文章站 2024-02-21 17:34:40
  weblogic服务器是一款*的商业应用程序服务器。但是对于小规模的开发者来说,开发源代码的、基于标准的应用程序服务器jboss是可以用来替换类似weblogic或w...

  weblogic服务器是一款*的商业应用程序服务器。但是对于小规模的开发者来说,开发源代码的、基于标准的应用程序服务器jboss是可以用来替换类似weblogic或websphere等商业应用程序服务器的。不幸的是,在weblogic中开发的应用程序不能在jboss中部署。jboss迁移服务为我们提供了把应用程序迁移到jboss上的支持。作为代替,通过把厂商特定的部署文件信息迁移到jboss上,是可能把应用程序迁移到jboss上的。为了演示如何把应用程序迁移到jboss的过程,我们将把一个在weblogic中开发的带有oracle数据库的ejb应用程序迁移到带有mysql数据库的jboss应用程序服务器上。

  预安装软件

  为了配置mysql数据库的jdbc连接,需要下载mysql数据库驱动程序类。

  1.下载mysql jdbc驱动程序.jar文件

  2.下载和安装mysql数据库服务器

  3.下载和安装jboss 4.0应用程序服务器

  开发一个java应用程序,我们将使用它和xslt把weblogic部署文件转换为jboss部署文件。该部署文件也可以使用xslt工具进行转换。

  概述

  在不进行修改的时候,weblogic中开发的应用程序是不能部署在jboss中的。jboss应用程序的部署文件与weblogic的部署文件不同。在本文中,我们将把一个在weblogic中开发的实体(entity)ejb应用程序示例迁移到jboss中,迁移的方法是把weblogic部署文件转换为jboss部署文件。

  示例应用程序包含一个catalog实体ejb。该ejb的bean类(catalogbean.java)、远程接口(catalog.java)、和home接口(cataloghome.java)都在本文下载链接的weblogic-jboss-resources.zip示例文件中。我们将使用mysql开放源代码数据库来配置jboss应用程序。把weblogic ejb应用程序部署到jboss中并不需要修改实体ejb类,只需要修改该ejb的部署文件。

  配置jboss和mysql

  mysql是一个开放源代码的数据库,它适合于开放源代码的项目和小型组织。为了配置jboss和mysql数据库需要进行下面一些修改。

  配置jboss类路径

  为了使用jboss 4.0和mysql,我们首先要把驱动程序类.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元素中指定数据源的jndi名称。

  · 指定连接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配置文件作一些修改。

  如果"建立表"选项被选中(通过把jbosscmp-jdbc.xml中的create-table元素设置为true)用于部署cmp实体ejb,并且mysql表的主键(或唯一键)的长度超过了500字节,应用程序的部署过程会在mysql数据库中生成一个sql语法错误。对于java.lang.string类型的cmp字段,我们可以通过在standardjbosscmp-jdbc.xml部署文件的mysql类型映射中把用于java类型java.lang.string的sql类型设置为较低的varchar值来减小主键(或唯一键)的长度。另一个可能出现的问题是jbosscmp-jdbc.xml部署文件中的column-name元素。如果某个mysql表的列名与mysql保留字相同,在jboss中部署j2ee应用程序的时候会产生一个错误。解决这个问题的方法是使列名与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)和home接口(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。这些文件之间的转换如下所示。

  ejb-jar.xml部署文件对于weblogic和jboss来说都是一样的,除了multiplicity元素之外。jboss服务器的ejb-jar.xml中的multiplicity元素需要大写,例如one或many,而不是one或many。

  示例实体ejb的ejb-jar.xml部署文件包含在示例代码中。示例ejb-jar.xml定义了一个叫做"catalog"的实体ejb。这个示例ejb拥有cmp字段catalogid、journal和publisher。其主键字段是catalogid。

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

  weblogic-ejb-jar.xml和jboss.xml部署文件都是ejb厂商的特定部署文件。为了把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">

  我们通过一个自定义的xslt样式表jboss.xslt(包含在示例代码中)把部署文件weblogic-ejb-jar.xml转换为jboss.xml。该样式表建立jboss.xml,它是与weblogic的weblogic-ejb-jar.xml部署文件相当的jboss文件。使用jboss.xslt样式表所生成的jboss.xml文件也包含在示例代码中。

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

  weblogic-cmp-rdbms-jar.xml部署文件指定了cmp实体ejb的数据库持续信息。weblogic-cmp-rdbms-jar.xml文件包含实体ejb的表名称、连接到数据库的数据源和与该实体ejb cmp字段对应的列。示例实体ejb的weblogic-cmp-rdbms-jar.xml部署文件包含在可以下载的.zip文件中。指定cmp视图ejb持续信息的jboss部署文件是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'
  'http://www.bea.com/servers/wls810/dtd/weblogic-rdbms20-persistence-810.dtd'>
  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">


  我们使用自定义的xslt样式表jbosscmp-jdbc.xslt(包含在示例代码中)把部署文件weblogic-cmp-rdbms-jar.xml转换为jbosscmp-jdbc.xml。该样式表建立jbosscmp-jdbc.xml,它是与weblogic的weblogic-cmp-rdbms-jar.xml部署文件功能相当的jboss文件。jbosscmp-jdbc.xml也包含下载在.zip文件中。

  weblogic部署文件的dtd与jboss部署文件的不同。使用自定义的xslt的时候,如果部署文件中还出现了一些额外的元素,可能还需要做进一步的修改,可以把weblogic部署文件转换为jboss部署文件。在下面的部分中,我们将在jboss服务器上部署这个ejb应用程序。

  在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安装的目录)中。当服务器启动的时候,该ejb应用程序就在jboss服务器上面部署好了。jboss应用程序服务器中的部署(deploy)目录与weblogic应用程序服务器中的应用程序(applications)目录对应。

  结论

  通过转换部署文件可以把weblogic中部署的实体ejb应用程序迁移到jboss应用程序服务器上。使用相似的步骤,通过把weblogic.xml 部署文件转换为jboss-web.xml ,也可以把weblogic j2ee web应用程序迁移到jboss上。