创建 JMS 资源
从图 1 可以看出,用户购买商品后,会计和库房都需要得到消息。这是一个消息发送者对应两个消息接收者的场景。根据 JMS 消息模型特性,这是一个“一对多”的消息发送方式,此处可以考虑使用发布/订阅模型。为此,需要定义一个 Topic,命名为 OrderTopic。然而,库房对运输队的通知则是明显的一对一消息发送,所以可以使用点对点消息发送模型。因此,需要定义一个 Queue,命名为 OrderQueue。
与前文定义一个数据源相似,JMS 也可以通过两种方式定义 JMS 资源:通过管理控制台创建和通过资源描述文件创建。在这里我们使用第二种方式,所以需要在 ShopEAR 中的增加文件:jms-resources.xml。jms-resources.xml 中定义 JMS 资源的片段见清单 1。
清单 1. jms-resources.xml
<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 中添加以下代码:
清单 2. application.xml
<module>
<connector>geronimo-activemq-ra-2.1.3.rar</connector>
</module> |
在 geronimo-application.xml 中添加以下代码:
清单 3. geronimo-application.xml
<module>
<connector>geronimo-activemq-ra-2.1.3.rar</connector>
<alt-dd>jms-resources.xml</alt-dd>
</module> |
经过上述配置之后,就可以在代码中使用已定义的 JMS 资源。