Por que é um RollBackException?

2 respostas
thimor

Olá Senhores,

Gostaria de saber se algum dos senhores pode me dizer o porque desde método está disparando RollBackException

public void excluir(T object) {
        EntityTransaction et = getEntityManager().getTransaction();
        try {
            et.begin();
            object = getEntityManager().merge(object);
            getEntityManager().remove(object);
            et.commit();
        } catch (DatabaseException dex) {
            System.out.println("DataBaseException: " + dex.getMessage());
            throw dex;
        } catch (TopLinkException tex) {
            System.out.println("TopLinkException: " + tex.getMessage());
            throw tex;
        } catch (RollbackException rollex) {
            System.out.println("TopLinkException: " + rollex.getMessage());
            try {
                et.rollback();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            throw rollex;
        }
    }

A mensagem da exceção é: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row

Tentei todo tipo de tratamento de exceção ate descobrir que era uma rollbackexception, que não tem nada haver com a mensagem, entao coloquei no catch e se eu tentar executar um et.rollback(); me retorna a mensagem: java.lang.IllegalStateException: Exception Description: No transaction is currently active.

Ou Seja, por que essa exceção RollBackException, se não existe se quer a transação ativa? alguem sabe o motivo?

2 Respostas

danielbussade

Acredito que a exceção não seja RollBackException e sim DatabaseException por uma violção de chave estrangeira. Tente fazer o seguinte remova todos os try-catchs e deixe apenas um, logo depois use o Apache ExceptionUtils e utilize o metodo rootCause, para mostrar a exceção principal.

Aqui está o javadoc caso queira dar uma olhada http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/exception/ExceptionUtils.html

thimor

danielbussade:
Acredito que a exceção não seja RollBackException e sim DatabaseException por uma violção de chave estrangeira. Tente fazer o seguinte remova todos os try-catchs e deixe apenas um, logo depois use o Apache ExceptionUtils e utilize o metodo rootCause, para mostrar a exceção principal.

Aqui está o javadoc caso queira dar uma olhada http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/exception/ExceptionUtils.html

Blz Daniel,

Eu fiz o seguinte… coloquei na primeira excecao um

Class c = ex.getClass();
c.getName();

e ele me retornou: javax.persistence.RollbackException

vou dar uma olhada no que voce me passou.

Criado 10 de novembro de 2009
Ultima resposta 10 de nov. de 2009
Respostas 2
Participantes 2