感觉无法做到事务的统一控制,为什么?

你好,想请教个问题: 

    刚才拜读了下 resty 的源码,看到关于多数据源事物控制实现的核心是如下的(TransactionAspect 类中): 


for (int i = 0; i < names.length; i++) {
          dataSourceMeta = Metadata.getDataSourceMeta(names[i]);
          dataSourceMeta.initTransaction(readonlys.length == 1 ? readonlys[0] : readonlys[i], levels.length == 1 ? levels[0] : levels[i]);
          dataSourceMetas.add(dataSourceMeta);
        }
        //执行操作
        result = ih.invoke(proxy, method, args);
        for (DataSourceMeta dsm : dataSourceMetas) {
          dsm.commitTransaction();
        }
      } catch (Throwable t) {
        for (DataSourceMeta dsm : dataSourceMetas) {
          dsm.rollbackTransaction();
        }
        String message = t.getMessage();
        Throwable cause = t.getCause();
        if (message == null) {
          if (cause != null) {
            message = cause.getMessage();
          }
        }

感觉无法做到事务的统一控制,例如第一个数据源正常提交后,第二个数据源提交事务时出现异常时,是不能够回滚第一个数据源的事务的。后经测试也证明确实无法回滚。


胡说叔叔
浏览 255回答 2
2回答

临摹微笑

理论上也不行啊,除非模式是像xa协议那样,有两段提交,要不然你不知道另一个事务是否会错误。

撒科打诨

分布式事务从来都是大难题。一般都是想办法避开,不然实现太麻烦,性能也难以保障。
打开App,查看更多内容
随时随地看视频慕课网APP