1

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

4

1 回答 1

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 的补偿逻辑。使用补偿处理程序比尝试重新发明它们更清洁和更容易:)

于 2014-05-19T19:40:58.233 回答