如何知道Java方法是否正在使用新的JTA事务?

时间:2015-08-23 17:52:39

标签: java oracle transactions ejb jta

我在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.
 }

1 个答案:

答案 0 :(得分:0)

您在与方法A相同的事务中运行方法B.因此,方法B的失败将回滚方法A中发生的插入。

如果您不希望方法B干扰方法A,请在不同的交易中运行这两种方法。

如果您使用的是Spring,可以使用TransactionSynchronizationManager查找交易级别信息。