本文的目的是帮助您将Java™2平台企业版(J2EE)应用程序从BEA WebLogic Server迁移到IBM WebSphere Application Server平台。
其他developerWorks文章(请参阅参考资料 )讨论了WebLogic迁移的计划,包括迁移开发环境,生产运行时,应用程序代码等。 本文通过专门关注迁移J2EE应用程序中存在的两种类型的配置来补充这些资源和其他资源:
服务器配置是指包含在应用程序文件外部但在源环境的域配置中的设置。 为了迁移服务器配置,将WebLogic特定的资源(例如JMS连接工厂,JMS队列,JMS主题,JDBC数据源,JavaMail会话等)映射到它们的WebSphere Application Server等效项。
应用程序配置是指企业归档(EAR)文件的应用程序目录结构中包含的那些设置。 为了迁移应用程序配置,将WebLogic特定的部署描述符映射到它们的WebSphere Application Server等效项。
本文讨论的问题直接适用于将J2EE 1.3(及更高版本)的应用程序从WebLogic Server 7.0和8.1迁移到WebSphere Application ServerV6.x。 此处的大多数信息也适用于WebLogic Server早期版本的迁移应用程序。
迁移服务器配置
迁移服务器配置实质上意味着将WebLogic Server的应用程序文件外部(但在域配置内部)中包含的设置移动到WebSphere Application Server。 这些设置可以包括JMS连接工厂和目标,JDBC数据源,J2EE安全设置,邮件会话等等。
要迁移配置,您必须知道需要迁移哪些设置。 但是,您很有可能没有关于这些设置的任何文档,也没有任何脚本(可能已用于创建服务器配置)供参考。 如果是这种情况,则需要登录每个域中的WebLogic管理控制台以查找设置,以便可以确定需要在WebSphere Application Server环境中创建的设置。
但是,如果您无法(或不允许)访问WebLogic管理控制台怎么办?
无论哪种方式,收集WebLogic服务器配置信息的最有效方法是检查WebLogic域配置文件config.xml
和WebLogic启动脚本。 WebLogic管理员通常会为您提供这些文件的副本,因为对其进行检查不会影响任何正在运行的系统。
WebLogic管理控制台是WebLogic config.xml文件的存储位置,它存储所有资源定义。 无法正确映射这些资源可能会导致应用程序失败。
管理员通常会创建一个自定义的启动脚本 ,然后向其中添加系统属性,JVM参数和类。 无法迁移这些设置可能会对新环境中应用程序的性能和可伸缩性产生不利影响。 无论您查看config.xml文件还是管理控制台,都最好检查启动脚本。
收集了这些信息之后,请确保要求开发人员和管理员查看您收集的内容。 这是为了:
- 验证您收集的信息包含最新和准确的设置。
- 标识任何可以删除的无效代码。
另外,请确保您正在查看正确的WebLogic服务器配置; 在开发期间,可以将J2EE应用程序安装在许多不同的运行时环境(开发,测试,QA等)中,每个环境可以具有略有不同的配置设置。 因此,请确保您使用的WebLogic服务器配置是正确的配置。 同样,在每个开发阶段安装应用程序时,请确保为每个相应的环境映射正确的服务器配置。
有了需要迁移的特定运行时配置设置,下一步就是提取它们并将信息插入WebSphere Application Server管理控制台。 尽管这是一个手动过程,但是一旦知道需要创建哪些设置,创建这些设置并不难。 使用WebSphere Application Server管理控制台来设置这些属性使您不必修改XML文件或编写脚本。 如果愿意,还可以提供一些指导性活动来帮助您执行常见任务,例如创建数据源,启用J2EE应用程序安全性等等。 完成后,您可以编写脚本来自动创建服务器配置,特别是针对生产环境。
图1说明了从WebLogic到WebSphere Application Server的服务器迁移。 显示的设置不是唯一的服务器配置设置,但涵盖了您在迁移过程中看到的大部分内容。 您发现的其他设置可能与安全性和邮件会话有关,但是,一般而言,如果您可以处理图中所示的资源,则可以顺利进行服务器迁移。
图1.服务器配置迁移
迁移应用程序配置
迁移应用程序配置实质上意味着将特定于WebLogic的部署描述符中包含的设置移动到WebSphere Application Server。 这些设置包括EJB组件到全局JNDI命名空间的映射,以及与性能相关的各种设置,例如池大小,事务隔离级别,EBJ查询语言的扩展等等。 部署描述符描述了J2EE应用程序所需的执行环境,并且具有两个一般的变体:
-
行业标准部署描述符 (图2)是可移植的,通常不需要进行任何更改,但是WebLogic和WebSphere Application Server之间存在一些值得注意的差异。 例如,IBM的标准部署描述符使用ID将标准描述符中的信息与特定于供应商的描述符中的信息相关联,而WebLogic则使用ejb-names进行相关性。 因此,当您迁移WebLogic部署描述符并创建特定于IBM的描述符时,将需要向它们添加适当的ID。 让您的组装工具(例如IBMRational®Application Developer)为您创建这些ID。 如果尝试自己创建这些ID并弄错了,将很难解决错误。
图2.行业标准部署描述符
-
必须迁移特定于供应商的部署描述符 (图3)。 图3显示了特定于WebLogic的部署描述符和相应的特定于WebSphere的部署描述符。
图3.特定于供应商的部署描述符
IBM提供了许多工具来帮助您将WebLogic部署描述符迁移到WebSphere Application Server,包括:
- Xdoclet标签
- WebSphere Rapid Deployment标签
- 应用程序服务器工具包(部署描述符编辑器)
- 用于Rational Application Developer V6的IBM J2EE竞争性迁移器插件。
请参阅将应用程序从WebLogic,JBoss和Tomcat迁移到WebSphere V6,以了解这些工具的作用,如何以及何时使用它们,在哪里获得帮助等等。 重要的是要了解这些工具,并在适当的时候使用它们。 尽管这些工具将映射特定于供应商的部署描述符中的某些扩展,但它们不会映射所有扩展,因此对于您而言,检查部署描述符并知道如何映射在其中找到的扩展对于您而言仍然很重要。 基于这种理解,使用像Application Server Toolkit这样的组装工具可能会非常有效。
映射config.xml元素
本部分描述如何将这些服务器配置元素从WebLogic映射到WebSphere Application Server:
有关每个元素的更多详细信息,请参阅《 WebLogic Server配置参考 》。
-
JMSConnectionFactory
JMSConnectionFactory元素创建一个连接工厂对象,并将其绑定到JNDI名称空间。 在config.xml文件中为此应用程序配置了三个连接工厂。 每个都启用了XA:
<JMSConnectionFactory JNDIName="jms/Operations" Name="Operations" Targets="myserver" XAConnectionFactoryEnabled="true" /> <JMSConnectionFactory JNDIName="jms/Mailing" Name="Mailing" Targets="myserver" XAConnectionFactoryEnabled="true" /> <JMSConnectionFactory JNDIName="jms/Administration" Name="Administration" Targets="myserver" XAConnectionFactoryEnabled="true" />
要将此配置映射到WebSphere Application Server,通常需要在WebSphere默认消息传递提供程序中创建上面显示的JMS连接工厂 。 其他一些预防措施包括:
在WebSphere Application Server中配置这些JMS连接工厂时,请使用正确的JNDIName。 如果JNDI名称不正确,则应用程序将无法找到连接工厂。
通过为指定事务属性“ NotSupported”的非事务性MDB禁用XA来验证消息驱动bean(MDB)是否是事务性的,因为它可能会提高性能。 非事务性MDB不能参与XA事务,并且不需要启用XA的连接工厂。 另一方面,如果MDB将事务属性指定为“必需”,则应为XA的connection-factory-jndi-name启用。
在WebSphere Application Server中创建连接工厂时,默认情况下会启用XA。
-
JMSFileStore
JMSFileStore元素定义了一个基于磁盘的JMS文件存储,该文件存储在文件系统目录中存储持久消息(用于队列)和持久订户(用于主题)。 此代码片段显示了单个JMS文件存储的定义:
<JMSFileStore Directory="/log//weblogic/wl-myserver/rmfilestore" Name="FileStoreMailing" SynchronousWritePolicy="Cache-Flush" />
要将此配置映射到WebSphere Application Server,首先需要知道WebSphere Application Server V6.0缺省消息传递不支持JMS文件存储。 文件存储是6.1版中的增强功能,但是如果使用的是6.0版,则需要为消息传递引擎定义JDBC数据源。
-
JMS服务器
JMSServer元素定义一个JMS服务器,该服务器管理到其JMS目标的连接和消息(指的是JMSQueue或JMSTopic元素)。 config.xml文件中的此代码片段显示了三个JMS服务器,每个服务器包含两个JMS目标,这里使用JMS队列:
<JMSServer Name="JMSServerOperations" Targets="myserver"> <JMSQueue CreationTime="1149493675734" JNDIName="jms/Queue/EntryOperations" Name="EntryOperations"/> <JMSQueue CreationTime="1161679692974" JNDIName="jms/Queue/ExitOperations" Name="ExitOperations"/> </JMSServer> <JMSServer Name="JMSServerMailing" Store="FileStoreMailing" Targets="myserver"> <JMSQueue CreationTime="1161682828610"