如何正确回滚JTA事务?

sze*_*edi 5 java jpa jta java-ee

回滚容器管理的JTA事务的事务的正确方法是什么?

我理解这一点:EJBException在调用entityManager.getTransaction()时 我无法获取事务实例.我在这里阅读了一个解决方案,但我不确定这是否正确.

我也知道,如果我抛出异常,事务将被回滚.

但我的问题是:如果我想(必须)使用托管容器EntityManager,那么在其中回滚事务的正确方法是什么?

Pet*_*sik 7

Code Ranch上的asnwer是对的,你必须使用 SessionContext

@Resource
private SessionContext ctx;

//and then in method
if(fail) {
    ctx.setRollBackOnly(); 
}
Run Code Online (Sandbox Code Playgroud)

另见本文.