当前位置: 首页 > 知识库问答 >
问题:

Spring框架是否支持跨osgi调用传播事务上下文?

翟泰
2023-03-14

我在不同的OSGI捆绑包中使用@Transactional注释了方法。所有捆绑包都使用Spring提供的它自己的事务管理器。现在,如果我使用bundle1和bundle2的OSGI引用在bundle3中调用方法A()和方法B(),它会被单个事务覆盖吗?所以,如果方法B()失败,方法A()应该回滚吗?

捆绑1

 class ServiceA {
    @Transactional
    public void methodA() {
       ..........
    }
}

捆绑包

class ServiceB {
    @Transactional
    public void methodB() {
       ..........
    }
}

捆绑3

 class ServiceC {
    @Autowired
    Bundle1 b1;

    @Autowired
    Bundle2 b2;

    @Transactional
    public void methodC() {
           b1.methodA();
           b2.methodB();
        }
    }

共有1个答案

孙洋
2023-03-14

Spring使用本地线程来存储事务上下文。由于OSGi服务调用使用相同的线程,我认为应该传播事务。

 类似资料:
  • 我试图理解Spring事务概念。如下所示,我必须将数据插入两个不同的数据库(iSeries和DB2),但我们的iSeries版本不支持两阶段提交。要求是,只有当两个插入都成功时才应该提交事务,否则应该回滚。 如果我根据需要使用传播或REQUIRES\u NEW,我会得到错误“非法尝试使用现有的两阶段资源提交一阶段资源”。 但是如果我使用NOT_SUPPORTED或支持,它工作正常(即如果其中一个插

  • 我正在为OSGi(又名Eclipse Gemini Blueprint)工作到Spring。

  • Seata 的事务上下文由 RootContext 来管理。 应用开启一个全局事务后,RootContext 会自动绑定该事务的 XID,事务结束(提交或回滚完成),RootContext 会自动解绑 XID。 // 绑定 XID RootContext.bind(xid); // 解绑 XID String xid = RootContext.unbind(); 应用可以通过 RootCon

  • 我已经成功地在一个redis实例中使用multi和exec功能在redis中实现了(并测试了)事务操作。但是,在集群安装程序中运行的相同代码出错,出现以下异常消息。我使用spring-data-redis-1.8.1.release和jedis-2.9.0。 当前在集群模式下的spring data redis中是否支持事务(multi、exec)?如果是的话,我错过了什么?如果没有,是否有任何解

  • 所称的刀是: 我希望服务类中的方法在事务中运行,并在方法出现异常时回滚所有内容。但这不是在事务中运行的。 如果我将添加到DAO方法中,那么它看起来就像是在单独的事务中运行的。这是正确的吗?