Как выполнить операции JPA Entity Manager внутри потребительского метода Quarkus-Kafka - PullRequest
0 голосов
/ 24 октября 2019

Уважаемые, я хочу обновить свои доменные объекты в соответствии с сообщением, полученным по теме Kafka. Я использую последнюю версию Quarkus и сообщения Smallrye с Kafka. Модель Pub-sub работает со мной нормально, но в потребительском методе я не могу обновить свои сущности с помощью entityManager или HibernatePanache.

Всякий раз, когда я пытаюсь использовать код entityManager внутри сообщения потребителя, возникает исключение и обрабатываетсямолча. Вот мой потребительский код:

@Transactional
@Incoming("new-payment")
public CompletionStage<Void> updateTotalBuyers(String paymentEvent) {
        return CompletableFuture.runAsync(() -> {
            PaymentEvent event = jsonb.fromJson(paymentEvent, PaymentEvent.class);
            TypedQuery<Book> query = em.createQuery("SELECT b FROM Book b where b.isbn=:isbn", Book.class);
            query.setParameter("isbn", event.getIsbn());
            Book book = query.getSingleResult();
            book.setTotalBuyers(book.getTotalBuyers() + 1);
            em.merge(book);
        });
    }

Если у кого-нибудь есть рабочий фрагмент кода для моей проблемы, было бы здорово. Кроме того, как можно распечатать это исключение без вывода сообщений для дальнейшей отладки?

Обновление: Я окружил код блоком try / catch, и выдается следующее исключение:

javax.enterprise.context.ContextNotActiveException: интерфейс javax.enterprise.context. .runtime.RequestScopedEntityManagerHolder_ClientProxy.getOrCreateEntityManager (RequestScopedEntityManagerHolder_ClientProxy.zig: 191) в io.quarkus.hibernate.orm.runtime.entitymanager.TransactionScopedEntityManager.getEntityManager (TransactionScopedEntityManager.java:78) в io.quarkus.hibernate.orm.runtime.entitymanager.TransactionScopedEntityManager.createQuery (TransactionScopedEntityManager.java:317) при io.quarkus.hibernate.orm.runtime.entitymanager.ForwardingEntityManager.createQuery (ForwardingEntityManager.java:142) в io.quarkus.hibernate.orm.panache.runtime.JpaOperations.find (JpaOperations.java:208) в io.quarkus.hibernate.orm.panache.runtime.JpaOperations.find (JpaOperations.java:200) в организации.ibra.ebs. AsyncRun.run (CompletableFuture.java:1626) в java.util.concurrent.CompletableFuture $ AsyncRun.exec (CompletableFuture.java:1618) в java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java: java): java.concurrent. 1013 *

Я добавил аннотацию @ActivateRequestContext как для класса, так и для метода без удачи.

С уважением.

...