#java #jpa #transactions #osgi
#java #jpa #транзакции #osgi
Вопрос:
У меня есть проект OSGi с несколькими пакетами, содержащими классы моделей JPA, а также соответствующие persistence.xml . Все PU используют JTA в качестве типа транзакции и подключены к одной и той же базе данных (они используют один и тот же источник данных).
При манипулировании объектами я использую разные EntityManagers, и все работает нормально, пока я использую XADataSource. Сейчас я думаю, что, поскольку они используют одну и ту же базу данных и один и тот же менеджер транзакций, транзакции XA не должны быть необходимыми. Хотя, если я переключусь на простой источник данных, я начну видеть несоответствия в случае отката.
Я просмотрел спецификации, но не смог найти ничего, связанного с этим. У кого-нибудь есть указатель, требуются ли транзакции XA как часть такой настройки?
Спасибо, Филипп
Ответ №1:
Если вы используете разные единицы сохранения, то у каждого будет свое собственное подключение к базе данных. Таким образом, даже если вы используете один и тот же источник данных, они не будут использовать одну и ту же транзакцию. Поэтому я думаю, именно поэтому у вас могут возникнуть проблемы во время отката.
В jta транзакция может охватывать разные соединения, и поэтому она работает.
Комментарии:
1. Спасибо, это звучит разумно. Было бы неплохо увидеть это где-нибудь в официальных спецификациях, документированных. Всегда сложно заставить эти вещи работать в OSGi, поэтому вы никогда не знаете, связано ли это с настройкой или предполагается, что это будет работать таким образом 🙂
2. Тема jpa и jta в OSGi действительно довольно сложная (только частично из-за OSGi). Не уверен, как это улучшить, поскольку есть так много вещей, которые нужно учитывать.