У меня есть сценарий Java SE (!) с JMS и JPA, где мне могут понадобиться распределенные транзакции, а также «обычные» транзакции JDBC. Мне нужно прослушивать очередь, которая отправляет запросы на обслуживание, сохранять журнал при получении, обрабатывать запрос и обновлять журнал после обработки запроса. Сообщение должно быть подтверждено только в том случае, если запрос был успешно обработан.
Первая идея заключалась в том, чтобы использовать только JTA (предоставляется Bitronix). Но тут я сталкиваюсь с двумя проблемами:
- журнал не будет сохраняться, если запрос не может быть обработан
- запрос не будет обработан, если журнал не может быть обновлен (маловероятно, но все же возможно)
Итак, другая идея состоит в том, чтобы создать и обновить журнал с помощью обычных транзакций JDBC. Только менеджеры сущностей для транзакций запроса будут присоединяться к транзакциям пользователя, а менеджеры сущностей для создания и обновления журнала будут фиксироваться напрямую.
Можно ли «смешивать» JTA и JPA в одном блоке персистентности? Или у нас уже есть шаблоны для таких транзакций JMS и JDBC?