0
假设具有EJB结构是这样的:异步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年8月22日:
另一个问题 - 如代码片段所示的全部理由的设置是为了确保在doAsynchronously()
代码可以完全完成其操作在实体上,无论在主叫方法发生异常 - 所以,如果我不是使用@Asynchronous
注释与@TransactionAttribute(REQUIRES_NEW)
我会得到相同的行为?
感谢您的确认。我知道第二种解决方案是同步的,但正如我所说的,其目的是完成某些实体操作,即使其他人由于异常而回滚,而不是必须异步运行。 –