分享
 
 
 

将JBoss EJB应用程序迁移到WebLogic上

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在J2EE项目的开发阶段,开发人员通常使用的是JBoss开源应用服务器。而在生产阶段,商业应用服务器BEA WebLogic Server因其增强的特性成为不错的选择。遗憾的是,在JBoss中开发的应用程序不能在WebLogic Server上直接部署,需要进行修改。

原因是WebLogic Server的部署描述符与JBoss的部署描述符不同。将应用程序迁移到WebLogic上的方法是把特定于供应商的部署描述符转换为WebLogic部署描述符。在本文中,我们将把一个在JBoss中开发的EJB应用程序迁移到WebLogic应用服务器上,其中使用的数据库是mysql。

初步安装

下载和安装BEA WebLogic Server(www.bea.com/framework.jsp?CNT=overview.htm &FP=/content/prodUCts/weblogic/server)。创建一个服务器域。下载MySQL JDBC驱动程序jar文件(www.mysql.com/products/connector/j/)和MySQL数据库服务器(www.mysql.com/products/mysql/)。开发一个Java应用程序或获取一个XSLT实用工具,使用XSLT把JBoss部署描述符转换为WebLogic部署描述符。

在部署描述符转换前,在JBoss中开发的应用程序不能在WebLogic中部署。在本文中,我们将通过转换部署描述符的方法,把一个在JBoss中开发的实体EJB应用程序示例迁移到WebLogic应用服务器上。

示例应用程序包含一个Catalog实体EJB。清单1中显示的是该EJB的bean类(CatalogBean.java)。远程接口(Catalog.java)和home接口(CatalogHome.java)显示在清单2和清单3中。把JBoss EJB应用程序部署到WebLogic中并不需要修改实体EJB类,只需要修改该EJB的部署描述符。

清单1:CatalogBean.java

import javax.ejb.*;

abstract public class CatalogBean implements EntityBean {

private EntityContext ctx;

public CatalogBean() {};

public void setEntityContext(EntityContext ctx) {

this.ctx = ctx;

}

public void unsetEntityContext() {

this.ctx = null;

}

abstract public String getCatalogId();

abstract public void setCatalogId(String catalogId);

abstract public String getJournal();

abstract public void setJournal(String journal);

abstract public String getPublisher();

abstract public void setPublisher(String publisher);

public void ejbActivate() {

}

public void ejbPassivate() {

}

public void ejbLoad() {

}

public void ejbStore() {

}

public void ejbRemove()

throws RemoveException

{

}

public String ejbCreate(String catalogId)

throws CreateException

{

setCatalogId(catalogId);

return null;

}

public void ejbPostCreate(String catalogId)

{

}

}

清单2:Catalog.java

import java.rmi.RemoteException;

import javax.ejb.*;

public interface Catalog extends EJBObject {

public String getCatalogId()

throws RemoteException;

public String getJournal()

throws RemoteException;

public String getPublisher()

throws RemoteException;

public void setJournal(String journal)

throws RemoteException;

public void setPublisher(String publisher)

throws RemoteException;

}

清单3:CatalogHome.java

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

import javax.ejb.FinderException;

import java.rmi.RemoteException;

public interface CatalogHome extends EJBHome {

public Catalog create(String catalogId)

throws CreateException, RemoteException;

public Catalog findByPrimaryKey(String catalogId)

throws FinderException, RemoteException;

}

配置WebLogic JDBC

本小节描述在WebLogic Server上配置JDBC连接和MySQL数据库的方法。首先配置一个JDBC连接池,接下来配置用于访问JDBC连接池的JNDI数据源,然后把MySQL数据库驱动程序jar文件(mysql-connector-java-3.0.16-ga-bin.jar)添加到示例服务器的CLASSPATH变量中。WebLogic Server的CLASSPATH变量是在<BEA>\user_projects\domains\mydomain\startWebLogic脚本文件中进行设置的。双击该脚本文件,启动WebLogic示例服务器。服务器在端口7001启动。通过URL http://localhost:7001/console来登录WebLogic管理控制台(Administration Console)。在显示出来的管理控制台登录页面上输入用户名和口令,就可以登录到管理控制台。

在管理控制台中选择Services>JDBC节点。要配置JDBC连接池,右击Connection Pools节点,选择Configure a new JDBCConnectionPool。在Choose database frame displayed中选择MySQL作为Database Type(数据库类型),选择MySQL's Driver (Type 4)作为Database Driver(数据库驱动程序)。单击Continue按钮。接着指定JDBC连接的连接属性。在Database Name栏指定示例MySQL数据库的名字test,在Host Name栏指定localhost,在Database User Name栏指定root。用root用户名登录MySQL数据库不需要口令,但WebLogic Server需要为用户名指定一个口令。单击Continue按钮继续。

在Test database connection框中的Driver Classname栏指定MySQL驱动程序com.mysql.jdbc.Driver,该驱动程序用于建立与MySQL数据库的连接。在URL栏指定jdbc:mysql://localhost/test作为连接数据库的URL。单击Test Driver Configuration按钮,测试JDBC到数据库的连接。如果已建立连接,会显示内容为“connection successful”的消息。在Create and deploy框中,选择将要部署连接池的服务器。单击Create and deploy按钮,部署JDBC连接池到服务器上。配置好的连接会部署到示例服务器上,同时该连接池的节点被添加到JDBC>Connection Pools节点中。要修改连接池配置,选择该连接池节点,并修改各个选项卡上的设置:General、Target and Deploy、Monitoring、Control、Testing、Connections。

接下来,要配置WebLogic Server上的数据源。右击Services>JDBC节点,选择Configure a new JDBCTxDataSource,指定一个数据源名称,在JNDI Name栏为数据源指定JNDI名称,例如MySQLDS。单击Continue按钮继续。在Connect to connection pool框中,从连接池列表中选择前一节所配置的连接池,单击Continue按钮继续。在Target the data source框中选择一个服务器作为数据源的目标服务器,然后单击Create按钮。配置好的数据源会部署到示例服务器上,该数据源的节点被添加到数据源节点中。要修改数据源,选择该数据源的节点,并修改各个选项卡上的设置,包括Configuration、Target和Deploy。该数据源可以通过在数据源配置中所指定的JNDI名称MySQLDS来获取。

转换JBoss EJB应用程序

前一节已经在WebLogic Server上配置了MySQL数据库。下面我们将把JBoss EJB应用程序转换成WebLogic EJB应用程序,这涉及到部署描述符的转换。JBoss实体EJB应用程序由以下部分组成;EJB部署描述符(ejb-jar.XML、jboss.xml和jbosscmp-jdbc.xml)、bean类(CatalogBean.java)、远程接口(Catalog.java)和home接口(CatalogHome.java)。

要在JBoss服务器上部署实体EJB,应该创建一个EJB JAR文件。该文件结构如下:

META-INF/

ejb-jar.xml

jboss.xml

jbosscmp-jdbc.xml

CatalogBean.class

Catalog.class

CatalogHome.class

部署描述符中指定了EJB的结构化信息和应用程序汇编信息。结构化信息中包含将这个EJB指定为会话EJB还是实体EJB。ejb-jar.xml部署描述符中的应用程序汇编信息是在assembly-descriptor元素中指定的。JBoss中实体EJB的部署描述符为ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml,而WebLogic中对应的部署描述符依次是ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml。下面我们将介绍这些文件间的转换。

ejb-jar.xml部署描述符对于WebLogic和JBoss是相同的,清单4显示了示例实体EJB的该部署描述符,其中定义了一个名为Catalog的实体EJB,它包含3个CMP字段:catalogId、journal和publisher,主键字段是catalogId。

清单4:ejb-jar.xml

<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC

"-//Sun Microsystems, Inc.//DTD Enterprise

JavaBeans 2.0//EN"

"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>

<enterprise-beans>

<entity>

<ejb-name>Catalog</ejb-name>

<home>com.ejb.CatalogHome</home>

<remote>com.ejb.Catalog</remote>

<ejb-class>com.ejb.CatalogBean</ejb-class>

<persistence-type>Container</persistence-type>

<prim-key-class>java.lang.String</prim-key-class>

<reentrant>False</reentrant>

<cmp-version>2.x</cmp-version>

<abstract-schema-name>CatalogBean

</abstract-schema-name>

<cmp-field>

<field-name>catalogId</field-name>

</cmp-field>

<cmp-field>

<field-name>journal</field-name>

</cmp-field>

<cmp-field>

<field-name>publisher</field-name>

</cmp-field>

<primkey-field>catalogId</primkey-field>

</entity>

</enterprise-beans>

</ejb-jar>

从weblogic-ejb-jar.xml到jboss.xml的转换

weblogic-ejb-jar.xml和jboss.xml是特定于供应商的EJB部署描述符。为了在WebLogic应用服务器上部署JBoss EJB应用程序,要将jboss.xml转换成weblogic-ejb-jar.xml。jboss.xml中的根元素是jboss,weblogic-ejb-jar.xml中的根元素是weblogic-ejb-jar。对于jboss.xml和weblogic-ejb-jar.xml,都可以在jndi-name或local-jndi-name元素中指定EJB的JNDI名称。清单5显示的是示例实体EJB的jboss.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">

清单5:jboss.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"

"http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">

<jboss>

<enterprise-beans>

<entity>

<ejb-name>Catalog&Lt;/ejb-name>

<jndi-name>com.ejb.CatalogHome&Lt;/jndi-name>

</entity>

</enterprise-beans>

</jboss>

使用定制的XSLT样式表,即weblogic-ejb-jar.xslt(参见清单6),将ejb-jar.xml部署描述符转换为weblogic-ejb-jar.xml部署描述符。该样式表创建了weblogic-ejb-jar.xml,它是JBoss上的jboss.xml文件在WebLogic上的等效。清单7中显示的是weblogic-ejb-jar.xslt样式表所生成的weblogic-ejb-jar.xml文件。

清单6:weblogic-ejb-jar.xslt

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet

version="1.0" xmlns:xsl=

"http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" doctype-public=

"-//BEA Systems, Inc.//DTD WebLogic 8.1.0

EJB//EN" doctype-system=

"http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd"/>

<xsl:template match="/jboss">

<weblogic-ejb-jar>

<xsl:apply-templates select="enterprise-beans/entity"/>

</weblogic-ejb-jar>

</xsl:template>

<xsl:template match="entity">

<weblogic-enterprise-bean>

<ejb-name><xsl:value-of select="ejb-name"/></ejb-name>

<entity-descriptor>

<persistence>

<persistence-use>

<type-identifier>WebLogic_CMP_RDBMS</type-identifier>

<type-version>7.0</type-version>

<type-storage>META-INF/

weblogic-cmp-rdbms-jar.xml</type-storage>

</persistence-use>

</persistence>

</entity-descriptor>

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

</weblogic-enterprise-bean>

</xsl:template>

</xsl:stylesheet>

清单7:weblogic-ejb-jar.xml

<?xml version="1.0"?>

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

<weblogic-ejb-jar>

<weblogic-enterprise-bean>

<ejb-name>Catalog</ejb-name>

<entity-descriptor>

<persistence>

<persistence-use>

<type-identifier>WebLogic_CMP_RDBMS</type-identifier>

<type-version>7.0</type-version>

<type-storage>META-INF/weblogic-cmp

-rdbms-jar.xml</type-storage>

</persistence-use>

</persistence>

</entity-descriptor>

<jndi-name>com.ejb.CatalogHome</jndi-name>

</weblogic-enterprise-bean>

</weblogic-ejb-jar>

从jbosscmp-jdbc.xml到weblogic-cmp-rdbms-jar.xml的转换

weblogic-cmp-rdbms-jar.xml中指定了CMP实体EJB的数据库持久性信息。该文件包含实体EJB的表格名称、连接数据库的数据源和与该EJB CMP字段相对应的列。用于指定CMP实体EJB持久性信息的JBoss部署描述符是jbosscmp-jdbc.xml,清单8显示了示例EJB的jbosscmp-jdbc.xml。

清单8:jbosscmp-jdbc.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE jbosscmp-jdbc PUBLIC

"-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN"

"http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd">

<jbosscmp-jdbc>

<defaults>

<datasource>java:/MySqlDS</datasource>

<datasource-mapping>mySQL</datasource-mapping>

</defaults>

<enterprise-beans>

<entity>

<ejb-name>Catalog</ejb-name>

<create-table>true</create-table>

<table-name>Catalog</table-name>

<cmp-field>

<field-name>catalogId</field-name>

<column-name>catalogId</column-name>

</cmp-field>

<cmp-field>

<field-name>journal</field-name>

<column-name>journal</column-name>

</cmp-field>

<cmp-field>

<field-name>publisher</field-name>

<column-name>publisher</column-name>

</cmp-field>

</entity>

</enterprise-beans>

</jbosscmp-jdbc>

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文件中的field-map元素指定了实体EJB CMP字段与数据库中表的列之间的映射关系,它等效于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样式表(weblogic-cmp-rdbms-jar.xslt)(参见清单9)进行jbosscmp-jdbc.xml到weblogic-cmp-rdbms-jar.xml的转换。该样式表创建了weblogic-cmp-rdbms-jar.xml,它是JBoss上的jbosscmp-jdbc.xml文件在WebLogic上的等效。清单10中显示的是weblogic-cmp-rdbms-jar.xml。

清单9:weblogic-cmp-rdbms-jar.xslt

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet

version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" doctype-public=

"-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB

RDBMS Persistence//EN"

doctype-system="http://www.bea.com/servers

/wls810/dtd/weblogic-rdbms20-persistence-810.dtd"/>

<xsl:template match="/jbosscmp-jdbc">

<weblogic-rdbms-jar>

<xsl:apply-templates select="enterprise-beans/entity"/>

<create-default-dbms-tables>

AlterOrCreate</create-default-dbms-tables>

</weblogic-rdbms-jar>

</xsl:template>

<xsl:template match="entity">

<weblogic-rdbms-bean>

<ejb-name><xsl:value-of select="ejb-name"/></ejb-name>

<data-source-name><xsl:value-of

select="../../defaults/datasource"/></data-source-name>

<table-map>

<table-name><xsl:value-of select="table-name"/></table-name>

<xsl:apply-templates select="cmp-field"/>

</table-map>

</weblogic-rdbms-bean>

</xsl:template>

<xsl:template match="cmp-field">

<field-map>

<cmp-field><xsl:value-of select="field-name"/>

</cmp-field>

<dbms-column><xsl:value-of select="column-name"/>

</dbms-column>

</field-map>

</xsl:template>

</xsl:stylesheet>

清单10:weblogic-cmp-rdbms-jar.xml

<?xml version="1.0"?>

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

<weblogic-rdbms-jar>

<weblogic-rdbms-bean>

<ejb-name>Catalog</ejb-name>

<data-source-name>java:/MySqlDS</data-source-name>

<table-map>

<table-name>Catalog</table-name>

<field-map>

<cmp-field>catalogId</cmp-field>

<dbms-column>catalogId</dbms-column>

</field-map>

<field-map>

<cmp-field>journal</cmp-field>

<dbms-column>journal</dbms-column>

</field-map>

<field-map>

<cmp-field>publisher</cmp-field>

<dbms-column>publisher</dbms-column>

</field-map>

</table-map>

</weblogic-rdbms-bean>

<create-default-dbms-tables>AlterOrCreate

</create-default-dbms-tables>

</weblogic-rdbms-jar>

WebLogic部署描述符中的DTD与JBoss部署描述符中的DTD是不同的。借助于XSLT(如果要在部署描述符中表示附加的元素,可以修改定制的XSLT),可以实现从JBoss部署描述符到WebLogic部署描述符的转换。接下来会将EJB应用程序部署到WebLogic Server上。

在WebLogic上部署EJB应用程序

完成从JBoss EJB部署描述符到WebLogic部署描述符的转换后,在WebLogic Server上创建一个EJB JAR文件,该文件的结构如下:

META-INF/

ejb-jar.xml

weblogic-ejb-jar.xml

weblogic-cmp-rdbms-jar.xml

CatalogBean.class

Catalog.class

CatalogHome.class

编译示例EJB类和接口。

java Catalog.java CatalogBean.java CatalogHome.java

将WebLogic部署描述符(ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml)复制到META-INF目录下。使用JAR工具(http://java.sun.com/j2se/1.4.2/docs/ tooldocs/windows/jar.Html)从WebLogic部署描述符、类和接口创建一个JAR文件。

jar cf CatalogEJB.jar CatalogBean.class

Catalog.class CatalogHome.class META-INF/*.xml

要部署WebLogic实体EJB应用程序,把JAR文件CatalogEJB.jar复制到<BEA>\user_projects\domains\mydomain\applications下,其中<BEA>是安装WebLogic Server的目录。当服务器启动后,EJB应用程序就部署到WebLogic Server上了。WebLogic Server上的应用程序目录对应于Jboss应用服务器上的部署目录。

结束语

通过转换部署描述符,JBoss上的实体EJB应用程序可以迁移到WebLogic应用服务器上。使用类似的过程,通过将jboss-web.xml部署描述符转换成weblogic.xml,JBoss J2EE Web应用程序也可以迁移到WebLogic上。

原文出处

Migrating a JBoss EJB Application to WebLogic

http://wldj.sys-con.com/read/117492.htm

(出处:http://www.knowsky.com)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有