Oracle BPEL,为什么补偿而catch可以处理异常

时间:2014-05-19 08:26:11

标签: soa bpel soa-suite

我只是想知道在Oracle BPEL中,补偿的目的是业务回滚。但是catch可以做几乎相似的事情(除了以完全相反的顺序回滚)。我真的不明白为什么我们仍然需要赔偿?

1 个答案:

答案 0 :(得分:0)

在许多情况下,错误处理程序中的手动编码补偿即使不是不可能编写也会非常困难,并且会包含大量重复代码。

想象一下,您有以下过程:

<flow>
  <sequence>
    <invoke name="I1"/>
    <invoke name="I2"/>
  </sequence>
  <sequence>
    <invoke name="I3"/>
    <invoke name="I4"/>
  </sequence>
</flow>

如果你想进行补偿处理,你只需要为每次调用添加补偿处理程序,你就完成了。

如果您使用错误处理程序,那么您需要以某种方式检查哪些活动已被执行。想象一下I4抛出一个错误。你知道I3已经完成并且需要得到补偿。但是,您不知道I1或I2是否已经启动或完成。您需要摆弄标志作为您需要在隔离活动等上设置的变量。此外,I2,I3和I4的错误处理程序需要包含I1的补偿逻辑。使用补偿处理程序比尝试重新创建它们更清晰,更容易:)