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

支持 JCA 消息端点

从版本 2.5 开始, Spring 还提供了对基于 JCA 的容器的支持。尝试 从提供程序的类名中自动确定类名。因此,通常可以提供 Spring 的 generic ,如下例所示:MessageListenerJmsMessageEndpointManagerActivationSpecResourceAdapterJmsActivationSpecConfigspring-doc.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>

或者,您也可以使用给定对象设置 a。该对象也可能来自 JNDI 查找 (使用 )。以下示例显示了如何执行此操作:JmsMessageEndpointManagerActivationSpecActivationSpec<jee:jndi-lookup>spring-doc.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 的 ,您可以在本地配置目标,如下例所示:ResourceAdapterFactoryBeanResourceAdapterspring-doc.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>

specified 还可以指向特定于环境的线程池 — 通常通过实例的属性。 考虑为所有实例定义共享线程池 如果您碰巧使用多个适配器。WorkManagerSimpleTaskWorkManagerasyncTaskExecutorResourceAdapterspring-doc.cn

在某些环境中,您可以从 JNDI 获取整个对象 (通过使用)。然后,基于 Spring 的消息侦听器可以与 server-hosted ,它也使用服务器的内置 .ResourceAdapter<jee:jndi-lookup>ResourceAdapterWorkManagerspring-doc.cn

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

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