对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

对 JCA 消息端点的支持

从版本2.5开始,Spring还提供了对基于JCA的MessageListener容器的支持。 JmsMessageEndpointManager 会尝试从提供者的ResourceAdapter类名中自动确定ActivationSpec类名。 因此,通常可以提供Spring的通用JmsActivationSpecConfig,如下例所示:spring-doc.cadn.net.cn

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

或者,您可以使用给定的JmsMessageEndpointManager对象来设置一个ActivationSpecActivationSpec对象也可以来自JNDI查找(使用<jee:jndi-lookup>)。下面的示例显示了如何操作:spring-doc.cadn.net.cn

<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="jakarta.jms.Queue"/>
		</bean>
	</property>
	<property name="messageListener" ref="myMessageListener"/>
</bean>

使用 Spring 的 ResourceAdapterFactoryBean,您可以本地配置目标 ResourceAdapter, 如下例所示:spring-doc.cadn.net.cn

<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 实例定义一个共享的线程池。spring-doc.cadn.net.cn

在某些环境中,您也可以通过 JNDI 获取整个 ResourceAdapter 对象 (使用 <jee:jndi-lookup>)。然后基于 Spring 的消息监听器可以与 服务器托管的 ResourceAdapter 进行交互,后者也会使用服务器内置的 WorkManagerspring-doc.cadn.net.cn

Spring 还提供了一个通用的 JCA 消息端点管理器,它不依赖于 JMS: org.springframework.jca.endpoint.GenericMessageEndpointManager。此组件允许 使用任何消息监听器类型(例如 JMS MessageListener)和任何 提供商特定的 ActivationSpec 对象。有关您的连接器的实际功能,请参阅您的 JCA 提供商的文档,并查看 GenericMessageEndpointManager Spring 特定的配置细节的 javadoc。spring-doc.cadn.net.cn

基于JCA的消息端点管理与EJB 2.1消息驱动Bean非常相似。 它使用相同的底层资源提供者契约。与EJB 2.1 MDB类似,你也可以在Spring上下文中使用JCA提供者支持的任何消息监听器接口。 然而,Spring仍然为JMS提供了明确的“便利”支持,因为JMS是与JCA端点管理契约一起使用的最常见端点API。