Quarkus – “Enlisted connection used without active transaction” in @Transactional service method

“Enlisted connection used without active transaction”

Relatado no Quarkus 2.11.3

Esse erro pode ser muita coisa. Porém vou compartilhar o porque passei por isso e como resolvi.

A maioria das vezes que apareceu para mim, sempre foi a mesma situação: Estava em um método transacional de banco de dados e junto a ele um processo reativo (por exemplo o envio de uma mensagem com a lib reativa); O problema é exatamente esse, aparentemente o Quarkus ainda não consegue tratar essa situação, e quando o processo reativo termina a transação já não está mais ativa.

Veja a issue: https://github.com/quarkusio/quarkus/issues/21948

Como resolver? bom, caso você não possa ou consiga transformar todo seu processo inclusive do banco em um processo reativo, basta tornar seu envio sincrono, ou seja, aguardar o retorno do envio.

emitter.send(x).toCompletableFuture().join();

Dessa forma, damos um join na thread do send. Caso você esteje trabalhando com o objeto, também podemos fazer da seguinte maneira:

Supondo que você não está usando o Emitter, esse erro pode acontecer também por conta do listening / @Incoming de um tópico. Nesse caso, podemos usar adicionar a notação @Blocking com o mesmo intuito de deixar a thread sincrona e nao reativa.

  @Incoming("my-topic")
  @Blocking
  public void incomming(ConsumerRecord<UUID, MyObject> record)

Help DEV – Analista desenvolvedor Java / Android https://helpdev.com.br/zarelli

Quarkus – “Enlisted connection used without active transaction” in @Transactional service method

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Rolar para o topo