【问题标题】:How Stateless EJB rollback JPA transactions无状态 EJB 如何回滚 JPA 事务
【发布时间】:2020-10-02 12:07:07
【问题描述】:

例如:

@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】:

EntityManager 被注入@PeristenceContext 注解(或者你可能有一个 CDI 生产者?)

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 2012-02-12
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2010-12-14
    • 2014-06-30
    相关资源
    最近更新 更多