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

Rollback da transação

Bom dia a todos, Aonde deve ficar o "rollback" caso algo dê errado na persistência?

O método abaixo está correto?

    @AroundInvoke
    public Object executaTX(InvocationContext contexto) throws Exception {

        Object resultado = null;

        try {
            manager.getTransaction().begin();
            resultado = contexto.proceed();
            manager.getTransaction().commit();
        } catch (Exception e) {
            manager.getTransaction().rollback();
        }

        return resultado;
    }
1 resposta
solução!

Fala Osmar, tudo bem?

é no catch mesmo que vc da rollback na transação, porém e se a transação não estiver ativa, ou for null? Precisamos validar essas opções:

@AroundInvoke
public Object executaTX(InvocationContext contexto) throws Exception {

    Object resultado = null;

    try {
        transaction = manager.getTransaction();
        transaction.begin();
        resultado = contexto.proceed();
        transaction.commit();
        return resultado;
    } catch (Exception e) {
        if(transaction != null && transaction.isActive()){
            manager.getTransaction().rollback();
        }
        throw e;
    }
}

espero ter ajudado =)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software