Проблема транзакции при смешивании JDBC/JPA с пружинойJAVA

Программисты JAVA общаются здесь
Anonymous
Проблема транзакции при смешивании JDBC/JPA с пружиной

Сообщение Anonymous »

Я работаю над интеграцией двух приложений в одно развертывание, устаревшее приложение, основанное на JDBC, и новое, основанное на Hibernate. Моя проблема заключается в том, что иногда транзакции не работают, как и ожидалось, и я не уверен, что это проблема в моем коде или что -то в этом роде. Мы написали обертку для обработки коммита/отката, чтобы начать новую точки транзакции в jpatransactionmanager.getTransaction (который объявляет через Javadoc, она запустит новую транзакцию) и TransactionStatus.commit/hollback для завершения транзакции. Отладив проблему, я обнаружил, что ответственный код в DB-Driver фактически открыл транзакцию. Этот код не запускается JPatransActionManager.getTransaction . Чтобы запустить новую транзакцию, дается распространение «требуется_new». В то время как менеджер устанавливает свое внутреннее состояние в соответствии с ожидаемой «запущенной транзакцией, приостановлена, новая транзакционная стартара» это не распространяется до базового соединения. Следовательно, работа над уже открытым соединением не будет выполнена на новой транзакции.
, затем TransactionDefinition.commit/rowlback , вызывает правильное обращение с этим (предположительно), так что драйвер Firebird получает вызов Commit/Oflback. Этот вызов будет тогда неооооооокой, так как у драйвера нет открытой локальной транзакции.
Мы регистрируем DataSource и EntityManagerFactory с помощью JPatransActionManager , и мы также используем EntityManger и подключение экземпляры, зарегистрированные через менеджер. Если нам нужно создать новое соединение , мы делаем это по dataSourceutils.getConnection и связываем это соединение с TransactionSynchronizationManager .
при использовании декларативной транзакции семантики как JDBC, так и JPA часть приложения работают как ожидается.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ith-spring

Вернуться в «JAVA»