从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。