Asynchronous 异步EJB方法与回滚

Asynchronous 异步EJB方法与回滚,asynchronous,jpa-2.0,java-ee-6,Asynchronous,Jpa 2.0,Java Ee 6,假设具有如下结构的EJB: @Stateless public class MyBean { @PersistenceContext private EntityManager entityManager; public void doSomething() { ... doAsynchronously(); ... entityManager.persist(someObject);

假设具有如下结构的EJB:

@Stateless
public class MyBean {
@PersistenceContext
private EntityManager entityManager;

    public void doSomething() {
        ...
        doAsynchronously();
        ...
        entityManager.persist(someObject);          
        ...
        if (...) {
            throw new RuntimeException();
        }
    }   

    public void doAsynchronously() {
        ...
        entityManager.persist(someOtherObject);
        ...
    }
}
当在同步部分抛出异常并因此回滚事务时,异步调用不受此影响,并且如果在该方法中未发生错误,则实体管理器上的操作应正确完成,这是否正确

我找到了许多关于异步bean的例子,但这两种情况下都不能与使用实体管理器相结合,所以如果有人能带我找到一个,我会很高兴的


编辑2013/08/22:


另一个问题-代码片段中显示的设置的全部原因是确保
doAsynchronously()
中的代码可以完全完成对实体的操作,无论调用方方法中是否发生异常-如果我不使用
@Asynchronous
注释,而使用
@TransactionAttribute(REQUIRES_NEW)

异步方法在另一个线程中执行,因此不会在当前事务的上下文中执行,那么我将获得相同的行为,并且还将使用另一个持久性上下文


如果目标是启动一个新事务,而不受当前事务中可能出现的错误的影响,则需要使用新的解决方案。但是简单地使用REQUIRES_NEW不会使调用异步:它将阻止当前事务,直到新事务完成,然后当前事务将恢复。

谢谢您的确认。我知道第二个解决方案是同步的,但正如我所说的,其目的是完成某些实体操作,即使其他实体操作由于异常而回滚,而不是它必须异步运行。