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