26.5 支持 JCA 消息端点
从 Spring2.5 版本开始,Spring 也提供了基于 JCA MessageListener
容器的支持。JmsMessageEndpointManager
将根据提供者ResourceAdapter
的类名自动地决定ActivationSpec
类名。因此,通常它只提供如下例所示的 Spring 的通用JmsActivationSpecConfig
。
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
<property name="resourceAdapter" ref="resourceAdapter"/>
<property name="activationSpecConfig">
<bean class="org.springframework.jms.listener.endpoint.JmsActivationSpecConfig">
<property name="destinationName" value="myQueue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
或者,您可以使用给定的ActivationSpec
对象设置JmsMessageEndpointManager
。ActivationSpec
对象也可能来自 JNDI 查找(使用<jee:jndi-lookup>
)。
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
<property name="resourceAdapter" ref="resourceAdapter"/>
<property name="activationSpec">
<bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
<property name="destination" value="myQueue"/>
<property name="destinationType" value="javax.jms.Queue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
使用 Spring 的 ResourceAdapterFactoryBean
,目标ResourceAdapter
可以在本地配置,如以下示例所示。
<bean id="resourceAdapter" class="org.springframework.jca.support.ResourceAdapterFactoryBean">
<property name="resourceAdapter">
<bean class="org.apache.activemq.ra.ActiveMQResourceAdapter">
<property name="serverUrl" value="tcp://localhost:61616"/>
</bean>
</property>
<property name="workManager">
<bean class="org.springframework.jca.work.SimpleTaskWorkManager"/>
</property>
</bean>
指定的WorkManager
也可能指向环境特定的线程池 - 通常通过SimpleTaskWorkManager
的asyncTaskExecutor
属性。如果,你恰好考虑使用多个适配器,为你的所有ResourceAdapter
实例定义一个共享线程池。
在某些环境(例如 WebLogic 9或更高版本)中,可以从 JNDI 中获取整个ResourceAdapter
对象(使用<jee:jndi-lookup>
)。然后,基于Spring 的消息监听器可以与服务器托管的ResourceAdapter
进行交互,也可以使用服务内置的WorkManager
。
有关更多详细信息,请参阅JMSMessageEndpointManager
、JmsActivationSpecConfig
和`ResourceAdapterFactoryBean
的 JavaDoc。
Spring 还提供了一个通用的 JCA 消息端点管理器,它不绑定到 JMS :org.springframework.jca.endpoint.GenericMessageEndpointManager
。 它允许使用任何消息监听器类型(例如 CCI MessageListener
)和任何提供者特定的ActivationSpec
对象。从所涉及 JCA 提供者的文档可以找到这个连接器的实际能力,并参考“GenericMessageEndpointManager
的 JavaDoc ”来了解 Spring 特有的配置详细信息。
基于 JCA 的消息端点管理器与 EJB 2.1的消息驱动 Bean 很相似;它使用了提供者们约定的相同底层资源。 与 EJB 2.1 MDB 一样,任何被 JCA 提供者支持的消息监听器接口都可以在 Spring 上下文中使用。尽管如此,Spring 仍为 JMS 提供了显式的“方便的”支持,很显然是因为 JMS 是 JCA 端点管理约定中最通用的端点 API。