“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)