java - 与java协调变化

标签 java transactions java-8

下面是一个演示示例

if (someList.contains(fooObject)) {
  someList.add(someObject);
  someStorage.serialize(someObject);
}

我需要执行两个协调任务:将对象 someObject 添加到 someList 并将其序列化到存储 someStorage。我希望 someListsomeStorage 有一个一致的数据:两个操作都成功或者其中一些失败,或者如果一个成功而另一个失败则回滚。如何实现?

最佳答案

这样做的一种方法是采用两阶段提交(-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/

相关文章:

java - Bluemix Java Liberty Server 应用程序启用应用程序调试灰显

java - 如何从 Date(10-Oct-2014 00 :00:00) to String in Java

java - 需要帮助将不同的纹理添加到 JOGL 中的不同对象

java - Spring hibernate 锁是否适用于不同机器上的其他线程?

transactions - Jedis/Redis 的容器管理事务

mysql - 如何在innodb中实现隐式行级锁定?

lambda - Java8 Lambda 函数应用替代语法

java - fragment 中的上下文问题(android.view.ContextThemeWrapper 无法转换为 android.app.Activity)

java - jasper grails 插件升级到 Java8 失败

java - 在 Java 中将整数流汇总为一个长变量