级别: 初级 Andy
Wilkinson, Software Engineer, WebSphere Application Server development, IBM Hursley
2003 年 9 月 01 日 本系列共三篇文章,阐述了如何使用IBM® WebSphere® Studio Application Developer(以下简称Application Developer)及其嵌入的对开发和测试Java™ Message Service (JMS)应用的消息传递支持。本文假定您对企业消息传递及其使用有基本的了解,但是不需要有JMS方面的经验。
© IBM公司版权所有
引言
本系列共三篇文章,阐述了如何使用IBM® WebSphere® Studio Application Developer(以下简称Application Developer)及其嵌入的对开发和测试Java™ Message Service (JMS)应用的消息传递支持。本文假定您对企业消息传递及其使用有基本的了解,但是不需要有JMS方面的经验。
这三篇文章将涵盖以下几方面的内容:
- 第一部分,也就是本文,将演示如何开发和测试点对点JMS应用程序。
- 第二部分,将演示如何开发和测试发布-订阅JMS应用程序。
- 第三部分,将演示如何开发、配置和测试消息驱动的bean(MDB)。
运用Application Developer创建点对点JMS应用程序
我们将遵循以下步骤创建点对点JMS应用程序:
- 创建新的应用程序客户机项目。
- 导入点对点应用程序代码框架。
- 完成应用程序代码。
创建新的应用程序客户机项目
在创建新的应用程序客户机项目之前,切换到J2EE透视图中的J2EE导航器视图。选择
File => New => Application Client Project,开始创建新的项目。Application Client Project Creation向导将打开,如图1所示。检查正在创建J2EE1.3项目,然后单击
Next。
图1. Application Client project creation向导:J2EE规范版本面板
现在您将看到应用程序客户机项目创建面板,需要有项目名称和正在封装的企业应用程序项目的细节。输入项目名称
PointToPoint ,选择创建新的企业应用程序项目,名为
JMSTutorialsEAR 。然后单击
Finish,Application Developer将创建新项目。
图2. Application Client project creation向导: 应用程序客户机项目面板
导入代码框架
现在需要为点对点应用程序导入代码框架。在开始之前,
下载并解压本文所附的源代码。
要导入代码,展开PointToPoint项目,选择
AppClientModule文件夹,然后选择
File => Import。在弹出的File Import向导中,选择
File system,然后单击
Next。在如下面的图3所示的File System Import向导中,选择
Browse,然后定位到您解压源代码的目录。选择
part1文件夹,选取
PointToPoint.java,然后单击
Finish。忽略Application Developer所报告的编译错误--当添加必要的JMS代码完成代码框架之后它将会消失,如下所述。
图3. 导入向导:文件系统导入面板
完成应用程序代码
在将
PointToPoint.java 文件导入该项目之后,在J2EE的导航器视图中双击它的条目打开其编译器。在编译器打开之后,可以进行一些修改,这样将完成该点对点应用程序代码。代码框架将提供一个代码的轮廓,包括进行任何异常处理的try-catch块,还有一系列的注释显示哪些地方是需要作改动的。
第一处改动是使用上下文对象从JNDI命名空间中查找QueueConnectionFactory对象。要查找的对象的名字可以根据您的需要进行选择,和您将在下面讲述的测试环境的配置中指定的一样。在下面的代码片断中,使用了名称
QCF 。
//从最初的上下文中
//查找队列连接工厂
final QueueConnectionFactory qcf = (QueueConnectionFactory) context.lookup("QCF");
|
下面,使用
QueueConnectionFactory 来建立新的
QueueConnection 。
QueueConnectionFactory 类提供了两种形式的
createQueueConnection 方法,其中一个使用了用户名和密码安全性凭证而另一个却没有。安全性问题不在本文讨论范围之内,所以此处用到的
createQueueConnection 方法没有使用任何参数。
//从队列连接工厂
//创建新的队列连接
final QueueConnection conn = qcf.createQueueConnection();
|
在创建了
QueueConnection 之后,就进行启动,这样它就可以用于处理传入的消息。
现在,可以用
QueueConnection 来创建
QueueSession 对象。在创建了
QueueSession 对象之后,就必须指定该会话是否要进行处理,以及它应该如何应答任何接收到的消息。在本文中,我们将不处理会话,消息应答也将由基础JMS提供者自动进行处理。
//从队列连接中创建新的队列会话
//该会话不应该进行处理
//而应该使用自动会话应答
final QueueSession session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
|
在发送和接收任何消息之前,您必须从JNDI中检索Queue对象,获得消息将发送到哪儿以及从何处读取的详细资料。为达此目的,可以按照类似的方式使用
QueueConnectionFactory 来查找上下文对象。同样,您可以选择传送到查找的对象的名称,如同您在下面将配置的一样。
//查找用于发送和接收
//来自最初上下文中的消息
final Queue q = (Queue) context.lookup("Q");
|
在找到该Queue对象之后,就可以在创建
QueueSender 对象时进行使用,它可用于向队列发送消息。
QueueSender 对象是从现有的
QueueSession 对象中创建的:
//使用队列会话创建新的队列发送者。
//该发送者应该创建成能把消息发送到
//队列
final QueueSender sender = session.createSender(q);
|
在创建了
QueueSender 对象之后,现在,您就可以创建和发送消息了。和
QueueSenders 类似,可以使用Session对象来创建JMS消息。在本文中,您将创建一个
TextMessage 消息,其消息数据可以用您选择的某些文本进行初始化。
//使用该队列会话创建一个文本消息
//将此消息的数据初始化为
//您选择的某个字符串
final TextMessage sentMessage = session.createTextMessage("My first JMS message.");
//使用该队列发送者发送sentMessage对象
sender.send(sentMessage);
|
在将
TextMessage 发送到队列之后,现在,您需要把它再次读取回来。您可以使用
QueueReceiver 对象(其创建方式和前面的
QueueSender 对象大致相同)来完成。
// Create a new queue receiver using the queue session.
//该队列应该创建成能从
//队列q接收消息
final QueueReceiver receiver = session.createReceiver(q);
|
现在,您可以使用
QueueReceiver 对象从队列中读取消息了。JMS提供了三种读取消息的方式。调用
receive() 将使代码保持等待,直到队列中有可以读取的消息为止。调用
receive(n) 将使代码保持等待可以读取的消息长达n毫秒。顾名思义,调用
receiveNoWait() 将使代码立即返回,而不管队列中是否有可以读取的消息。在这种情况下,由于消息刚发送到队列中,我们就能够肯定可以读取一个消息,所以将使用
receiveNoWait 方法。
//使用队列接收者来接收
//先前发送的消息
final Message receivedMessage = receiver.receiveNoWait();
|
为了验证接收到的消息和所发送的是相同的消息,可以把该消息输出到
System.out 。
//把接收到的消息输出到System.out中
System.out.println(receivedMessage);
|
保存已更新的源代码,现在,就可以准备对该点对点应用程序进行测试了。
使用Application Developer测试点对点JMS应用程序
- 配置Application Developer Test Environment。
- 运行点对点应用程序。
配置Application Developer Test Environment
在能够运行该
PointToPoint 应用程序之前,需要创建和配置测试环境。
在J2EE透视图中,切换到J2EE Hierarchy视图。右键单击
Servers条目,并且选择
New => Server and Server Configuration,以打开Server Creation向导,如下面的图4所示。指定Server名称为
server1 ,然后选择Server类型为
WebSphere version 5.0 => Test Environment。单击
Finish,完成测试服务器的创建。
图4. Create a New Server and Server Configuration向导
在创建了新的测试环境服务器之后,必须更新其配置以包含JMS对象,该对象可以通过
PointToPoint 应用程序代码从JNDI中进行查找。在J2EE Hierarchy中双击
server1,打开其编辑器,并且切换到JMS选项卡,以显示WebSphere JMS Provider Options面板。
在该面板上我们要检查的第一件事情就是正在进行更改的
Server Settings。在该面板的顶部,验证
Server Settings是展开的,而且
Cell Settings和
Node Settings都未设置。必须给JMS服务器添加一个队列,以供
PointToPoint 应用程序发送和接收消息。在该面板的JMS Server Properties部分,单击
Add,输入
PointToPointQ ,然后单击
OK。需要对该JMS服务器属性配置进行的另一处改动就是,将其初始状态从
STOP更改为
START。该JMS Server的配置现在应该和图5类似:
图5. JMS Server的属性配置
在完成了Embedded JMS Server的配置之后,现在,您必须需要配置的是,测试环境服务器的JNDI命名空间所需的
QueueConnectionFactory 和
Queue 。在WebSphere JMS Provider Options面板的Server Settings部分,向下移动到JMS Connection Factories部分,在
WASQueueConnectionFactories 条目表的右侧,单击
Add按钮。在弹出的向导中指定Name和JNDI Name为QCF,然后使用下拉列表,分别指定Node和Server Name为
localhost 和
server1 。根据图6所示来检验各项配置更改,然后单击
OK。
图6. WASQueueConnectionFactory的Configuration Settings
最后一步配置是为上面配置的JMS server的队列创建一个JNDI条目。在JMS Destination部分向下移动到WAS Queue条目表,单击右边的
Add按钮。在弹出的向导中,指定Name为
PointToPointQ (该值必须和在JMS server中创建的队列一致),而JNDI Name为
Q (该值必须和用于在应用程序代码中查找对象的名称一致)。使用下拉列表,选择Node为
localhost 。根据图7中所示的检验各项配置更改,然后单击
OK。
图7. WASQueue的Configuration Settings
保存已更新的服务器配置,然后在Servers视图的Servers选项卡中右击其条目,然后选择
Start,以启动服务器。现在,您就可以准备运行
PointToPoint 应用程序了。
运行点对点应用程序
为了运行这个应用程序,您必须创建新的Launch Configuration,并且指定该应用程序客户机模块的主类。
在J2EE Hierarchy中,双击Application Client Modules部分的
PointToPoint条目,然后单击和Main-Class字段相邻的
Edit。在该字段中输入
PointToPoint ,并且保存所作的修改。
在J2EE透视图中,选择
Run => Run,打开Launch Configuration向导。在该向导左侧的Launch Configuration列表中选择
WebSphere V5 Application Client,然后单击
New。将这个新的配置命名为
PointToPoint, 然后使用下拉列表,指定Enteprise Application为
JMSTutorialsEAR 。该向导现在应该和图8类似:
图8. PointToPoint Application Client的Launch Configuration
在
PointToPoint 应用可以运行之前需要完成的最后一项工作就是配置其类路径了。切换到Classpath选项卡,然后单击
Add External JARs。定位到Embedded MQ的安装目录(一般为
C:/Program Files/IBM/WebSphere MQ ),然后向下移至
Java/lib 目录。同时选择
com.ibm.mq.jar 和
com.ibm.mqjms.jar 文件,然后单击
Open。现在,您可以在Launch Configuration向导的底部单击
Run运行
PointToPoint 应用客户端了。来自应用程序的输出应该看起来和下面的一样:
IBM WebSphere Application Server, Release 5.0
J2EE Application Client Tool
Copyright IBM Corp., 1997-2002
WSCL0012I: Processing command line arguments.
WSCL0001I: Command line, property file, and system property arguments resolved to:
File to launch = e:/java/wsad/workspace/JMSTutorialsEAR
CC Property File = null
Client Jar File = <default>
Alternate DD = null
BootstrapHost = winston
BootstrapPort = <default>
Trace enabled = false
Tracefile = null
Init only = false
Classpath Parameter = null
Security Manager = disable
Security Manager Class = Not used. -CCsecurityManager=disable
Security Manager Policy = Not used. -CCsecurityManager=disable
Exit VM = false
Soap Connector Port = null
Application Parameters =
WSCL0013I: Initializing the J2EE Application Client Environment.
WSCL0600I: Binding HandleDelegate object.
WSCL0031I: The object was bound successfully.
WSCL0900I: Initializing and starting components.
WSCL0910I: Initializing component: com.ibm.ws.activity.ActivityServiceComponentImpl
WSCL0911I: Component initialized successfully.
WSCL0901I: Component initialization completed successfully.
WSCL0035I: Initialization of the J2EE Application Client Environment has completed.
WSCL0014I: Invoking the Application Client class PointToPoint
JMS Message class: jms_text
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:414d51205741535f6c6f63616c686f7324b28a3e20000701
JMSTimestamp: 1049281792014
JMSCorrelationID:null
JMSDestination: queue:///WQ_Q
JMSReplyTo: null
JMSRedelivered: false
JMS_IBM_PutDate:20030402
JMSXAppID:Websphere MQ Client for Java
JMS_IBM_Format:MQSTR
JMS_IBM_PutApplType:28
JMS_IBM_MsgType:8
JMSXUserID:Andy
JMS_IBM_PutTime:11095203
JMSXDeliveryCount:1
My first JMS message
|

 |

|
总结
这篇文章演示了运用Application Developer可以很容易地创建和测试使用JMS的应用程序客户机。虽然这篇文章中讲述的只是简单地发送和接收一个JMS消息,但是您可以把这里学到的技术用在任何JMS点对点应用程序的开发中,不管应用程序是多么的复杂,方法都是一样的。
下载 | 名字 | 大小 | 下载方法 |
|---|
| PointToPoint.zip | 0.2 MB | HTTP |
关于作者  | |  |
Andy Wilkinson是位于英格兰Hursley市IBM
Hursley实验室的一名软件工程师,他研究的领域是WebSphere Application
Server事务处理和活动服务组件。此前,他是WebSphere MQ Java和JMS服务小组的一员,提供与all-things
MQ和Java有关的客户支持。您可以通过
awilkinson@uk.ibm.com与Andy取得联系。
|
对本文的评价
|