【问题标题】:TransactionImpleManager.suspend called implicitlyTransactionImpleManager.suspend 隐式调用
【发布时间】:2019-04-27 21:04:11
【问题描述】:

我有使用 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 上。

我在很多地方都有这个星座,但只有在这里它坏了。我错过了一些基本的东西吗?我在哪里可以找到更多线索?

【问题讨论】:

  • trxUtil 是做什么的。为什么不注入 UserTransaction?
  • 你说得对,那是不必要的混乱。更改为 UserTransaction。

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


【解决方案1】:

简答:BMT 不会使用 BMT 传播到其他 bean。根本不可能在两个 bean 中都有跨事务的代码。

(除非您破解 JBoss TransactionManager 以始终获得相同的数据库事务。)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
相关资源
最近更新 更多