Message-Driven Beans
本章包括两个部分,作为资源的JMS 和消息驱动Bean. 第一部分描述JMS和它作为资源的角色,也就是说它是其它企业Bean(会话Bean, 实体Bean,或者消息Bean)可以获得的资源。企业Bean可以利用JMS API 通过topic或者queue发送消息给其它应用程序。对JMS不熟悉的读者,在学习第二部分前应该先学习第一部分,它可以帮助从整体上把握消息驱动Bean.
第二部分,着重讲述这种新型的企业Bean,消息驱动Bean. 消息Bean是一种异步bean,通过消息传送引发。在EJB 2.0中,要求供应商提供基于JMS的消息驱动Bean,它能够监听指定的topic或者queue,并且当消息传送时处理JMS消息。
所有的EJB2.0供应商,在默认情况下,必须支持JMS提供者。绝大部分EJB2.0供应商内置了JMS供方的支持,有的也提供其它形式的JMS供方。例如,某供应商使用Sonic软件的SonicMQ作为其JMS服务。无论EJB2.0供应商提供何种JMS服务,如果希望支持消息驱动Bean,只需要提供一种JMS服务就够用了。这种强制要求支持JMS的好处是EJB开发者无用多管消息的消费和传送。
JMS作为一种资源
JMS是供应商理年当然支持的一种API,也是J2EE平台的一部分,可以用来访问企业消息系统。企业消息系统(如面向消息中件间 MOM)方便了网络应用程序之间的消息交换。JMS类似于JDBC:JDBC的API用来访问各种关系型数据库,JMS同样提供了与供应商无关的方式来访问企业消息系统。现在有许多企业消息产品支持JMS,包括IBM的MQSeries, BEA的Weblogi的JMS服务,Sun公司的java消息队列,以及Progress的SonicMQ等。使用JMS API来发关和接收消息的应用软件称为JMS客户端,可以在不同的JMS供应商上切换。
JMS中的消息客户称为JMS客户,而消息系统称为MOM包括JMS服务供方称为JMS供方。JMS应用程序,是一种业务系统,通常由许多JMS客户和一个JMS供方组成。
在EJB中,任何一企业bean都可以使用JMS来发送消息给其它应用程序或者消息驱动Bean。JMS方便了企业Bean的消息,因为使用了消息服务,有时称作代理或路由。消息代理最早在IBM的MQSeries中实现,但是JMS是相当新的,被设计为可以在java应用程序间传送任何一种消息。
用JMS再次实现TravelAgent EJB
作为一个例子,我们可以修改TravelAgent EJB,它使用JMS来通知其它应用程序有一个房间被订。下面的代码,说明了如何修改bookPassage()方法,使得TravelAgent EJB将根据TicketDO的描述发送一个简单的文本消息。
…code omitted
需要许多新的代码来发送消息。尽管刚开始时,这看起来有些复杂,但是JMS基础部分并没有如此复杂。
TopicConnectionFactory 和Topic
(待续...)