支持JCA消息端点

从版本2.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对象设置JmsMessageEndpointManagerActivationSpec对象也可以来自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="jakarta.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实例定义共享线程池。

在某些环境中,您可以通过JNDI(使用<jee:jndi-lookup>)获取整个ResourceAdapter对象。 基于Spring的消息侦听器然后可以与托管在服务器上的ResourceAdapter交互,这也使用服务器的内置WorkManager

有关更多详细信息,请参阅JmsMessageEndpointManagerJmsActivationSpecConfigResourceAdapterFactoryBean的javadoc。

Spring还提供了一个通用的JCA消息端点管理器,不与JMS绑定:org.springframework.jca.endpoint.GenericMessageEndpointManager。 此组件允许使用任何消息侦听器类型(例如JMS MessageListener)和任何特定于提供程序的ActivationSpec对象。 请查看您的JCA提供程序的文档,了解您的连接器的实际功能,并查看GenericMessageEndpointManager的javadoc以获取Spring特定的配置详细信息。

基于JCA的消息端点管理与EJB 2.1消息驱动Bean非常类似。 它使用相同的底层资源提供程序合同。 与EJB 2.1 MDB一样,您还可以在Spring上下文中使用JCA提供程序支持的任何消息侦听器接口。 尽管如此,Spring为JMS提供了明确的“便利”支持,因为JMS是与JCA端点管理合同一起使用的最常见的端点API。