此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
支持 JCA 消息端点
从版本 2.5 开始, Spring 还提供了对基于 JCA 的容器的支持。尝试
从提供程序的类名中自动确定类名。因此,通常可以提供
Spring 的 generic ,如下例所示:MessageListener
JmsMessageEndpointManager
ActivationSpec
ResourceAdapter
JmsActivationSpecConfig
-
Java
-
Kotlin
-
Xml
@Bean
public JmsMessageEndpointManager jmsMessageEndpointManager(ResourceAdapter resourceAdapter,
MessageListener myMessageListener) {
JmsActivationSpecConfig specConfig = new JmsActivationSpecConfig();
specConfig.setDestinationName("myQueue");
JmsMessageEndpointManager endpointManager = new JmsMessageEndpointManager();
endpointManager.setResourceAdapter(resourceAdapter);
endpointManager.setActivationSpecConfig(specConfig);
endpointManager.setMessageListener(myMessageListener);
return endpointManager;
}
@Bean
fun jmsMessageEndpointManager(
resourceAdapter: ResourceAdapter, myMessageListener: MessageListener) = JmsMessageEndpointManager().apply {
setResourceAdapter(resourceAdapter)
activationSpecConfig = JmsActivationSpecConfig().apply {
destinationName = "myQueue"
}
messageListener = myMessageListener
}
<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 查找
(使用 )。以下示例显示了如何执行此操作:JmsMessageEndpointManager
ActivationSpec
ActivationSpec
<jee:jndi-lookup>
-
Java
-
Kotlin
-
Xml
@Bean
JmsMessageEndpointManager jmsMessageEndpointManager(ResourceAdapter resourceAdapter,
MessageListener myMessageListener) {
ActiveMQActivationSpec spec = new ActiveMQActivationSpec();
spec.setDestination("myQueue");
spec.setDestinationType("jakarta.jms.Queue");
JmsMessageEndpointManager endpointManager = new JmsMessageEndpointManager();
endpointManager.setResourceAdapter(resourceAdapter);
endpointManager.setActivationSpec(spec);
endpointManager.setMessageListener(myMessageListener);
return endpointManager;
}
@Bean
fun jmsMessageEndpointManager(
resourceAdapter: ResourceAdapter, myMessageListener: MessageListener) = JmsMessageEndpointManager().apply {
setResourceAdapter(resourceAdapter)
activationSpec = ActiveMQActivationSpec().apply {
destination = "myQueue"
destinationType = "jakarta.jms.Queue"
}
messageListener = myMessageListener
}
<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>
参见JmsMessageEndpointManager
的 javadoc,JmsActivationSpecConfig,
和
ResourceAdapterFactoryBean
了解更多详细信息。
Spring 还提供了一个不绑定到 JMS 的通用 JCA 消息端点管理器: 。此组件允许
使用任何消息侦听器类型(例如 JMS )和任何
提供程序特定的对象。请参阅 JCA 提供商的文档,以便
了解连接器的实际功能,并参阅GenericMessageEndpointManager
javadoc以了解特定于 Spring 的配置详细信息。org.springframework.jca.endpoint.GenericMessageEndpointManager
MessageListener
ActivationSpec
基于 JCA 的消息端点管理与 EJB 2.1 消息驱动的 Bean 非常相似。 它使用相同的基础资源提供程序协定。与 EJB 2.1 MDB 一样,您可以使用任何 消息侦听器接口,您的 JCA 提供程序在 Spring 上下文中也支持。 尽管如此,Spring 还是为 JMS 提供了明确的 “便利” 支持,因为 JMS 是 与 JCA Endpoint Management 合同一起使用的最常见端点 API。 |