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。