从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="jmsActivationSpecConfig">
<bean class="org.springframework.jms.listener.endpoint.JmsActivationSpecConfig">
<property name="destinationName" value="myQueue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
使用Spring的 ResourceAdapterFactoryBean,
目标 ResourceAdapter 可以像下例描述的那样本地配置。
在一些环境里(如WebLogic)也可以通过JNDI查找来完成。
<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>
请参考 JmsMessageEndpointManager、JmsActivationSpecConfig 和 ResourceAdapterFactoryBean 部分的JavaDoc,以获得更详细的信息。
Spring也提供了并不与JMS绑定的通用JCA消息端点管理器:
org.springframework.jca.endpoint.GenericMessageEndpointManager。
它允许使用任何类型的消息监听器(例如CCI MessageListener)和任何提供者特定的ActivationSpec对象。从所涉及的JCA提供者的文档可以找到这个连接器的实际能力,从 GenericMessageEndpointManager 的JavaDoc中可以找到Spring特有的配置细节。
基于JCA的消息端点管理器与EJB 2.1的Message-Driven Beans很相似,它使用了相同的资源提供者约定。像EJB 2.1 MDB一样,任何被JCA提供者支持的消息监听器接口都可以在Spring Context中使用。尽管如此,Spring仍为JMS提供了显式的“方便的”支持,很显然是因为JMS是JCA端点管理约定中最通用的端点API。