Уважаемые, я хочу обновить свои доменные объекты в соответствии с сообщением, полученным по теме 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
как для класса, так и для метода без удачи.
С уважением.