Я работаю над интеграцией двух приложений в одно развертывание, устаревшее приложение, основанное на 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
Проблема транзакции при смешивании JDBC/JPA с пружиной ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение