Пусть У меня есть CDI боб, который нуждаетсяУправляемые транзакции CDI с длинными операциями
- нагрузки некоторые JPA Entities
- ли длинные операции ввода-вывода с тем, что JPA сущностей (то есть. Веб-вызов услуги)
- Update некоторые из субъектов JPA с результатами -2-
Каков наилучший шаблон, если я хочу избежать длительной транзакции во время операций ввода-вывода? Я знаю, что я могу использовать @Transactional (Transactional.TxType.REQUIRES_NEW) в -2-, но для моего понимания транзакция, открытая в -1, будет приостановлена.
До знаю, я использовал старый JBoss 4 с не управляемым контейнером транзакциями, и я имел обыкновение делать:
- Создать EntityManager без открытия новой транзакции
- нагрузки JPA лица (не открыла ни одной сделки)
- Do операции ввода-вывода, то есть (вызов внешнего WebService)
- Открыть транзакцию, обновить JPA объекты, закройте сделку
Я знаю, что шаблон может иметь некоторое несоответствие данных, поскольку вы обновляете данные, полученные за пределами транзакции, но в некоторых случаях это может быть хорошо.
Есть ли какой-либо шаблон для имитации старой управляемой транзакции без контейнера. Если это возможно без управления отдельными экземплярами?
EDIT Ответ @Alexander Langer является хорошим вариантом для некоторых случаев. Но я также хотел бы знать альтернативу делать это без работы, если это возможно. Поскольку точка -2- (длительная операция ввода-вывода) может быть простым вызовом внешнего WS, необходимого для обслуживания запроса.
Обычно нет никаких проблем с проведением транзакции. Но если по какой-то причине внешний WS работает некорректно и требует много времени, чтобы ответить, то это большая проблема, если транзакции начнут накапливаться. На самом деле проблемой может быть простой факт, связанный с открытым доступом EntityManager без транзакции и поддерживающий соединение с базой данных из пула.
Я знаю, что есть таймауты, но в целом я хочу знать полезный шаблон, чтобы минимизировать время транзакций для простых случаев. Или знаете, если это простой анти-шаблон для EE7, если не включать пакетные задания.
Можете ли вы использовать оптимистичную блокировку? Это будет похоже на вариант JBoss, упомянутый выше, без несогласованности данных ... по цене, связанной с повторением некоторых транзакций. – Augusto