打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利用 WAS CE v2.1 创建基于 JMS 的应用
userphoto

2011.03.15

关注
来源: developerworks | 作者: 戴宣、王磊 | 分类: |  2009-4-27 13:32JMS WAS 应用
正文
评论( 0 )
()旨在统一各种 MOM 接口的规范。 CE 是基于开源 Java EE 器 Geronimo 的产品。WAS CE 支持 EJB 及  服务,同时还支持 Java EE 的消息接口规范--JMS。本文将对在 WAS CE 中,基于 JMS 的 Java EE 应用进行介绍。
上一篇文章中,作者以一个示例介绍了在 WAS CE v2.1 中开发 Java EE 应用的流程,内容涵盖了 Java EE 5 的很多新特性,包括:Java  Faces (JSF)、Java Persistence API (JPA)、Enterprise Java Bean (EJB) 以及 JAX-WS 2.0 。作为本系列的第二篇文章,本文将介绍 Java EE 5 的另一种技术--JMS(Java Message Service)。
JMS 也是 Java EE 5 规范的一部分,主要用于对应用程序的消息传递及。目前 JMS 规范的最新版本为 1.1,规范定义了一组 API, JMS 的实现则留由不同厂商提供。JMS 的实现被称为 JMS Provider。
JMS 是一种面向消息的中间件(Message Oriented Middleware,MOM)。与 CORBA、DCOM、RMI 等通信方式相比,JMS 具有很多新特点:
消息的发送和接收是异步的,发送者无需等待。
可以一对多通信:对于一个消息可以有多个接收者。
消息发送者和接收者的生命周期无需相同:发送消息的时,接收者不一定运行;接收消息的时,发送者也不一定运行。
虽然其他通信方式也会具有 JMS 中的特点,但是 JMS 将三种特点集于一身,无疑为应用程序的开发带来了巨大的灵活性。因为 JMS 的良好特性,出现了各种 JMS Provider。其中,既有开源社区的实现,如 ActiveMQ、OpenMQ,也有商业实现,如  MQ。
JMS 的巨大灵活性与其消息模型有密切关系。JMS 中有两种消息模型:发布/订阅消息模型及点对点消息模型。
1. 发布/订阅消息模型
在发布/订阅模型中,消息的发送者与接收者通过 (Topic) 来进行通信。发送者在给定的 Topic 下发布消息;接收者订阅该 Topic 后,即可接收 Topic 下所发布的消息。发布/订阅模型的特点是:一个发布者可以将消息发送给多个接收者,甚至可以有多个发布者使用同一个 Topic 发布消息;所有订阅了 Topic 的接收者都可以接收到消息。
根据发布/订阅消息模型的特点,可以在“一对多”的情形下,使用该消息模型。即当有一个发布者需要向多个接收者发送消息时,可以使用发布/订阅消息模型。这种场景与 RSS 的消息订阅十分相似,若干接收者订阅同一个“Feed”;该“Feed”下的任一消息都会被所有订阅者接收。
2. 点对点消息模型
与发布/订阅模型相比,点对点的消息模型较为简单。消息发送者与接收者使用同一个消息队列 (Queue),发送者将消息发送至消息队列中,接收者直接去队列中取出消息。点对点消息模型的特点是:消息队列中的消息,只能被一个接收者取走;如果没有接收者接收消息,消息会继续存放在消息队列中。
根据点对点消息模型的特点,可以在“一对一”的情形下,使用该消息模型。即当有一个发送者需要一个特定接收者发送消息时,可以使用点对点消息模型。这种场景类似于发送者向接收者发送了一封“邮件”,只有实现指定的接收者,才能在自己的“邮箱”里看见“邮件”。
前一篇文章简要介绍了通过一种 Java EE 5 认证的应用服务器-WAS CE (Websphere  Server Community Edition)。WAS CE 以 ActiveMQ 作为自身的 JMS Provider。通过 ActiveMQ 可以方便的开发 JMS 的应用。ActiveMQ 是 Apache 社区的开源项目,具有以下特性:
自带符合 JCA(Java Connector Architecture)1.5 规范的 Resource Adapter,可以使用在多种应用服务器上,如 Apache Geronimo, Redhat JBoss, GlassFish 及 Oracle WebLogic。
使用 JDBC 支持消息的快速持久化。
可以用于 、C/S 构架及 P2P(Peer-to-Peer) 的消息传递。
可以作为独立的 JMS 平台(无需应用服务器),适合单元测试。
作为 Apache 社区的顶级项目,ActiveMQ 还在不断。其良好的特性也为 WAS CE 增色不少。本文余下部分,将扩展前一篇文章中的示例,以阐释在 WAS CE 2.1 中 JMS 应用的开发流程。
在前一篇文章的示例中,作者假设了一个商店,应用程序只实现了用户登录和购买商品的功能。本文继续扩展这个示例,假设用户购买商品之后,商店还需要进行以下工作:
通知会计 (Accountant) 更新账目并且告知库房 (Storage) 准备出货
库房取货后通知运输队 (Transporter) 送货
显然,上述工作需要传递多个消息,如图 1 所示。
示例中所需要的消息传递功能,可以使用 JMS 完成。
从图 1 可以看出,用户购买商品后,会计和库房都需要得到消息。这是一个消息发送者对应两个消息接收者的场景。根据 JMS 消息模型特性,这是一个“一对多”的消息发送方式,此处可以考虑使用发布/订阅模型。为此,需要定义一个 Topic,命名为 OrderTopic。然而,库房对运输队的通知则是明显的一对一消息发送,所以可以使用点对点消息发送模型。因此,需要定义一个 Queue,命名为 OrderQueue。
与前文定义一个相似,JMS 也可以通过两种方式定义 JMS 资源:通过管理控制台创建和通过资源描述文件创建。在这里我们使用第二种方式,所以需要在 ShopEAR 中的增加文件:jms-resources.xml。jms-resources.xml 中定义 JMS 资源的片段见清单 1。
<resourceadapter>
<resourceadapter-instance>
<resourceadapter-name>jms-resources</resourceadapter-name>
<nam:workmanager xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2">
<nam:gbean-link>DefaultWorkManager</nam:gbean-link>
</nam:workmanager>
</resourceadapter-instance>
......
<adminobject>
<adminobject-interface>javax.jms.Queue</adminobject-interface>
<adminobject-class>
org.apache.activemq.command.ActiveMQQueue
</adminobject-class>
<adminobject-instance>
<message-destination-name>OrderQueue</message-destination-name>
<config-property-setting name="PhysicalName">
OrderQueue
</config-property-setting>
</adminobject-instance>
</adminobject>
<adminobject>
<adminobject-interface>javax.jms.Topic</adminobject-interface>
<adminobject-class>
org.apache.activemq.command.ActiveMQTopic
</adminobject-class>
<adminobject-instance>
<message-destination-name>OrderTopic</message-destination-name>
<config-property-setting name="PhysicalName">
OrderTopic
</config-property-setting>
</adminobject-instance>
</adminobject>   上述代码定义了一个 JMS 资源适配器 (Resource Adapter) 的实例,名称为 jms-resources。此处,可以将其理解为一个 JMS 资源组 (group)。其中,包含了三个 JMS 资源,分别为 OrderQueue、OrderTopic 及 OrderConnectionFactory。   定义上述资源时,文件中引用了一些 ActiveMQ 的类。因此,还需要在 ShopEAR 的部署文件中,添加对 ActiveMQ 资源适配器 (Resource Adapter) 的依赖。同时,将位于 WASCE_HOME/repository/org/apache/geronimo/modules/geronimo-activemq-ra/2.1.3 的 geronimo-activemq-ra-2.1.3.rar 复制到 ShopEAR 中。
在 application.xml 中添加以下代码:
<module>
<connector>geronimo-activemq-ra-2.1.3.rar</connector>
</module>   在 geronimo-application.xml 中添加以下代码:
<module>
<connector>geronimo-activemq-ra-2.1.3.rar</connector>
<alt-dd>jms-resources.xml</alt-dd>
</module>   经过上述配置之后,就可以在代码中使用已定义的 JMS 资源。
发布消息
为了在用户触发“购买”动作后,向会计及库房传递消息,需要在 ShopWEB 中增加一个 OrderSenderBean。同时,需要对原有 goods.jsp 进行修改,增加链接,用于触发“购买”动作。
因为 OrderSenderBean 中引用了 JMS 资源,所以还需要在 ShopWEB 的部署文件中,添加对 JMS 资源引用。
在 web.xml 中添加清单 5 所示代码。
<resource-ref>
<res-ref-name>OrderConnectionFactory</res-ref-name>
<res-type>javax.jms.TopicConnectionFactory</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<message-destination-ref>
<message-destination-ref-name>OrderTopic</message-destination-ref-name>
<message-destination-type>javax.jms.Topic</message-destination-type>
<message-destination-usage>Produces</message-destination-usage>
<message-destination-link>OrderTopic</message-destination-link>
</message-destination-ref>
从代码中可以看出,此处引用的 JMS 资源正是在 jms-resources.xml 中定义的 OrderConnectionFactory 与 OrderTopic。当应用程序部署至 WAS CE 2.1 后,就可以使用这些 JMS 资源。
完整内容的学习,请访问:
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0904_daixuan_wascejms/
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
大型网站架构系列:消息队列(二)
JMS简介
深入掌握JMS(一):JSM基础
用ActiveMQ遇到的消息确认问题
ActiveMQ 即时通讯服务 浅析(一)
初识ActiveMQ消息中间件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服