`

JBoss EJB应用程序迁移到WebLogic上

 
阅读更多

在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应用服务器上。

 

配置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。

 

 

在我看来jboss的配置还是比较简单,不是很复杂和难以理解的,尽管都是手工的(没有人用jmx-console配吧),虽然weblogic的配置很图形化,但是不知道配置的东东跑到什么地方去了,config.xml文件只能找到connection pool等得配置,但是系统级的找不着,很典型的是log级别的配置,不知放哪里了,对weblogic了解不深,还望各位高手指点。

第一步:jbosscmp-jdbc.xml->weblogic-cmp-rdbms-jar.xml
如果你没有weblogic-cmp-rdbms-jar.xml文件的样本,jbuilder生成一个。
这个文件主要包含ejb字段和数据库字段的对应关系,移植这个文件修改不是很多,主要是datasource

需要修改,其余就是tag的不同了。
首先是数据源的修改,weblogic和jboss都提供对某个具体的EntityBean的datasource定义,而jboss还提供所有缺省的datasource,所以如果jbosscmp-jdbc.xml用的缺省的datasource形如:

<defaults> <datasource>java:/OracleDS</datasource> <datasource-mapping>Oracle9i</datasource-mapping> <create-table>false</create-table> </defaults>


的得修改一下了,加到每个WEBLOGIC 每个定义entity下。另外java:/OracleDS得修改为OracleDS
示例:

jbosscmp-jdbc.xml <jbosscmp-jdbc> <defaults> <datasource>java:/OracleDS</datasource> <datasource-mapping>Oracle9i</datasource-mapping> <create-table>false</create-table> </defaults> <enterprise-beans> <entity> <ejb-name>Test</ejb-name> <table-name>Test</table-name> <cmp-field> <field-name>lineNbr</field-name> <column-name>LINE_NBR</column-name> </cmp-field> <cmp-field> <field-name>nxxNbr</field-name> <column-name>NXX_NBR</column-name> </cmp-field> </entity> <enterprise-beans> .... </bosscmp-jdbc>


移植后的WEBLOGIC weblogic-cmp-rdbms-jar.xml

<weblogic-rdbms-jar> <weblogic-rdbms-bean> <ejb-name>AccNbr</ejb-name> <data-source-name>OracleDS</data-source-name> <table-map> <table-name>Test</table-name> <field-map> <cmp-field>lineNbr</cmp-field> <dbms-column>LINE_NBR</dbms-column> </field-map> <field-map> <cmp-field>nxxNbr</cmp-field> <dbms-column>NXX_NBR</dbms-column> </field-map> </table-map> </weblogic-rdbms-bean> .... </weblogic-rdbms-jar>


注意weblogic datasource每个entity都需定义

第二步:jboss.xml->weblogic-ejb-jar.xml
jboss.xml中主要描述的是EJB的local和remote jndi名称,以及EJB资源和实际的对应关系
weblogic.xml中也是如此,weblogic中还必须定义Entity的persistence type。
除此,如过你没有用到别的依赖服务器的设置,基本上修改也就不多了。
sessionbean大体上不用修改啥,修改一下tag就ok了。对于entity还得加上entity-descriptor
示例:

jboss.xml <entity> <ejb-name>Test</ejb-name> <local-jndi-name>Test</local-jndi-name> </entity> weblogic-ejb-jar.xml <weblogic-enterprise-bean> <ejb-name>Test</ejb-name> <entity-descriptor> <persistence> <persistence-use> <type-identifier>WebLogic_CMP_RDBMS</type-identifier> <type-version>6.0</type-version> <type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage> </persistence-use> </persistence> </entity-descriptor> <local-jndi-name>Test</local-jndi-name> </weblogic-enterprise-bean>


对于ejb来将需要修改的地方只有两处了,当然如果你需要调整一下性能,那就是以后慢慢加的事了。
对于web应用来要可能增加weblogic.xml配置文件(如果你定义了ejb引用的话),也可以不要。


好了部署文件的修改完了。下面是weblogic的配置了,网上weblogic配置的文档也不少。我大概说说datasource配置,以及和jboss的区别
jboss: 在JBOSS_HOME\docs\examples\jca目录中有关于各个数据库的配置(如oracle-ds.xml),修改一下然后放到jboss的deploy目录下(jboss默认启动的是default那个目录,如果你要启动别的配置,需加参数-c),注意jndi-name名称就是你在部署文件中用到的OracleDS,如果你想加一些其他的关于datasource的配置(如对最大连接数的配置),可以将jca目录下generic-ds.xml配置考到你的文件中,那个是所有ds的默认配置。(3.2.1和3.0.X不同)

weblogic:先配置connection pools,配置一个连接,然后再新建一个datasource就ok了.
这里有点说明:weblogic的DataSourceJndi是OracleDS,而jboss是java:/OracleDS,注意两者datasource的区别.

配置好后可以将你文件打包部署到weblogic上了,如果在developmentmode模式,可以直接将文件copy到user_projects\mydomain\applications下,weblogic会自动部署,不过你上控制台看一下部署好的应用名可能不是你刚才的那个,weblogic也自动生成一个临时的名称
也可以直接再控制台上上传文件部署,或者用别的工具了.

说一下部署过程中会遇到的一些问题.
1.不符合ejb规范.报错ejbc....之类的错误,这种情况最好在部署时将weblogic的log级别调整到info lever,这样可以看到具体是什么地方不符合规范.如果你只通过web看部署的错误,你会弄的一头雾水的.:)

这里要说一点的是,我原来用xdoclet生成的ejb在jboss上部署没问题,在weblogic中部署提示少了一个ejbRemove方发,查了一下果然是少了,而jboss部署没有报错,这可能和实现有关系,weblogic是通过ejbc生成stub和proxy代码,而jboss主要使用的reflect,会提供给ejb一些默认的方法.(个人想法)
2.datasource没找着,在部署entity时,会根据datasource去找数据源的,如果你部署文件写错了,或者你配置的有问题,都会引起该问题.

3.log4j问题,JBOSS是使用的log4j做为日志,所以原来程序的log配置都和jboss放在一起了,现在移值到weblogic上,呵呵,都没了,只是我的info lever的日志可以出来.看来得手工配一配了:)

以上讲的是ejb移植平台最基本的配置,由于本人对weblogic不熟,没有涉及高级一些的配置.其中有些不对的

 

 

 

 

分享到:
评论
1 楼 szh_java 2013-03-07  
问楼主一个问题,我在ejb中使用了log4j,用weblogic部署ejb,请问ejb中依赖的log4j.jar放在什么位置?log4j.propterties放在什么位置?

相关推荐

    把WebLogic EJB程序迁移到JBoss上

    WebLogic服务器是一款顶级的商业应用程序服务器。但是对于小规模的开发者来...为了演示如何把应用程序迁移到JBoss的过程,我们将把一个在WebLogic中开发的带有Oracle数据库的EJB应用程序迁移到带有MySQL数据库的JBoss应

    JBoss转换到Weblogic

    然而,由于不同应用服务器之间的差异,将JBoss上的应用直接迁移到WebLogic上并非易事。主要挑战在于部署描述符的差异,以及可能需要对应用程序进行的适应性修改。 1. **部署描述符转换**: - **JBoss与WebLogic...

    weblogic到jboss转换的示例代码

    在IT行业中,应用服务器的迁移是一项常见的任务,特别是在企业级应用中,可能因为...在实际操作时,还应考虑其他因素,如应用程序的依赖、安全策略、集群配置以及日志和监控设置,确保迁移后系统的稳定性和可维护性。

    藏经阁-中国银联的开源应用之路.pdf

    * 背景:WebLogic迁移带来的问题,如WTC(WebLogic Tuxedo Connector)应用间调用方式不统一。 * 设计思想:借鉴Twitter Finagle、Alibaba Dubbo自研、Java &lt;-&gt; C、Java client & C client、Netty、Zookeeper、基于...

    J2EE应用服务器标准

    J2EE强调组件化设计,允许开发者将复杂的应用程序分解为可重用的组件,如Servlets、JavaBeans、EJB(Enterprise JavaBeans)、JSP(Java Server Pages)等。这些组件可以在多个应用中重复使用,降低了开发成本和维护...

    常用的java应用服务器介绍-使用云服务搭建javaweb项目WORD格式样本.docx

    - **Jetty**:开源的轻量级Web容器,强调速度和易用性,可方便地嵌入到其他Java应用程序中。Jetty的可扩展性和灵活性使其能够适应各种特殊需求。 - **其他**:包括Bejy Tiger、Geronimo、Jonas、Jrun、Orion和...

    大型WEB网站架构深入分析_云计算 paas技术.docx

    这些工具涵盖了从代码编写到应用上线的全过程,帮助企业快速构建、发布和管理Web应用程序。 1.3 服务形态 PaaS服务通常是通过互联网提供,用户可以根据需求随时增加或减少服务,这种灵活性使得企业可以快速响应...

    超级有影响力霸气的Java面试题大全文档

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

    J2EE指南中文版_程序设计

    J2EE是Oracle公司(原Sun Microsystems)推出的一个用于构建分布式、多层的企业级应用程序的平台。这个平台包含了多种服务、API和协议,用于简化开发、部署和管理复杂的企业级应用。 **1. J2EE架构概述** J2EE架构...

    J2EE完全参考手册-J2EE部署-pdf.rar

    J2EE是一种多层分布式应用程序平台,旨在简化开发、测试和部署企业级应用的过程。该手册中文版共49页,尽管篇幅不长,但涵盖了关键的J2EE部署概念和技术。 1. **J2EE架构**:J2EE架构由多个层次组成,包括客户端层...

    团队(j2ee)项目

    开发环境通常包括IDE(如Eclipse或IntelliJ IDEA),以及应用服务器(如Tomcat、WebLogic或JBOSS)来运行和测试应用。 【描述】"web开发"指出本项目专注于Web应用程序的开发,这可能包括前端和后端部分。前端通常由...

    绿色——TOMCAT 6.0

    它遵循Java EE规范,特别是Servlet和JSP标准,为开发者提供了轻量级的Web应用程序托管环境。"绿色版"通常指的是不需要安装,只需下载后解压即可运行的版本,这样的部署方式简单快捷,适合个人开发、学习或小型项目...

    揭开J2EE集群的面纱 中文版PDF

    - **单机应用可以透明地迁移到集群环境**:实际上,在迁移到集群环境之前,通常需要对应用进行一些调整,特别是涉及到会话管理和缓存等方面。 - **分布式结构比单一结构更灵活**:尽管分布式结构在某些方面确实更加...

    TOMcat-v1.6.zip

    8. **与其他应用服务器的集成**:Tomcat可以与EJB容器(如JBOSS、WebLogic)配合使用,提供完整的Java EE功能。 9. **故障排查**:通过查看错误日志、使用JMX监控、使用管理控制台(如`manager app`)来定位和解决...

    J2EE 热部署

    J2EE热部署是Java企业版(J2EE,现为Java EE)开发中的一个重要概念,它允许开发者在应用程序运行时无需停止服务器就能更新代码,极大地提高了开发效率和减少了系统中断时间。在传统的软件开发中,每当有代码修改,...

    j2ee集群J2EEClustering.pdf

    - **WebLogic, WebSphere, JBoss的方案**:结对服务器复制机制,即每两个服务器结成一对,其中一个作为主服务器,另一个作为备份服务器。 - **IBM的方案**:集中状态服务器,即所有服务器都连接到一个中央状态服务器...

    J2EE扫盲之-揭开J2EE集群的神秘面纱

    许多开发者认为,只要应用程序在单机环境下运行良好,那么就可以直接将其迁移到集群环境中而无需做任何修改。然而,实际情况并非如此简单。例如: - **8.2.1 HTTP会话**:在集群环境中,需要对HTTP会话的管理和持久...

    淘宝技术架构.pdf

    为了解决Weblogic中间件的性能问题和高昂成本,淘宝迁移到JBoss,同时抛弃了EJB,转而支持Spring框架。在数据库方面,为了支持分库,淘宝引入了数据框架DBRoute,并开始探索分布式缓存和CDN网络的构建。 在V2.1阶段...

Global site tag (gtag.js) - Google Analytics