Boa tarde pessoal,
Tenho uma aplicação utilizando para a camada de persistência EJB 3.0 / JPA com a implementação TopLink da Oracle.
Em um SessionBean estou utilizando o método persist do EM. Quando ocorre alguma violação de integridade, ou alguma primary key duplicada, o TopLink joga no log do AppServer uma SQLException:
[#|2007-01-22T14:13:40.773+0000|SEVERE|sun-appserver-
pe9.0|javax.enterprise.system.container.ejb|_ThreadID=15;_ThreadName
=httpWorkerThread-7022-1;_RequestID=2473c689-475a-4147-9d4c-
fc5b4b9417d4;|EJB5071: Some remote or transactional
roll back exception occurredLocal Exception Stack:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.4
(Build 060412)): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException:
Duplicate entry 'teste' for key 2Error Code: 1062
Call:INSERT INTO t12_user (T12_ID, T12_LOGIN, T12_NAME, T12_ACTIVE)
VALUES (?, ?, ?, ?)
bind => [null, teste, teste, true]
Porém, no código o método persist está em um bloco try/catch e só lança a exceção EJBException:
[#|2007-01-22T14:13:40.804+0000|INFO|sun-appserver-
pe9.0|javax.enterprise.system.container.ejb
|_ThreadID=15;_ThreadName=httpWorkerThread-7022-1;|
javax.ejb.EJBException: Transaction aborted; nested exception is:
javax.transaction.RollbackException: Transaction marked for rollback.
javax.transaction.RollbackException: Transaction marked for rollback.
Eu gostaria de pegar a SQLException com as informações do porque ocorreu o rollback. Tem como eu pegar isso ou é uma exceção interna que o TopLink lança e só da um “printStackTrace” e só da pra ver no log?