2013-02-22 46 views
0

我有个员额如何使用JTA使用Jax-RS发布对象数组?

ArrayList<Book>

对象到服务器的JAX-RS REST服务。

在服务器上,我遍历每个Book,将其转换成BookEntity(我使用JPA),然后坚持每本书。

如果任何BookEntity未能被保留的,我想整个POST操作失败,并在提交的ArrayList没有书的实体被持久化。我想要回滚整个操作,以便全部或全部完成。

是否仅仅使用容器管理事务(我明白你的只是你的注入实体管理器免费获得)做的伎俩?或者我需要JTA来做到这一点?我对自动完成事务管理的哪一部分有点困惑?

谢谢!

回答

1

仅仅注入一个实体管理器不会为您提供容器管理事务。这些是先决条件,以使CMT为服务:

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

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

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