对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
支持 JCA 消息端点
从 2.5 版开始,Spring 还提供了对基于 JCA 的支持MessageListener
容器。这JmsMessageEndpointManager
尝试
自动确定ActivationSpec
来自提供者的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
对象也可能来自 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
.
请参阅 javadocJmsMessageEndpointManager
,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 端点管理合同一起使用的最常见端点 API。 |