网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  ejb应用从weblogic到jboss的迁移方法     
  文章作者:未知  文章来源:水木森林  
  查看:58次  录入:管理员--2007-11-17  
 

摘要:

    在不作任何改动的情况下,为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开发人员。

 
 
上一篇: 我的struts分页算法的实现    下一篇: 理解javahelp结构的好处
  相关文档
破解java struts web application开发工具 scioworks camino 11-17
源码演示:java写吞食蛇游戏 11-16
java程序开发小经验 - 使用objectstream会出现的问题 11-17
精通hibernate之映射继承关系五 11-17
利用java做一个简单的计算器 11-17
j2ee基础:enterprise javabeans的应用 11-16
java琐碎笔记 11-17
scjp 310-025 braindumps 11-17
用jni实现一个高精度的java计时器 11-17
在java中使用文档对象模型dom经验小结[转载] 11-17
在实际开发中教您netbeans的使用图解 11-17
基于角色的内容管理权限管理模型(图) 11-17
基础:学习struts提供的和form相关标签 01-29
安?bamfphp 11-17
在linux环境中用php连接oracle数据库 11-17
使用java技术实现新一代oss/bss 11-17
创建 java .exe 文件 11-17
分享:用struts上传多个文件的方法 11-17
开发技术:kettle java api 开发实战记录 11-17
java学习路径-工具篇 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息