【问题标题】:How does a non transactional outbound work with a transactional inbound in MuleMule 中的非事务性出站如何与事务性入站一起工作
【发布时间】:2015-03-23 09:17:47
【问题描述】:

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

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

下面这句话是什么意思,是错字吗(不再是NONE)?如果不是 NONE,那么事务操作是什么?

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

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

【问题讨论】:

    标签: transactions mule


    【解决方案1】:

    这不是错字。

    以前,它曾经是NONE,因此事务的解决独立于非事务性出站交互的结果。现在,事务没有解决,即未事务的出站端点不提交或回滚当前事务。

    发生回滚是因为抛出异常,将事务标记为回滚。当流程终止时,当前事务将被解析。如果已经标记为回滚,则回滚,否则提交。

    【讨论】:

    • 这是否意味着未交易的出站也是上例中交易的一部分?
    • “交易的一部分”是什么意思?它不能在事务中注册,因为它不是事务性的。但是当前事务在其边界处没有挂起或解决,因此如果它抛出异常,它有可能将其标记为回滚。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2012-11-22
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多