无状态EJB回滚JPA事务的方式

问题描述 投票:0回答:1

具有例如:

@Stateless

public class EntityRepositry{

    @Inject
    EntityManager em;

    public void create(Entity e){
       // op1 success
       // op2 failed
    }
}

由于无状态EJB在默认情况下是事务性的,因此我将理解,如果引发系统异常(如OptimisticLockedException),该事务将如何回滚? em.getTransaction()。rollback将如何隐式调用?

提前感谢。

jpa ejb java-ee-7 stateless-session
1个回答
0
投票

EntityManager注入了@PeristenceContext注释(或者您可能有CDI生产者?)

如果持久性单元被声明使用JTA事务

<persistence-unit name="myname" transaction-type="JTA">

然后,EJB事务绑定到JPA事务,反之亦然。

JPA Exceptions会回滚整个事务,但请记住,任何RuntimeException都会回滚事务,而检查异常不会。

因此,如果您使用JTA事务管理,则不必手动回滚事务,只需抛出或捕获正确的异常(捕获RuntimeException不会阻止事务回滚,但允许您对其进行管理。)>

© www.soinside.com 2019 - 2024. All rights reserved.