非事务性出站如何与Mule中的事务入站一起工作

时间:2015-03-23 09:17:48

标签: transactions mule

transaction management主题下的Mule文档中,有一段神秘的段落

  

Mule可以管理非事务性出站连接器。默认情况下,来自非事务性传输的出站连接器会忽略活动事务而不是拒绝它。换句话说,此类连接器的默认事务操作不再是NONE。下面的示例代码说明了此行为。 Mule以同步和事务方式处理从VM队列接收的消息。代码示例中的文件传输不是事务性的,因此写入文件不是事务的一部分。但是,如果消息在Mule创建文件时抛出异常,则Mule回滚事务并重新处理该消息。这个例子实际上是一个多资源事务。

下面的句子是什么意思,它是一个错字(不再是无)?如果它不是NONE那么交易行为是什么?

  

换句话说,此类连接器的默认事务操作不再是NONE

此外,如果写入文件不是事务的一部分,那么如果文件写入失败,如何回滚事务?

2 个答案:

答案 0 :(得分:1)

这不是一个错字。

以前,它曾经是NONE,因此事务已经解决,与非事务性出站交互的结果无关。如今,事务未得到解决,即非事务处理的出站端点不提交或回滚当前事务。

发生回滚是因为抛出了异常,将事务标记为要回滚。当流程终止时,然后解决当前事务。如果已将其标记为回滚,则会回滚,否则将被提交。

答案 1 :(得分:1)

上面的文字解释了“Last Resource Gambit”事务类型,其中除了一个资源之外的所有资源都是事务性的。在这种情况下,none事务资源应该是最后一个,当它抛出异常时,所有其他事务资源都将回滚。 这是一种虚构的交易行为,非常有效。

以下链接的“XA和Last Resource Gambit”部分中的更多信息: http://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html