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

时间:2013-06-22 18:31:49

标签: transactions ejb datasource rollback

  1. 我有一个EJB方法methodA(),它用TransactionAttribute.REQUIRES_NEW注释。
  2. methodA()调用在远程服务器上运行的两个EJB方法(比如说methodB(),methodC())(IIOP通信)
  3. methodB()执行少量数据库插入..方法B也使用TransactionAttribute.REQUIRED进行注释
  4. methodC(),它也使用TransactionAttribute.REQUIRED进行注释,并且我正在为测试事务管理抛出一些运行时异常。
  5. 当我测试方法A进行事务管理时,我注意到以下内容..
  6. 在OpenEJB日志中,

    1. TX Requires_New:暂停没有交易。

    2. TX Requires_New:已启动交易... gerenimo TransactionImpl ....

    3. 来自methodB执行的日志......完成。

    4. methodC抛出一些RuntimeException

    5. TX Requires_New:回滚交易......

    6. ============

      即使它说正在回滚事务..通过methodA()保存的数据库记录仍然出现在数据库中。我希望数据库插入也应该回滚。

      你能帮我理解可能出现的问题吗?

1 个答案:

答案 0 :(得分:0)

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

每个appserver定义一个事务上下文,它由部署在同一服务器中的EJB共享。

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

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