Как перехватить исключения из фиксации транзакции, управляемой контейнером? - PullRequest
5 голосов
/ 16 сентября 2010

У меня есть @Stateless EJB с интерфейсом @WebService, использующим транзакции, управляемые контейнером, то есть транзакции автоматически фиксируются контейнером после вызова метода, если он не вызывает системное исключение.

Если я попытаюсь EntityManager.persist(...) два объекта с одинаковым значением для столбца с уникальным ограничением на нем, контейнер выдаст PersistenceException клиенту при фиксации за пределами моего кода. Как мне перехватить это исключение, чтобы я мог перебросить свое собственное исключение приложения?

Нужно ли мне фиксировать транзакцию вручную в моих методах, чтобы перехватывать исключения при коммите?(И является ли EntityManager.flush() правильным способом сделать это?) Если так, то какой смысл иметь транзакции, управляемые контейнером?

1 Ответ

4 голосов
/ 27 октября 2010

К сожалению, невозможно отловить исключения из-за сбоя транзакции, управляемой контейнером.Как вы заявили, ваш лучший вариант - использовать управляемые бином транзакции.В качестве альтернативы вы можете обернуть свой EM EJB прокси-компонентом, который реализует тот же интерфейс.Управляемые контейнером транзакции подходят, когда вашему коду не нужно реагировать на конкретные сбои фиксации.

...