Quarkus Panache Reactive, почему транзакция не может быть отправлена/подписана из потока исполнителяJAVA

Программисты JAVA общаются здесь
Anonymous
Quarkus Panache Reactive, почему транзакция не может быть отправлена/подписана из потока исполнителя

Сообщение Anonymous »


Я пытаюсь использовать реактивную версию Panache вместо классической Hibernate-ORM.

Я пытаюсь обернуть свою функцию, возвращающую Uni, аннотацией @ReactiveTransactional

в моем слое ресурсов:

@GET @Produces(MediaType.APPLICATION_JSON) @Path("/транзакционный-тест") public Uni testTxnQuerySearch() { вернуть mySQLService.testTransactional(); } в классе MySQLService:

@ReactiveTransactional public Uni testTransactional() { // создание данных Uni uni1 = mySqlRepo1.doTransaction(data1); Uni uni2 = mySqlRepo2.doTransaction(data2); Uni uni3 = mySqlRepo3.doTransaction(data3); // присоединение к универу вернуться в университет .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()); } когда я вызываю API, я получаю следующее исключение:

[Exception 0] java.lang.IllegalStateException: HR000069: обнаружено использование реактивного сеанса из потока, отличного от того, который использовался для открытия реактивного сеанса — это предполагает недопустимую интеграцию; исходная тема [136]: 'vert.x-eventloop-thread-1' текущая тема [142]: 'executor-thread-1' [Исключение 1] java.lang.IllegalStateException: HR000068: этот метод следует вызывать исключительно из потока EventLoop Vert.x; в настоящее время работает в потоке «executor-thread-1» Думаю, это потому, что я добавил эту строку:

.runSubscriptionOn(Infrastructure.getDefaultWorkerPool()); Но почему это незаконно? Разве операция блокировки (например, транзакция БД) не должна выполняться с использованием рабочего пула?

Я относительно новичок в реактивном программировании и Quarkus, поэтому извините, если это очень простой вопрос

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