Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

WildFly não commita com merges consecutivos

Olá! Tudo bem?

Uma dúvida: fiz um teste aqui com merges consecutivos (exemplo: dentro de um laço de repetição, criar um objeto e fazer o merge), e percebi que o WildFly não commita enquanto o laço de repetição não termina. O problema disso é que, se o laço for muito grande, isso acaba resultado em problemas, pois o WildFly terá que reunir muitos dados para poder fazer um commit. A dúvida é: como fazer para que o WildFly faça de fato o commit com o BD a cada iteração do laço?

2 respostas

Nesse caso você teria que gerenciar as transações no banco de dados manualmente, no geral, eu diria que normalmente é uma boa ideia deixar o contêiner gerenciar suas transações.

Se quiser gerencial manualmente, dá uma olhada nesse post, vai te ajudar: https://www.alura.com.br/artigos/jta-java-transaction-api

solução!

Olá Otávio! Tudo bem? Muito obrigado pelo retorno! Acabei resolvendo de uma forma diferente:

  1. Fiz uma divisão em duas camadas, Service e DAO;
  2. O laço de repetição deixei no Service, e o método de persistência coloquei no DAO, anotando tanto service quanto DAO com @Stateless;
  3. Anotei o método que contém o laço de repetição com @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED), porque aí a transação ficou somente no DAO.

Após isso funcionou perfeitamente. A cada iteração, o objeto foi persistido no banco de dados. Tomei como referência um caso similar que foi demonstrado no curso. Eu nem estava mais lembrado, aí ao ler o artigo que você me indicou, veio o insight na minha mente. kkkkkkkkkk Abraços