2013-02-22 1 views
0

У меня есть JAX-RS REST службы, публикующие Н.Как использовать JTA для POST массива объектов с использованием Jax-RS?

ArrayList<Book>

объектов на сервер.

На сервере я просматриваю каждую книгу, конвертирую ее в BookEntity (я использую JPA), а затем сохраняю каждую книгу.

Если какой-либо BookEntity не может быть сохранен, я бы хотел, чтобы вся операция POST завершилась неудачно, и никакие объекты книги в этом переданном массиве ArrayList не были сохранены. Я хочу отменить всю операцию, чтобы все было или ничего.

Выполняет ли только трюк с использованием управляемых транзакциями транзакций (которые, как я понимаю, вы получаете бесплатно, просто вставляя свой диспетчер сущностей)? Или мне нужна JTA для этого? Я немного смущен о том, какая часть управления транзакциями выполняется автоматически?

Спасибо!

ответ

1

Простое внедрение менеджера объектов не дает вам транзакций, управляемых контейнером. Это предпосылки для включения CMT для службы:

  1. служба должна быть EJB (@Stateless, @Stateful, @MessageDriven)
  2. служба должна определить @TransactionManagement(CONTAINER). Это значение по умолчанию и как таковое, вся аннотация может быть опущена
  3. Служба должна использовать диспетчер объектов JTA для своих операций JPA.

Если все необходимые условия выполнены, то для любого бизнес-метода в сервисе контейнер автоматически будет управлять своей транзакцией. Поведение транзакции может быть доработано по методу по методе основе посредством использования TransactionAttribute аннотации, но по умолчанию является то, что для каждого метода:

  • Если сделки не существует, то начать один
  • Когда метод завершается, совершить сделку
  • Если исключение выбрано методом, откат транзакции