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 - forEach 循环 Java 8 for Map 条目集

java - 为什么在 Linux 中调用 "Runtime.getRuntime().exec(cmd);"没有输出?

java - Hadoop java mapper -copyFromLocal 堆大小错误

c# - 如何使用oracledataadapter进行事务处理?

java - 将 spring JDBC 事务与 hibernate 事务隔离

spring-boot - @RepositoryEventHandler 事件以 @RepositoryRestController 停止

java - 查找包含在定界符中的字符串部分

java - 在 PHP 中加密时间戳并在 Java 中解密

java - @Transactional 注释未启动事务(Guice Persist)

java - BiConsumer和一个参数的方法引用