下面是一个演示示例
if (someList.contains(fooObject)) {
someList.add(someObject);
someStorage.serialize(someObject);
}
我需要执行两个协调任务:将对象 someObject
添加到 someList
并将其序列化到存储 someStorage
。我希望 someList
和 someStorage
有一个一致的数据:两个操作都成功或者其中一些失败,或者如果一个成功而另一个失败则回滚。如何实现?
最佳答案
这样做的一种方法是采用两阶段提交(-ish)方法。因此,您重组了添加和序列化操作,以便执行最初可能会失败的所有中间操作。然后将中间结果存储在一个变量中。在验证两个中间结果都已生成后,提交更改。
类似的东西
if (someList.contains(fooObject)) {
boolean r1 = someList.preAdd(someObject);
boolean r2 = someStorage.preSerialize(someObject);
if ( r1 && r2 ) {
someList.commit();
someStorage.commit();
} else {
if (!r1) someList.rollback()
if (!r2) someStorage.rollback()
}
}
根据实际的接口(interface),您可能希望使用try/catch
而不是if/else
。
关于java - 与java协调变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618226/