Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

hibernate.transaction.flush_before_completion

O persistence.xml do meu projeto foi copiado da web pois eu queria a opção que mostrava todos os sql's executados pela JPA.

Junto a este arquivo que copiei na web, veio a seguinte instrução:

<property name="hibernate.transaction.flush_before_completion" value="true"/>

Percebi que por causa dela meu job não estava alterando os AgendamentoEmail's depois de "enviá-los", fazendo com que a aplicação ficasse em um loop... por que isso ocorreu?

1 resposta
solução!

Deyvison, boa tarde. Fazendo umas pesquisas, acredito que pode ser pelo seguinte motivo.

A propriedade hibernate.transaction.flush_before_completion é usada para "Container Managed Transaction (CMT)" ou JTA. Se definido como verdadeiro, um flush será executado antes da fase de conclusão da transação, enviando todos os dados para o banco de dados (uma reversão ainda é possível). Esta liberação não é gerenciada pela sessão de hibernação.

Como uma característica do flush é fazer com que as operações no banco não sejam realizadas pontualmente, para sincronizar mais tardiamente, talvez pelo fato de o job ficar enviando dados a cada pouco tempo, pode ser que a transação nunca seja commitada, fazendo que ocorra esse loop.

Usei algumas fontes de pesquisa e extrair essas informações, porém não achei nada que use de fato esse cenário que você trouxe para nós. O que acha, faz sentido a minha conclusão? Qualquer coisa podemos discutir mais =)