我在EJB应用程序中使用容器管理的事务。
我有两个无状态Java对象,分别是A类和B类。
B类在A类方法中实例化。
B类有两种方法:方法A和方法B.
方法A使用交易类型= requires_new
方法B使用交易类型=必需
这两种方法分别有2个sql插入语句。方法A和方法B有不同的sql语句。
我发现如果方法B中发生任何错误,方法A中的所有内容都是回滚。这不是我想要的。我希望方法A中的所有内容都已提交,即使方法B引发系统异常。
因此,我不认为方法A和B正在使用不同的事务运行。
我能否知道system.out.println是否有任何方法显示JTA事务是否为新的布尔值?
感谢。
以下是解释上述问题的附加伪代码段。
stateless class A{
method(){
Class b = new Class B();
b.methodA();
b.methodB():
}
}
stateless class B(){
method A(){ // There is an insert statement here.}
method B(){ // There is another insert statement here.}
//If anything happen in method B, only rollback B, don't rollback A.
}
答案 0 :(得分:0)
您在与方法A相同的事务中运行方法B.因此,方法B的失败将回滚方法A中发生的插入。
如果您不希望方法B干扰方法A,请在不同的交易中运行这两种方法。
如果您使用的是Spring,可以使用TransactionSynchronizationManager查找交易级别信息。