您好我设置了三个流来接受来自http入站端点的消息,发送到VM端点并再次发送到各种其他VM端点,同时最终发送到JMS出站端点。
我需要在这些连接器之间配置事务性,并且我在配置了<jms:transaction action="ALWAYS_JOIN" />
的JMS端点上使用xa-transaction操作。这似乎不起作用,当http入站端点上的消息进入并进入我得到的第一个VM端点时
消息:无法启动XA事务
异常堆栈是: 1.注册表中没有名为“Transaction Manager”的“javax.transaction.TransactionManager”类型的对象(java.lang.IllegalStateExcep) 荐) org.mule.transaction.XaTransaction:56(null) 2.无法启动XA事务(org.mule.api.transaction.TransactionException) org.mule.transaction.XaTransactionFactory:37(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transaction/TransactionException.html)
Root异常堆栈跟踪: java.lang.IllegalStateException:名称为“事务管理器”的类型为“javax.transaction.TransactionManager”的对象在registr中不可用 ÿ 在org.mule.transaction.XaTransaction.doBegin(XaTransaction.java:56) at org.mule.transaction.AbstractTransaction.begin(AbstractTransaction.java:65) 在org.mule.transaction.XaTransactionFactory.beginTransaction(XaTransactionFactory.java:32) + 3个以上(设置调试级别日志记录或'-Dmule.verbose.exceptions = true'用于所有内容)
我的流程定义如下。
<http:inbound-endpoint address="${test.service.proxy}"
transformer-refs="xmlToDom">
</http:inbound-endpoint>
<logger level="INFO" message="#[flow.name]: #[payload] #[message]" doc:name="Logger"/>
<vm:outbound-endpoint path="receiveMessageStage2VM">
<xa-transaction action="ALWAYS_BEGIN"/>
</vm:outbound-endpoint>
</flow>
<flow name="ReceiveMessageStage2Idempotency">
<vm:inbound-endpoint path="receiveMessageStage2VM">
<xa-transaction action="ALWAYS_JOIN"/>
</vm:inbound-endpoint>
<pooled-component>
<spring-object bean="receiveMessageIdempotentComponent"/>
<binding interface="en.test.mf.doc.components.SyncSender">
<vm:outbound-endpoint path="receiveMessageStage3VM">
<xa-transaction action="ALWAYS_JOIN"/>
</vm:outbound-endpoint>
</binding>
</pooled-component>
</flow>
<flow name="ReceiveMessageStage3Idempotency">
<vm:inbound-endpoint path="receiveEVRMessageStage3VM"
responseTransformer-refs="jmsToString">
<xa-transaction action="ALWAYS_JOIN"/>
</vm:inbound-endpoint>
<component>
<spring-object bean="zipFileMessageHandler"/>
</component>
<logger level="INFO" message="#[flow.name]: #[payload] #[message]" doc:name="Logger"/>
<outbound-endpoint ref="JMS_outbound_endpoint"
doc:name="JMS_outbound_endpoint"/>
</flow>
任何人都知道如何实现此功能?
答案 0 :(得分:0)
您需要添加事务管理器,如bitronix - https://docs.mulesoft.com/mule-user-guide/v/3.7/using-bitronix-to-manage-transactions