WebSphere 迁移: 从 Gluecode SE 或 Apache Geronimo 迁移到 WebSphere Application Server Community Edition
2010-04-22 00:00:00 来源:WEB开发网IBM WebSphere Application Server Community Edition 是 Gluecode Standard Edition (SE) 开放源代码应用服务器产品最新的发展。如果您正在使用 Gluecode SE 来承载 Web 应用程序,您将继续在 WebSphere Application Server Community 中找到熟悉的、用户友好的且基于 Web 的管理控制台,以及许多 Gluecode SE 功能(如用于现有的 RDBM 的 JDBC 连接器)。此外,WebSphere Application Server Community Edition 基于开放源代码 Apache Geronimo Milestone 5 (M5) 内部版本,它将 Gluecode SE 扩展为功能齐全的 J2EE 1.4 认证服务器。因此,您可以尽情地享受各种附加的服务器功能,包括对业务层 EJB 组件的内置支持。
如果您正在使用 Apache Geronimo M5 来承载企业应用程序,您将发现迁移到 WebSphere Application Server Community Edition 非常简单——因为它的引擎是 Apache Geronimo M5 服务器——而且对于 J2EE 开发工作而言,WebSphere Application Server Community Edition 是一个精简的、健壮的且获得良好支持的备选方案。
本文演示了如何将示例应用程序从 Gluecode SE 1.1 或 Apache Geronimo M5 迁移到 WebSphere Application Server Community Edition。首先,我们将示例应用程序部署到 Gluecode SE,然后部署到 Apache Geronimo M5,最后将其迁移和部署到 WebSphere Application Server Community Edition(以下称为 Community Edition)。
本文由以下几个部分组成:
实现分析:Gluecode、Geronimo 和 Community Edition
关于示例应用程序
部署到 Gluecode 环境
部署到 Geronimo 环境
迁移和部署到 Community Edition
实现分析:Gluecode、Geronimo 和 Community Edition
从本质上讲,Community Edition 是 Gluecode SE 的最佳功能(如用户友好的 Web 控制台和对 Microsoft 的 SQL Server 的 JDBC 支持)以及由 Apache Geronimo M5 提供的健壮 J2EE 认证引擎的组合。因此,从 Gluecode SE 或 Apache Geronimo M5 迁移应用程序始终非常简单,不需要进行任何额外的工作。
作为开放源代码应用服务器产品,Community Edition 代替了 Gluecode SE 1.1,后者实际上基于 Apache Geronimo M4 内部版本,这是一个与 Geronimo M5 同类的更早的产品。Community Edition 和 Gluecode SEO(以及 Geronimo M5 的缺省二进制分布)之间的一个主要不同之处在于 Web 层容器。Gluecode SE 1.1 的标准 Web 层容器是 Jetty 5.1.4(以及用于 Geronimo M5 的 Jetty 5.1.5),而 Community Edition 的 Web 层容器是 Apache Tomcat 5.5。这主要是因为在 M4 之前 Jetty 是 Geronimo 唯一可选的 Web 容器。但是,从迁移的观点来看,这种不同并非十分重要,因为集成到 Community Edition 中的 Tomcat 版本与基于 Jetty 的早期版本继续保持充分的向后兼容性。在大多数情况下,J2EE Web 层资产包括:
Servlet
JSP
自定义标记库
用于 J2EE 兼容的编程框架的代码
Tomcat 和 Jetty 都充分支持这些 J2EE Web 层组件(在 Servlet 2.4 和 JSP 2.0 标准级别)。表 1 比较了这三个服务器之间的一些主要特性。
特性 | Gluecode SE 1.1 | Geronimo M5 | Community Edition |
J2EE 1.4 认证 | 不适用 | 已认证 | 已认证 |
HTTP 服务器 | Jetty 5.1 | 可以选择 Jetty 5.1、Tomcat 5.5 HTTP 连接器或外部 Web 服务器。 | 可以选择 Tomcat 5.5 HTTP 连接器或外部 Web 服务器。 |
Web 层容器 | Jetty 5.1 | Tomcat 5.5 或 Jetty 5.1 | Tomcat 5.5 |
业务层组件容器 | 不适用 | OpenEJB 2.0 服务器 | OpenEJB 2.0 服务器 |
基于 Web 的管理和配置用户界面 | 有控制台可用 | 有控制台可用,其基于 Gluecode 捐赠的代码。 | 有控制台可用,其组合了 Gluecode 控制台和 Apache Geronimo 控制台的最佳功能。 |
对流行的第三方 RDBMS 的内置 JDBC 支持 | 支持 Oracle®、Micrsoft 的 SQL Server 和 Apache Derby。 | 仅支持 Apache Derby。可以添加第三方驱动程序。 | 支持 Oracle、Micrsoft 的 SQL Server 和 IBM Cloudscape™。 |
支持 JDBC 的内置 RDBMS | Apache Derby 10.0.2(内置) | Apache Derby 10.1.1.0(内置) | IBM Cloudscape(内置);Cloudscape 是 Apache Derby 10.1 的一个受支持的商用改编版。 |
支持 JMS 的内置消息代理 | ActiveMQ 3.1(内置) | ActiveMQ 3.2(内置) | ActiveMQ 3.2(内置) |
用户管理 | 容器管理的基于 JACC 的用户管理,通过控制台进行管理;支持 LDAP 领域。 | 可配置的灵活登录模块,包括对 JACC 和 JAAS 的支持。支持 LDAP 和 Kerboros 领域。 | 支持通过 Web 控制台进行的 Gluecode SE 的用户管理,以及功能齐全的 Geronimo 容器管理安全性。 |
Web 服务支持 | 没有内置的支持,可以添加 AXIS。 | AXIS 1.3(内置) | AXIS 1.3(内置) |
核心基本代码 | Apache Geronimo Milestone 4 的一部分的轻量级改编版 | 完整的 Apache Geronimo Milestone 5 | Apache Geronimo Milestone 5 的压缩改编版(例如,没有 Jetty 支持,没有 Spring 框架,没有 Servicemix,没有目录服务集成)。 |
Java VM 支持 | 支持 SUN 的 Java VM 1.4.2 | 支持 SUN 的 Java VM 1.4.2 | 缺省的配置使用 IBM 的 Java 1.4.2 VM,还支持 SUN 的 Java™ 1.4.2 VM。在 IBM Java VM 下运行时使用 IBM 的 CORBA ORB。 |
从表 1 中可以看出,这些服务器之间的相似之处多于不同之处。您很快将看到,将现有的应用程序从这些服务器迁移到 Community Edition 是多么的容易。
关于示例应用程序
示例应用程序(包括在本文所附带的下载 ZIP 文件中)是一个基于 JMS 的应用程序;支持 JMS 的 ActiveMQ 消息代理集成到所有三个服务器中(不过,Gluecode SE 包含更旧的版本)。选择 JMS 示例应用程序来展示如何在这些服务器上配置 JMS 连接器和消息目的地。
图 1 显示了该应用程序中的组件和数据流。
图 1. 基于 JMS 的示例应用程序
如图 1 所示,该应用程序包括一个消息生产者,它是该服务器中承载的 SenderServlet(Gluecode SE、Geronimo M5 或 Community Edition)。此 Servlet 向用户展示了带有填充文本的数据输入表单,如图 2 所示。
图 2. 消息发送方表单
用户输入文本并选择 Send 按钮。然后,创建一个 JMS 消息,并将其发送到名为 SendReceiveQueue 的消息队列。SendReceiveQueue 由同一服务器内承载的 ActiveMQ 消息代理管理。
在图 1 中,您可以看到另一个组件,它是称为 JMSReceiver 的消息使用者。该消息使用者不是 J2EE 应用程序,而是一个命令行应用程序,是一个 ActiveMQ 客户机。启动该使用者应用程序 JMSReceiver,以等待消息达到消息队列。当用户在表单中输入消息后,该命令行客户机会立即接收到此消息,并且该消息将显示在控制台上。
表 2 列出和描述了组成该应用程序的类和文件。
文件 | 描述 |
SenderServlet.java | 服务器中承载的 J2EE Web 层组件。这是消息生产者,它将表单呈现给用户,以供输入消息。它还使用容器 JNDI 支持来查找消息目的地:SendReceive 消息队列。 |
JMSReceiver.java | 一个非 J2EE 命令行 JMS 客户机程序。它监视 SendReceive 消息队列中多达 5 条消息,并且在接收到每条消息之后将其输出。 |
所需环境
要遵循这些指导使用该示例应用程序,您必须下载以下软件并将其安装在您的环境中:
Apache Ant 1.6.5
Gluecode SE 1.1(如果您正在从 Gluecode SE 进行迁移)
Apache Geronimo Milestone 5(如果您正在从 Apache Geronimo 进行迁移)
IBM WebSphere Applicaion Server Community Edition 1.0
部署到 Gluecode 环境
在构建该示例之前,请确保转到 build.xml 文件,并将 geronimo.home 目录编辑为指向您的 Gluecode SE 安装。
1. 构建发送方的可部署 WAR 文件
您可以通过转到该代码目录并输入以下命令来构建示例 Web 应用程序:
ant war
这将在分布目录中创建一个名为 sender.war 的 WAR 文件。这就是您可以将其部署到 Gluecode SE 的 Web 应用程序存档文件。
2. 编译和复制非 J2EE 客户机的 ActiveMQ 库
该客户机源代码在 clientsrc 子目录中。在您可以成功运行该客户机之前,必须对其进行编译,并将 ActiveMQ 库复制到 mqcient/lib 子目录。这可以通过如下命令来完成:
ant client
3. 配置 JMS 消息队列
在 Gluecode SE 中,ActiveMQ 消息代理是缺省启动的,但是您需要为该应用程序创建名为 SendReceive 的消息队列。您可以通过 Gluecode SE 控制台来完成这项工作。登录到该控制台并选择 JMS 链接。在右边的窗格中,选择 Add Queue/Topic,并使用 SendReceiveQueue 完成 Message Destination 和 Destination Physical Name 字段,如图 3 所示。
图 3. 添加 SendReceive 消息队列
单击 Submit 以添加该队列。请注意,您不能在控制台显示器上看到它,因为目的地名和物理名是相同的。但是,您可以通过使用 Gluecode SE bin 目录中的如下命令来验证该配置是否已经创建并正在运行:
java -jar deploy.jar --user system --password manager list-modules
您应该看到列出了 runtimedestination/SendReciveQueue。这是 Gluecode SE 为您创建的配置。该配置将 SenderServlet 使用的队列的“Message destination name”映射到 JMSReceiver 和 ActiveMQ 消息代理使用的“Destination Physical Name”。如果您查看 sender.war 的 web.xml 部署描述符(位于 dd 子目录中),您将看到指向该队列的引用链接,如清单 1 所示。
清单 1. 指向 web.xml 中的 SendReceive 队列的引用链接
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<description>
developerWorks JMS Example - for WebSphere Application Server Community Edition
</description>
...
<resource-ref>
<res-ref-name>DefaultActiveMQConnectionFactory</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<message-destination-ref>
<message-destination-ref-name>dwSendReceiveQueue</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Produces</message-destination-usage>
<message-destination-link>SendReceiveQueue</message-destination-link>
</message-destination-ref>
</web-app>
在 SenderServlet 内部,相关代码查找该队列,并向其发送消息。SenderServlet.java 中负责 JNDI 查找的代码在清单 2 中用粗体显示。
清单 2. 为 JMS 队列执行 JNDI 查找的 SenderServlet
public class SenderServlet extends HttpServlet {
private Context jndiContext = null;
private QueueConnectionFactory factory = null;
private Queue receiveQueue = null;
private static final String QueueName =
"java:comp/env/dwSendReceiveQueue";
private static final String FactoryName =
"java:comp/env/DefaultActiveMQConnectionFactory";
public void init() throws ServletException {
super.init();
try {
jndiContext = new InitialContext();
factory = (QueueConnectionFactory)
jndiContext.lookup(FactoryName);
receiveQueue = (Queue)
jndiContext.lookup(QueueName);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
...
该非 J2EE 客户机在不查找 JNDI 的情况下直接调用 ActiveMQ,并请求名为 SendReceive 的队列。
4. 运行客户机
要运行该客户机,可以将目录更改为代码分布的代码目录下的 mqclient 子目录,然后输入如下命令以启动 JMSReceiver:
ant
JMSReceiver 将在缺省端口 61616 上连接到 ActiveMQ 消息代理,并等待要显示在 SendReceive 队列中的消息。
5. 部署发送方 Web 应用程序
使用 Gluecode SE 控制台部署发送方应用程序。单击左侧的 Applications 链接,将 sender.war 的路径输入 Archive 文本框,然后单击 Install。这将安装和启动发送方应用程序。图 4 显示了 sender.war 的成功部署。
图 4. sender.war 的成功部署
6. 试验 JMS Web 应用程序
在成功部署之后,您可以通过如下 URL 地址访问 SenderServlet:http://localhost:8080/sender/sendform.cgi。尝试向表单中输入一些消息,然后单击 Send 按钮。查看正在运行的客户机应用程序,将注意到它正在输出您从该 Servlet 发送的每条消息。图 5 显示了正在运行和接收消息的 JMSReceiver。
图 5. 正在运行和接收消息的 JMSReceiver
部署到 Geronimo 环境
现在我们将看一看示例应用程序如何在 Geronimo M5 中运行。关闭 Gluecode SE 服务器(如果它正在运行)。这也将终止任何可能正在运行的 JMSReceiver 客户机。
即使执行上述 Gluecode 部署步骤,也需要重新构建我们的示例,因为 Gluecode SE 使用的 ActiveMQ 版本与 Geronimo M5 不同。此外,由于版本不匹配,因此在 JMSReceiver 运行时我们将看到一些异常情况。在您重新构建示例之前,请确保您转到 Ant build.xml 文件,并将 geronimo.home 目录编辑为指向 Geronimo M5 安装。
1. 构建发送方的可部署 WAR 文件
通常,您可以通过如下方式构建示例 Web 应用程序:首先转到代码目录,然后输入下列命令:
ant war
这将在分布目录中创建一个新的 sender.war 文件,该文件可用于 Geronimo M5。
2. 编译和复制非 J2EE 客户机的 ActiveMQ 库
要将更新的 Geronimo M5 库复制到 mqclient/lib 子目录,并重新编译该客户机,请使用下列命令:
ant client
3. 配置 JMS 消息队列
使用 Geronimo M5,缺省系统 JMS 部署计划已经为我们创建了 SendReceiveQueue。您可以在 Geronimo M5 安装目录的 doc/plan 子目录下找到此部署计划。在此目录中,Geronimo M5 保留用于该二进制程序集的所有系统部署计划的记录。与您有关的计划名为 system-jms-plan.xml。清单 3 显示了此计划,并突出显示了 SendReceiveQueue 的创建。
清单 3. 显示 SendReceiveQueue 的配置的 system-jms-plan.xml 部署计划
<?xml version="1.0" encoding="UTF-8"?>
...
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.0"
configId="org/apache/geronimo/SystemJMS"
parentId="org/apache/geronimo/ActiveMQServer">
<resourceadapter>
<resourceadapter-instance>
<resourceadapter-name>ActiveMQ RA</resourceadapter-name>
<config-property-setting name="ServerUrl">
tcp://0.0.0.0:61616
</config-property-setting>
<config-property-setting name="UserName">
geronimo</config-property-setting>
<config-property-setting name="Password">
geronimo</config-property-setting>
<workmanager>
<gbean-link>DefaultWorkManager</gbean-link>
</workmanager>
</resourceadapter-instance>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>
javax.jms.ConnectionFactory
</connectionfactory-interface>
<connectiondefinition-instance>
<name>DefaultActiveMQConnectionFactory</name>
<implemented-interface>
javax.jms.QueueConnectionFactory</implemented-interface>
<implemented-interface>
javax.jms.TopicConnectionFactory</implemented-interface>
<connectionmanager>
<xa-transaction>
<transaction-caching/>
</xa-transaction>
<single-pool>
<max-size>10</max-size>
<blocking-timeout-milliseconds>
5000</blocking-timeout-milliseconds>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
<adminobject>
<adminobject-interface>javax.jms.Queue</adminobject-interface>
<adminobject-class>
org.codehaus.activemq.message.ActiveMQQueue</adminobject-class>
<adminobject-instance>
<message-destination-name>
MDBTransferBeanOutQueue</message-destination-name>
<config-property-setting name="PhysicalName">
MDBTransferBeanOutQueue</config-property-setting>
</adminobject-instance>
</adminobject>
<adminobject>
<adminobject-interface>javax.jms.Queue</adminobject-interface>
<adminobject-class>
org.codehaus.activemq.message.ActiveMQQueue</adminobject-class>
<adminobject-instance>
<message-destination-name>SendReceiveQueue</message-destination-name>
<config-property-setting name="PhysicalName">
SendReceiveQueue</config-property-setting>
</adminobject-instance>
</adminobject>
</connector>
由于 Geronimo M5 服务器已经通过系统部署计划配置好,因此您只需启动它,以使相关队列可用。要查看在服务器启动时运行的 ActiveMQ 代理实例,可以通过选择 Server => JMS Server 来在 Geronimo M5 控制台上找到其管理页面。图 6 中的 Geronimo M5 控制台显示了它启动的缺省 ActiveMQ 实例。
图 6. Geronimo M5 控制台上的 ActiveMQ 消息代理配置页面
在图 6 中,ActiveMQ 消息代理实例支持两种传输,第一种是 in-VM 传输,用于 Geronimo M5 组件和消息代理之间快速交互,第二种是 TCP/IP 传输,用于任何外部客户机(如我们的非 J2EE JMSReceiver 客户机)。
4. 运行客户机
将目录更改为 Geronimo 代码分布的代码目录下的 mqclient 子目录,然后使用如下命令运行该客户机:
ant
同前面一样,这将启动 JMSReceiver。该客户机将使用如图 6 所示的 TCP 传输在缺省端口 61616 上连接到 Geronimo M5 管理的 ActiveMQ 消息代理。该客户机将阻塞并等待要显示在 SendReceive 队列中的消息。
5. 部署发送方 Web 应用程序
使用 Geronimo M5 控制台部署发送方应用程序。选择 Applications => All Configuration。在右下方的“Install New Application”部分,将 sender.war 的路径输入 Archive 文本框,然后单击 Install 按钮。这将安装并启动 SenderServlet。从 Geronimo M5 Web 控制台部署的情况几乎与使用 Gluecode SE 控制台的情况完全相同。
6. 试验 JMS Web 应用程序
在成功部署之后,您可以通过如下 URL 地址访问 SenderServlet:http://localhost:8080/sender/sendform.cgi。试着向表单中输入一些消息,然后单击 Send。该应用程序的运行情况将与 Gluecode SE 完全相同。
迁移和部署到 Community Edition
现在,我们将进行迄今为止最平常的迁移练习,您将把应用程序部署到 Community Edition 环境。由于 Community Edition 主要由 Geronimo M5 组成(此外还包括少量非 J2EE 模块),因此迁移所涉及的工作很少。当然,如果您是从 Gluecode SE 迁移到 Community Edition,则请记住,您需要首先按照上面的说明迁移到 Geronimo M5。
这次我们不需要重新构建示例应用程序。Community Edition 和 Geronimo M5 的依赖库级别是完全相同的。而且您也不需要重新构建客户机,因为 Community Edition 的 ActiveMQ 代理版本与 Geronimo M5 完全相同。
1. 配置 JMS 消息队列
还是与 Geronimo M5 一样,缺省系统 JMS 部署计划已经为我们创建了 SendReceiveQueue。您将在 Community Edition 安装目录的 doc/plan 子目录下找到与 Geronimo 相同的 system-jms-plan.xml 部署计划。该计划显示在上面的清单 3 中,创建 endReceiveQueue 的代码用黑体显示。由于存在兼容性,因此我们不需要执行另一个步骤。
在与 Gluecode SE 相同的 Community Edition Web 控制台上,您可以创建其他 JMS 队列或主题。要这样做,请选择 Services => JMS。图 7 显示了用于添加 JMS 队列和主题的 JMS Destination Manager 配置页面。
图 7. 用于添加 JMS 队列和主题的 Community Edition 控制台页面
2. 运行客户机
将目录更改为 Community Edition 代码分布的代码目录下的 mqclient 子目录,然后使用如下命令运行该客户机:
ant
不需要进行配置或编译更改,JMSReceiver 将启动,并且该客户机将连接到 Community Edition 管理的 ActiveMQ 消息代理。该客户机阻塞并等待 SendReceive 队列中的消息。
3. 部署发送方 Web 应用程序
使用 Community Edition 控制台部署发送方应用程序的情况与使用 Geronimo M5 的情况完全相同。选择 Applications => All Configuration,在右下方找到“Install New Application”部分,将 sender.war 的路径输入 Archive 文本框,然后单击 Install 按钮。
4. 试验 JMS Web 应用程序
在成功部署后,运行该应用程序,并验证其工作情况是否与第一次在 Gluecode SE 下承载和接着在 Geronimo M5 下承载时的工作情况完全相同。从 Geronimo M5 到 Community Edition 的这种迁移不需要进行额外的工作。
结束语
在本文中,我们将基于 JMS 的示例应用程序从 Gluecode SE 迁移到 WebSphere Application Server Community Edition 并从 Apache Geronimo M5 迁移到 Community Edition(两种迁移情况的配置更改很少),然后对其进行重新编译,以提供更新的 ActiveMQ 库。
由于 WebSphere Application Server Community Edition 基于 Apache Geronimo M5,因此将应用程序从 Geronimo 迁移到 Community Edition 非常简单,只需要做很少的工作或者根本不需要进行任何工作。Gluecode SE 基于 Apache Geronimo M4 内部版本,而且从 Gluecode SE 迁移到 Community Edition 同样相当简单。从这些示例中我们可以看出,使用 Community Edition,我们能够依靠用户友好的基于 Web 的控制台来满足大量部署、管理和配置需要。
本文示例源代码或素材下载
- ››WebSphere Application Server 7.0 XML Feature P...
- ››WebSphere 反向投资者: 解决 WebSphere Applicati...
- ››WebSphere sMash 的创新应用,第 2 部分: 借助包装...
- ››迁移DHCP服务器
- ››Websphere MQ v6集群的负载均衡新功能
- ››WebSphere Process Server V6.0.2 集群,第 2 部分...
- ››迁移集群环境中的 WebSphere Commerce
- ››WebSphere Process Server V6.0.2 集群,第 1 部分...
- ››WebSphere MQ性能调优浅谈
- ››WebSphere配置资源库管理
- ››WebSphere中的SSL/TLS:用法、配置和性能
- ››websphere ejb远程/本地调用总结
更多精彩
赞助商链接