EJB CMT:事务回滚不回滚持久化的数据


  1. 我有一个EJB方法methodA(),它用TransactionAttribute.REQUIRES_NEW进行了注释
  2. methodA()调用在远程服务器上运行的两个EJB方法(比如methodB()、methodC())(IIOP通信)
  3. methodB()很少执行数据库插入。。方法B也用TransactionAttribute.REQUIRED进行了注释
  4. methodC()也用TransactionAttribute.REQUIRED进行了注释,我让它抛出一些运行时异常来测试事务管理
  5. 当我测试交易管理的方法A时,我注意到了以下内容

在OpenEJB日志中

  1. TX Requires_New:没有要挂起的事务。

  2. TX要求_新:已启动事务。。。gerenimo TransactionImpl。。。。

  3. 来自方法B执行的日志。。。完成。

  4. methodC抛出一些RuntimeException

  5. TX要求_新:正在回滚事务。。。

====================

尽管它说交易正在回滚。。通过方法A()保存的数据库记录仍然显示在数据库中。我希望数据库插入也应该回滚。

你能帮我了解一下可能出了什么问题吗?

问题是方法A、B和C在不同的事务上下文中运行,因此,在您的流程中有三个不同且独立的事务在隔离执行。

每个应用程序服务器都定义了一个事务上下文,该上下文由部署在同一服务器中的EJB共享。

当您调用在远程服务器中运行的EJB时,不会使用当前事务。

如果要在不同的远程服务器上共享同一事务,则必须实现分布式事务。

最新更新