我在Mule 3.3.2中有以下流程:
<flow name="testFlow" processingStrategy="synchronous">
<vm:inbound-endpoint
connector-ref="vmConnector"
path="in">
<vm:transaction action="ALWAYS_BEGIN"/>
</vm:inbound-endpoint>
<transactional action="ALWAYS_BEGIN">
<jdbc:outbound-endpoint
connector-ref="jdbcConnector"
queryKey="insertTest"
/>
<jdbc:outbound-endpoint
connector-ref="jdbcConnector"
queryKey="insertTest2"
/>
<rollback-exception-strategy/>
</transactional>
<vm:outbound-endpoint
connector-ref="vmConnector"
path="outErrorQueue">
<vm:transaction action="ALWAYS_JOIN"/>
</vm:outbound-endpoint>
</flow>
我想要实现的是嵌入到vm事务中的jdbc事务:事务范围内的任何异常都应该触发jdbc事务的回滚,传播到事务流的范围并触发默认的异常策略vm交易。当然,事务范围之外的任何异常都应该触发流的默认异常策略。
阅读来源,例如org.mule.transaction.TransactionCoordination
让我相信这可能有用,至少transactional
会接受ACTION_NOT_SUPPORTED
作为行动(它不会 - 我可以做到吗?)。
我得到的是
org.mule.transaction.IllegalTransactionStateException: A transaction is not available for this session, but transaction action is "Always Join"
at org.mule.execution.ValidateTransactionalStateInterceptor.execute(ValidateTransactionalStateInterceptor.java:41)
at org.mule.execution.IsolateCurrentTransactionInterceptor.execute(IsolateCurrentTransactionInterceptor.java:44)
at org.mule.execution.ExternalTransactionInterceptor.execute(ExternalTransactionInterceptor.java:52)
在vm:outbound-endpoint。
有没有其他方法可以用Mule获得我想要的东西?
答案 0 :(得分:0)
我认为VM连接器不支持嵌套事务。
我会尝试将XA用于此用例,因为XA事务可以暂停和恢复,这将发生在transactional
块的边界:
<jbossts:transaction-manager />
<flow name="testFlow" processingStrategy="synchronous">
<vm:inbound-endpoint
connector-ref="vmConnector"
path="in">
<xa-transaction action="ALWAYS_BEGIN"/>
</vm:inbound-endpoint>
<transactional action="ALWAYS_BEGIN">
<jdbc:outbound-endpoint
connector-ref="jdbcConnector"
queryKey="insertTest"
/>
<jdbc:outbound-endpoint
connector-ref="jdbcConnector"
queryKey="insertTest2"
/>
<rollback-exception-strategy/>
</transactional>
<vm:outbound-endpoint
connector-ref="vmConnector"
path="outErrorQueue">
<xa-transaction action="ALWAYS_JOIN"/>
</vm:outbound-endpoint>
</flow>