【问题标题】:How to use JTA to POST an array of objects using Jax-RS?如何使用 JTA 发布使用 Jax-RS 的对象数组?
【发布时间】:2013-02-22 20:38:03
【问题描述】:

我有一个 jax-rs REST 服务,它发布一个

ArrayList<Book>

对象到服务器。

在服务器上,我遍历每本书,将其转换为 BookEntity(我正在使用 JPA),然后持久化每本书。

如果任何 BookEntity 无法持久化,我希望整个 POST 操作失败,并且提交的 ArrayList 中没有 Book 实体可以持久化。我想回滚整个操作,让它全有或全无。

仅使用容器管理事务(据我所知,您只需注入您的实体管理器即可免费获得)就可以解决问题吗?还是我需要 JTA 才能做到这一点?我对自动完成事务管理的哪一部分感到有点困惑?

谢谢!

【问题讨论】:

    标签: json rest jpa jax-rs jta


    【解决方案1】:

    仅仅注入一个实体管理器不会给你容器管理的事务。以下是为服务启用 CMT 的先决条件:

    1. 服务必须是 EJB(@Stateless、@Stateful、@MessageDriven)
    2. 服务必须定义@TransactionManagement(CONTAINER)。这是默认设置,因此可以省略整个注释
    3. 服务必须使用 JTA 实体管理器进行其 JPA 操作。

    如果满足所有先决条件,那么对于服务上的任何给定业务方法,容器将自动管理其事务。事务行为可以通过使用TransactionAttribute 注解在一个方法一个方法的基础上进行微调,但默认是每个方法的:

    • 如果不存在事务,则启动一个
    • 方法完成后,提交事务
    • 如果方法抛出异常,则回滚事务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2017-11-09
      • 2014-07-11
      • 1970-01-01
      • 2012-06-29
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多