Проблема с использованием ExtendedPersistenceContext и ApplicationException - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь использовать ExtendedPersistenceContext для реализации шаблона отсоединенного объекта с использованием EJB 3 и Seam.

У меня также есть механизм бизнес-правил, который обрабатывает мой объект при его слиянии на основе данных в базе данных .

Когда что-то не так в бизнес-правиле,приложение запускает исключение, помеченное

@ ApplicationException (rollback = true)

К сожалению, в соответствии с особенностями EJB и этим вопросом из SO Принудительное выполнение транзакциичтобы откатить ошибки проверки в Seam , аннотации заставляют весь объект отделяться.

Таким образом, в основном мой объект находится в том же состоянии, что и раньше (он содержит изменения, сделанные пользователем), но он не может разрешить свои отношения с помощью ExtendedPersistenceContext, поскольку он находится в состоянии Detached.

Это разрывает всю мою страницу, так как у меня есть вызовы AJAX, которые я хочу разрешать даже после сбоя Business Engine.

Я не могу снова объединить объект, иначе изменение будет распространено в БД,и я не хочу делать это, если существует ApplicationException.

Я хочу откатить транзакцию, если проверка бизнеса не удалась, но я хочу, чтобы мой объект все еще находился в постоянном состоянии, чтобы он мог разрешитьего отношения с использованием расширенного контекста постоянства.

Есть предложения?

1 Ответ

0 голосов
/ 02 июля 2011

Для отсоединения одного объекта можно использовать entityManager.detach(object), иначе можно использовать entityManager.clear() для отсоединения всех базовых объектов для EntityManager.

Вы можете клонировать объекты, чтобы сохранить внесенные изменения и предотвратить их ототкат на исключение.Изменения должны быть сделаны на клонированном объекте, а затем применить их к управляемому объекту перед сохранением.

Если объект отсоединен, необходимо выполнить entityManager.refresh(object), чтобы сделать его управляемым, а затем применить изменения клонированного объекта в соответствии с ним.

...