Não estou conseguindo pegar a exceção que dá na persistência/TopLink que vem do meu DAO.
Código no DAO:
public boolean inserir(T obj) throws Exception {
Vendedor item = (Vendedor) obj;
EntityTransaction transacao = this.gerenciador.getTransaction();
transacao.begin();
try {
this.gerenciador.persist(item);
transacao.commit();
return true;
} catch (Exception ex) {
transacao.rollback(); // essa é a linha 33 no DAO
// quero pegar no View a exceção gerada aqui
return false;
}
}
Código no View:
try {
salvo = new VendedorDAO().inserir(vendedor); // linha 468
} catch (Exception ex) {
Logger.getLogger(VendedorUI.class.getName()).log(Level.SEVERE, null, ex);
Lib.Warning(frame, "Erro ao salvar", Lib.getStackTrace(ex), 1);
}
Exception disparada no DAO:
[TopLink Warning]: 2009.12.17 11:47:09.968--UnitOfWork(17957281)--Local Exception Stack:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Duplicate key or integrity constraint violation message from server: "Duplicate entry '115.393.028-57' for key 'CPF'"
Error Code: 1062
Call: INSERT INTO VENDEDOR (CALCULAR_SOBRE_VALOR_FRETE, OBSERVACAO, TELEFONE, LOGRADOURO, CPF, NUMERO, PERCENTUAL_COMISSAO, BAIRRO, NOME, CIDADE, RG, ESTADO, EMAIL, COMPLEMENTO, INCLUIR_TAXAS, CEP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [true, , , , 115.393.028-57, 0, 3.0, , JOSÉ DA SILVA, , , SP, , null, true, ]
Query: InsertObjectQuery([ Cadastro de Vendedor ])
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:311)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:654)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:703)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:492)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:690)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:214)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:346)
at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:191)
at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:205)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:564)
at oracle.toplink.essentials.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:89)
...
Exception mostrada no View:
java.lang.IllegalStateException:
Exception Description: No transaction is currently active
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.rollback(EntityTransactionImpl.java:140)
at horus.dao.VendedorDAO.inserir(VendedorDAO.java:33)
at horus.ui.VendedorUI.setSalvar(VendedorUI.java:468)
at horus.ui.VendedorUI.btnSalvarActionPerformed(VendedorUI.java:362)
at horus.ui.VendedorUI.access$200(VendedorUI.java:30)
at horus.ui.VendedorUI$3.actionPerformed(VendedorUI.java:189)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
...
Eu sei que esse forum é um pouco “lento” mas será que alguém tem alguma dica?