Java EJB3.0-事务回滚-多个嵌套方法

Java EJB3.0-事务回滚-多个嵌套方法,java,transactions,javabeans,ejb-3.0,Java,Transactions,Javabeans,Ejb 3.0,下面是我尝试做的一个例子: @Stateless(name = "TestBean", mappedName = "TestBean") @Local public class TestBean { @Resource SessionContext ctx; @EJB TestBean2 testBean2; public TestBean() { } public void doSomething() { testBean2.methodA()

下面是我尝试做的一个例子:

@Stateless(name = "TestBean", mappedName = "TestBean")
@Local
public class TestBean
{
  @Resource
  SessionContext ctx;

  @EJB
  TestBean2 testBean2;

  public TestBean()
  {
  }

  public void doSomething()
  {
    testBean2.methodA();
    boolean isSuccess = testBean2.methodB();
    if(!isSuccess)
     ctx.setRollbackOnly();
  }  
}
“TestBean2”的配置与“TestBean”相同

上面的问题是,当testBean2中的methodB失败时,methodA中所做的更改不会被回滚/还原。methodA中的更改是通过EntityManager中的persist方法完成的

现在,我知道我没有指定任何事务属性,但我已经阅读了默认事务属性通常是必需的

最后一点,我知道有很多与这些问题相关的线程,但我一直在思考它们,有很多线程。因此,如果有一个线程类似于上述情况,那么如果您能指导我,我将不胜感激

谢谢

更新:

在methodA中,在使用EntityManager进行持久化之后,我将发出一个flush语句。删除flush语句后,回滚按预期工作。我的数据源配置都在weblogic服务器上完成,其中选中了“支持全局事务”标志


显然,flush方法不应该发出commit语句。那么,为什么它真的在犯罪呢

您是否可以尝试注释setRollbackOnly代码,而不是返回false,在methodB中抛出异常?异常将由EJBException包装,容器将自动管理回滚。顺便说一句,默认事务属性是适用于您的用例的正确属性。Required意味着如果在方法调用期间已经启动了事务,那么它将在它的上下文中执行,如果没有事务已经存在,那么将启动一个新的事务。要求\u New始终启动新事务。如果在没有现有事务的情况下执行该方法,则强制带注释的方法将引发异常。如果现有事务已经存在且不受支持的方法不使用任何事务,则Supported将接受该事务。是否确定bean在事务上下文中执行?请发布数据源configuration@ptk93我试图抛出一个异常,但什么也没发生。我确信我是在事务性方法中运行的,因为在其他方法中,当整个逻辑都在方法本身中而不在其他bean/方法中时,我能够回滚。我已经对问题添加了一个更新,以帮助缩小问题的范围