这一配置能够让您在开发生命周期的早期识别和">解决问题,而无需安装本地队列管理器或等待访问远程队列管理器。
在测试专为 WebSphere Application Server 开发的 JMS 应用程序时,开发团队可能并不总是能够访问 WebSphere MQ 环境。因此,在将应用程序代码部署到一个集成环境中之前,您可能无法识别缺陷并排除故障。本文将向您展示如何配置本地 WebSphere 测试环境,以模拟 WebSphere MQ 队列管理器及其相关队列,这样您就可以在开发生命周期的早期识别和解决问题。
为了模拟类似于 WebSphere MQ 的环境,要利用 WebSphere Application Server V5 默认消息传递提供程序。该提供程序使用本身包含消息传递引擎和相关队列的一个内部服务集成总线 (SIBus)。因此,您要做的不是定义 Java Message Service (JMS) 资源来访问 WebSphere MQ 队列,而是定义 JMS 资源来访问 SIBus 上的队列目标。本文将向您展示如何定义这些资源,并且通过一个样例应用程序来演示如何将消息放置到已定义的队列中,以及如何从已定义的队列中获取消息。
这些操作说明的前提条件是,您的开发环境中已经安装了针对 WebSphere Application Server V6 或其更高版本的本地测试环境。对于 WebSphere Application Server V7 用户,Java Software Development Kit (SDK) 必须至少是 V1.6.0 Java Technology Edition SR9 FP1 for WebSphere Application Server 或 WebSphere Application Server V7 的最新 Java SDK 版本。
样例应用程序
样例应用程序使用下面表 1 中所示的资源。本文逐步指导您定义这些资源中的每一个,向您展示如何为您的特定应用程序定制这些指令。对于样例应用程序,要在 WebSphere Application Server V5 消息传递提供程序下定义两个队列。第一个队列叫做 IncomingQueue,用于应用程序处理的传入消息。第二个队列叫做 OutgoingQueue,它存储样例应用程序发送的消息。这两个队列模拟其相应的 WebSphere MQ 队列,并且需要为每个队列定义相应的 JMS 队列和队列连接工厂 (QCF)。
样例应用程序有一个消息驱动的企业 Java bean (EJB),名为 IncomingMessageReceiverBean。它通过 IncomingListenerPort 侦听器端口侦听消息,并且接收放在 IncomingQueue 队列上的消息。应用程序使用了一个名为 OutgoingMessageSenderBean 的无状态会话 EJB 将消息发送给 OutgoingQueue 队列。
表 1. 样例应用程序使用的资源
WebSphere 队列名 JMS 队列 JMS QCF 侦听器端口 EJB 名 IncomingQueue jms/IncomingQueue jms/IncomingQCF IncomingListenerPort IncomingMessageReceiverBean OutgoingQueue jms/OutgoingQueue jms/OutgoingQCF --- OutgoingMessageSenderBean
在为特定应用程序配置本地 WebSphere 测试环境时,可以使用在集成 WebSphere 环境中定义的相同的 Java Naming and Directory Interface (JNDI) 名称。
创建 JMS 队列目标
对于运行于 WebSphere Application Server 之上的任何 JMS 应用程序,常规配置流程包括,为特定消息传递提供程序(比如 WebSphere MQ)定义 JMS 队列。对于该场景,您要为 WebSphere V5 消息传递提供程序定义队列目标。使用 Rational Application Developer(或一个同等的集成开发环境)启动 WebSphere 测试服务器并执行以下步骤:
登录到管理控制台,转至 Resources => JMS Providers => V5 default messaging provider (Use Server scope)。 在 Additional Properties 标题下,单击 WebSphere queue destinations 或 Queues,具体取决于您的 WebSphere 版本。 单击 New,为下面表 2 中所示的每个 JMS 资源创建一个新队列目标。注意队列名称,因为稍后在 SIBus 上创建队列时您会使用该名称。
表 2. WebSphere 队列目标值
Queue Name 队列 JNDI 名称 IncomingQueue jms/IncomingQueue OutgoingQueue jms/OutgoingQueue
在为特定应用程序创建 JMS 队列目标时,JNDI 名称应当匹配在 Resources => JMS Providers => WebSphere MQ => WebSphere MQ queue destinations 下的集成环境中定义的名称,其中定义了基本队列名称和相关的队列管理器名称。
单击 OK 在本地保存更改到主配置。
创建 JMS 队列连接工厂
对于 JMS 应用程序使用的每个 JMS 队列,还需要一个相应的 JMS QCF。在该配置下,需要在 WebSphere V5 默认消息传递提供程序下创建 QCF。在您的测试服务器上执行以下步骤:
在管理控制台中,转至 Resources => JMS Providers => V5 default messaging。 在 Additional Properties 标题下,单击 WebSphere queue connection factories 或 Queue connection factories,具体取决于您的 WebSphere 版本。 单击 New 为下面表 3 中所示的每个资源创建一个新 QCF:
表 3. WebSphere Queue Connection Factory 值
QCF Name QCF JNDI 名称 IncomingQCF jms/IncomingQCF OutgoingQCF jms/OutgoingQCF
在为特定应用程序创建 JMS QCF 时,JNDI 名称应当匹配 Resources => JMS Providers => WebSphere MQ => WebSphere MQ queue connection factories 下的集成环境中定义的名称,其中指定了队列管理器和通道细节。
单击 OK 在本地保存更改到主配置。