隐式调用TransactionImpleManager.suspend

时间:2018-11-26 08:43:56

标签: cdi jboss7.x bean-managed-transactions

我有使用BMT的bean。使用BMT的另一个bean被注入第一个。 现在,当第一个调用第二个方法时,突然关闭了事务。在我的代码中,我将其范围缩小到了方法调用之前和内部的确切位置。

这是痕迹:

  

2018-11-23 12:15:32,275 +0100 [TRACE] [com.arjuna.ats.jta](默认任务18)TransactionImple.getStatus:javax.transaction.Status.STATUS_ACTIVE

     

2018-11-23 12:15:32,276 +0100 [TRACE] [com.arjuna.ats.jta](默认任务18)TransactionImpleManager.suspend

     

2018-11-23 12:15:32,277 +0100 [TRACE] [com.arjuna.ats.jta](默认任务18)TransactionSynchronizationRegistryImple.getTransactionKey

示例代码:

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class A{
  @Inject
  private B b;
  @Inject
  private UserTransaction trx;

  public void foo(){
    trx.begin();
    //transaction is active
    b.bar();
    trx.commit();
  }
}
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class B{
  public void bar(){
    //transaction is closed
    //whatever
  }
}

发生在JBoss EAP 7.0.9上。

我在很多地方都拥有这个星座,但是只有在这里它才破裂。我缺少基本的东西吗?在哪里可以找到其他线索?

1 个答案:

答案 0 :(得分:2)

简短的回答:BMT不会使用BMT传播到其他bean。在两个bean中都不可能有跨交易代码。

(除非您通过黑客攻击JBoss TransactionManager始终获得相同的数据库事务。)