2016-10-08 2 views
1

У меня есть проект OSGi с несколькими пакетами, содержащими классы модели JPA, а также соответствующий persistence.xml. Все PU используют JTA как тип транзакции и подключены к одной базе данных (они используют один и тот же DataSource).JPA множественные единицы сохранения продолжительности и транзакция JTA

При управлении объектами я использую разные EntityManager, и все работает нормально, пока я использую XADataSource. Теперь я думаю, что, поскольку они используют одну и ту же базу данных, и такие же транзакционные транзакции XA транзакций не нужны. Хотя если я переключусь на простой DataSource, я начну видеть несоответствия в случае откатов.

Я просмотрел спецификации, но не смог найти ничего, что связано с этим. У кого-нибудь есть указатель на то, нужны ли транзакции XA как часть такой настройки?

Спасибо, Philipp

ответ

1

Если вы используете различные единицы сохраняемости, то каждый из них будет иметь свое собственное подключение к базе данных. Поэтому, даже если вы используете тот же DataSource, они не будут использовать одну и ту же транзакцию. Поэтому я думаю, именно поэтому у вас могут быть проблемы во время отката.

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

+0

Спасибо, что звучит разумно. Было бы неплохо увидеть это где-то в официальных спецификациях. Его всегда трудно заставить это работать в OSGi, чтобы вы никогда не знали, связано ли это с установкой или если она должна работать именно так :) – smigfu

+0

Тема jpa и jta в OSGi действительно довольно сложна (только отчасти из-за OSGi). Не знаете, как улучшить это, поскольку есть так много вещей, чтобы рассмотреть. –

Смежные вопросы