对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
支持 JCA 消息端点
从版本 2.5 开始, Spring 还提供了对基于 JCA 的MessageListener
容器。这JmsMessageEndpointManager
尝试
自动确定ActivationSpec
class name 来自提供程序的ResourceAdapter
类名。因此,通常可以提供
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>
或者,您可以设置JmsMessageEndpointManager
使用给定的ActivationSpec
对象。这ActivationSpec
object 也可能来自 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
实例
如果您碰巧使用多个适配器。
在某些环境中,您可以改为获取整个ResourceAdapter
来自 JNDI 的对象
(通过使用<jee:jndi-lookup>
).然后,基于 Spring 的消息侦听器可以与
服务器托管的ResourceAdapter
,它也使用服务器的内置WorkManager
.
请参阅 javadoc 以获取JmsMessageEndpointManager
,JmsActivationSpecConfig
,
和ResourceAdapterFactoryBean
了解更多详情。
Spring 还提供了一个不绑定到 JMS 的通用 JCA 消息端点管理器:org.springframework.jca.endpoint.GenericMessageEndpointManager
.此组件允许
使用任何消息侦听器类型(例如 JMSMessageListener
) 和任何
特定于提供商ActivationSpec
对象。请参阅 JCA 提供商的文档,以便
了解连接器的实际功能,并查看GenericMessageEndpointManager
javadoc 获取特定于 Spring 的配置详细信息。
基于 JCA 的消息端点管理与 EJB 2.1 消息驱动的 Bean 非常相似。 它使用相同的基础资源提供程序协定。与 EJB 2.1 MDB 一样,您可以使用任何 消息侦听器接口,您的 JCA 提供程序在 Spring 上下文中也支持。 尽管如此,Spring 还是为 JMS 提供了明确的 “便利” 支持,因为 JMS 是 与 JCA Endpoint Management 合同一起使用的最常见端点 API。 |