【发布时间】:2018-06-28 20:33:30
【问题描述】:
@Singelton
public Class className {
@Resource
private TransactionSynchronizationRegistry tsr;
@Resource
private Transaction
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public method_A () {
System.out.println(tsr.getTransactionStatus()); // prints 0
method_call_which_throw_persistence_exception();
System.out.println(tsr.getTransactionStatus()); // prints 1
method_B();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public method_B () {
System.out.println(tsr.getTransactionStatus()); // prints 1
}
}
注意:
- 交易状态
0 = active。 - 交易状态
1 = markedForRollback
正如我附上了上面的代码,在使用容器管理事务的 Ejb 单点 bean 中存在 2 个方法。 method_A 以 TransactionAttribute 为 REQUIRED 开始,因此 TransactionSynchronizationRegistry 在开始时将事务状态打印为 0。
在抛出运行时异常的方法调用后,事务状态自动变为1。但是当一个method_B 的事务属性为REQUIRES_NEW 被调用时,TransactionSynchronizationRegistry 仍然打印1。
据我了解,它应该开始一个新事务,并且事务状态应该在method_B 中显示为0?
【问题讨论】:
标签: java transactions ejb-3.0