Java 异步EJB3.1方法和事务

Java 异步EJB3.1方法和事务,java,jakarta-ee,ejb-3.1,Java,Jakarta Ee,Ejb 3.1,我使用@Asynchronous注释编写了一个小测试来理解EJB3.1中的异步行为。似乎: 如果该方法与调用方存在于同一个bean中 调用不再是异步的 如果异步方法中的事务被回滚,则调用方事务被标记为回滚;这可能是1的副作用 但是,如果异步方法存在于另一个bean中,则该行为是预期的,即调用是异步的,调用方事务是独立的(异步方法需要为事务提供新的行为)。这让我感到困惑,因为为什么这两种情况下的行为不一样。有人能澄清一下吗 p.S.Environment EJB 3.1,JBoss 6使用this

我使用
@Asynchronous
注释编写了一个小测试来理解EJB3.1中的异步行为。似乎:

如果该方法与调用方存在于同一个bean中

  • 调用不再是异步的
  • 如果异步方法中的事务被回滚,则调用方事务被标记为回滚;这可能是1的副作用
  • 但是,如果异步方法存在于另一个bean中,则该行为是预期的,即调用是异步的,调用方事务是独立的(异步方法需要为事务提供新的行为)。这让我感到困惑,因为为什么这两种情况下的行为不一样。有人能澄清一下吗


    p.S.Environment EJB 3.1,JBoss 6

    使用
    this
    关键字而不是使用
    SessionContext#getBusinessObject(class)
    调用方法会导致这种情况。(差异已解释)

    您是否使用
    SessionContext\getBusinessObject(class)
    而不是使用
    this
    关键字调用该方法?(区别已被解释)@stratwine几乎可以肯定问题所在,我只想把它转换成一个答案。@stratwine你是对的,请在答案中写下你的评论,这样我就可以了accept@bkail,@anergy:好了,谢谢!