支持 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
对象设置一个 JmsMessageEndpointManager
。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://127.0.0.1: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
。
请参阅 JmsMessageEndpointManager
、JmsActivationSpecConfig
和 ResourceAdapterFactoryBean
的 javadoc 以获取更多详细信息。
Spring 还提供了一个与 JMS 无关的通用 JCA 消息端点管理器: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。 |