2013-02-22 38 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註釋方法的基礎上的方法,但默認是爲每個方法:

  • 如果不存在任何事務,啓動一個
  • 當方法完成後,提交事務
  • 如果該方法拋出異常,則回滾事務
相關問題