Spring Integration Atomikos交易问题

时间:2017-06-16 06:25:00

标签: java transactions spring-integration activemq atomikos

我正在尝试将Atomikos事务管理器集成到Spring Integration程序中,该程序将JMS从ActiveMQ转发到WebMethods ESB。

spring集成部分仅从本地ActiveMQ代理检索JM并将它们发送到远程ESB代理。

当我测试名义上的情况时,JMS被很好地发送并通过ESB然后被发送给订户。

当我测试ESB发送失败的情况时,我遇到了一个问题:JMS永远不会发布回来。我想这是一个交易问题,因为当程序试图在ESB代理上发布时,事务应该已经回滚但似乎没有。

这是我的春季配置:

<!--  In bridge -->
<jms:message-driven-channel-adapter
    id="StoreStockMotionSourceJmsAdapter" channel="bridgeChannelStoreStockMotionEnricher"
    container="jmsContainerSourceStoreStockMotion" />

<!--  Channel -->
<si:channel id="bridgeChannelStoreStockMotionEnricher" />

<jms:outbound-channel-adapter id="StoreStockMotionDestinationJmsAdapter"
    channel="bridgeChannelStoreStockMotionEnricher" jms-template="jmsTemplateStoreStockMotionDestination" />
<bean id="jmsTemplateStoreStockMotionDestination" class="org.springframework.jms.core.JmsTemplate">
    <property name="transactionManager" ref ="transactionManager"/>
    <property name="connectionFactory" ref="userCredentialsConnectionFactoryDestination" />
    <property name="defaultDestinationName" value="${StoreStockMotion.destination.topic}" />
    <property name="defaultDestination" ref="StoreStockMotionDestinationTopic" />
    <property name="pubSubDomain" value="true"/>
</bean>


<!-- Topic JMS for published message -->
<bean id="StoreStockMotionDestinationTopic" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
    <property name="jndiTemplate">
        <ref bean="jndiTemplateDestination" />
    </property>
    <property name="jndiName">
        <value>${StoreStockMotion.destination.topic}</value>
    </property>
</bean>

<!-- Topic JMS for Subscribing Message -->
<bean id="jmsContainerSourceStoreStockMotion"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"
    lazy-init="true">
    <property name="connectionFactory" ref="connectionFactorySource" />
    <property name="destinationName" value="${StoreStockMotion.source.topic}" />
    <property name="subscriptionDurable" value="true" />
    <!--  2 is client acknowledge -->
    <property name="sessionAcknowledgeMode" value="2" />
    <property name="durableSubscriptionName" value="${StoreStockMotion.source.subname}" />
    <property name="sessionTransacted" value="false" />
    <property name="pubSubDomain" value="true"/>

</bean>

这是集成部分:

{{1}}

Source和Destination都封装在XA连接工厂中,transactionManager处理这两个事务。知道缺少什么吗?

0 个答案:

没有答案