TransactionImpleManager.suspend 隐式调用
TransactionImpleManager.suspend called implicitly
我一直在使用 BMT。使用 BMT 的另一个 bean 被注入到第一个 bean 中。
现在,当第一个调用第二个的方法时,事务突然关闭。在我的代码中,我将其缩小到方法调用之前和方法调用内部的确切位置。
这是痕迹:
2018-11-23 12:15:32,275 +0100 [TRACE] [com.arjuna.ats.jta] (default task-18) TransactionImple.getStatus: javax.transaction.Status.STATUS_ACTIVE
2018-11-23 12:15:32,276 +0100 [TRACE] [com.arjuna.ats.jta] (default task-18) TransactionImpleManager.suspend
2018-11-23 12:15:32,277 +0100 [TRACE] [com.arjuna.ats.jta] (default task-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.
我在很多地方都有这个星座,但只有在这里它坏了。我错过了一些基本的东西吗?我在哪里可以找到更多线索?
简短回答:BMT 不会传播到使用 BMT 的其他 bean。根本不可能在两个 bean 中都有事务跨越代码。
(除非您破解 JBoss TransactionManager 以始终获得相同的数据库事务。)
我一直在使用 BMT。使用 BMT 的另一个 bean 被注入到第一个 bean 中。 现在,当第一个调用第二个的方法时,事务突然关闭。在我的代码中,我将其缩小到方法调用之前和方法调用内部的确切位置。
这是痕迹:
2018-11-23 12:15:32,275 +0100 [TRACE] [com.arjuna.ats.jta] (default task-18) TransactionImple.getStatus: javax.transaction.Status.STATUS_ACTIVE
2018-11-23 12:15:32,276 +0100 [TRACE] [com.arjuna.ats.jta] (default task-18) TransactionImpleManager.suspend
2018-11-23 12:15:32,277 +0100 [TRACE] [com.arjuna.ats.jta] (default task-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.
我在很多地方都有这个星座,但只有在这里它坏了。我错过了一些基本的东西吗?我在哪里可以找到更多线索?
简短回答:BMT 不会传播到使用 BMT 的其他 bean。根本不可能在两个 bean 中都有事务跨越代码。
(除非您破解 JBoss TransactionManager 以始终获得相同的数据库事务。)