Никакая активная транзакция после перехода с Java 8 на 11, Spring 4.3.30 на 5.1.20 и Hibernate 5.2.13 на 5.4.33JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Никакая активная транзакция после перехода с Java 8 на 11, Spring 4.3.30 на 5.1.20 и Hibernate 5.2.13 на 5.4.33

Сообщение Anonymous »

Я недавно перенес веб-приложение на основе Java и столкнулся с проблемами транзакций после следующих обновлений:
  • Java: с 8 на 11
  • Весна: с 4.3.30.RELEASE до 5.1.20.RELEASE
  • Спящий режим: с 5.2.13.Final до 5.4.33.Final
После миграции некоторые методы службы, помеченные @Transactional, больше не запускают транзакции, что приводит к следующей ошибке:

Код: Выделить всё

org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:403)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:256)
Вот пример метода службы, которому не удается инициировать транзакцию:
Java

Код: Выделить всё

@Service
public class TicketServiceImpl {

public TicketServiceImplV2() {
System.out.println("TicketServiceImplV2 instantiated: " + this);
}

@Autowired
private TicketUpdatePersistence ticketPersistence;

@Transactional
public void createTicketUpdate(TicketUpdate update) {
Ticket ticket = ticketPersistence.findById(update.getTicket().getId())
.orElseThrow(() -> new EntityNotFoundException("Ticket not found"));

System.out.println("Transaction active: " + TransactionSynchronizationManager.isActualTransactionActive());

Ticket lockedTicket = ticketPersistence.findOneForUpdate(ticket.getId())
.orElseThrow(() -> new BadRequestException("No ticket found for update"));
}
}
Проблема:

Код: Выделить всё

TransactionSynchronizationManager.isActualTransactionActive()
возвращает false, и при попытке обновить билет в базе данных выдается исключение TransactionRequiredException. В некоторых других службах у меня есть TransactionSynchronizationManager.isActualTransactionActive() как true
Что я пробовал:
Конфигурация транзакции: есть только один журнал «TicketServiceImplV2 создан», поэтому это говорит о том, что экземпляр вашей службы создается только в одном контексте (вероятно, в основном контексте), а не в обоих контекстах.
Я проверил, что менеджер транзакций настроен правильно:
XML Публичный метод: метод является общедоступным, и к нему корректно применяется @Transactional.
Нет самостоятельных действий. вызов: я гарантировал отсутствие самовызова метода @Transactional, поскольку он вызывается извне.
Механизм блокировки: уровень сохраняемости использует пессимистическую блокировку метод findOneForUpdate:
Java

Код: Выделить всё

@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("SELECT t FROM Ticket t WHERE t.id = :id")
Ticket findOneForUpdate(@Param("id") String ticketId);
Мой файл конфигурации db.xml

Код: Выделить всё









































com.quicktech.quicktech.common.model













Моя общая конфигурация XML Spring quicktech-servlet.xml Мои вопросы:
  • Что может быть причиной того, что транзакции не активируются после перехода с Spring 4.3 на 5.1 и Hibernate С 5.2 по 5.4?
  • Есть ли какие-либо известные изменения в Spring 5 или Hibernate 5.4, которые могут повлиять на поведение управления транзакциями?
  • Может ли эта проблема быть связана переходу с Java 8 на Java 11, и если да, то как мне решить эту проблему?
Дополнительная информация:
  • База данных: PostgreSQL 12
  • Весенняя версия: 5.1.20.RELEASE
  • Версия Hibernate: 5.4.33 .Окончательная
  • Версия Java: 11.0.24
  • Сервер приложений: Apache Tomcat 9.0.55


Подробнее здесь: https://stackoverflow.com/questions/790 ... -to-5-1-20
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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