tenho pesquisado algumas coisas a respeito de exceptions no JPA
mas pelo que vi, não encontrei muita informação,
gostaria de saber se tem algum padrão a seguir ou algo assim,
tenho uma aplicação em que uso exception’s checked,
mas gostaria de trata elas mesmo assim, mostrando ao usuario a causa da exceção
e também tratar-las conforme a causa
boa noite, primeiramente recomendo a você ir entrando nas excessões ate chegar na ultima.
a mesma sera uma sqlexception eu trabalho com mysql e consigo recuperar o erro do banco e retornar uma mensagem amigavel segue minhas classes.
packagebr.com.usinaweb.secom.exception;/** * * @author Rogerio Martins 17/02/2010 */publicclassLastException{/** * Percorrer a hierarquia da exception encontrada e retorna a ultima ramificação * que é a causa da exception * @param exception Exception a ser percorrida * @return Exception encontrada no final da ramificação */publicThrowablefindLastException(Throwableexception){Throwableee=exception.getCause();Throwableth=exception;while((ee!=null)&&((ee=ee.getCause())!=null)){th=ee;}returnth;}}
packagebr.com.usinaweb.secom.exception;importjava.sql.SQLException;/** * Excessões relacionadas a persistencia em bancos de dados * @author Rogerio Martins 17/02/2010 */publicclassDatabaseExceptionextendsSQLException{privateStringmensagem;privateStringgetMensagem(){returnmensagem;}privatevoidsetMensagem(Stringmensagem){this.mensagem=mensagem;}/** * Método responsável por receber a exceção e informar a mensagem de erro do banco * @param exception contendo o erro do banco */publicDatabaseException(SQLExceptionexception){Integererro=exception.getErrorCode();switch(erro){case1062:setMensagem("Tentativa de duplicidade de registos!");break;case1451:setMensagem("Erro com integridade referencial!");break;case1022:setMensagem("Tentativa de duplicidade de chave!");break;case1406:setMensagem("Erro dados longos para a coluna!");break;case1408:setMensagem("Erro Campo obrigatório não pode ser nulo!");break;case1048:setMensagem("Campo obrigatório não informado");break;default:setMensagem("Erro ao persistir os dados");break;}}@OverridepublicStringgetMessage(){returngetMensagem();}}
chamada:
publicvoidsalvar(){try{bairroSession.salvar(this.getBeanBairro());contexto.adicionaMensagemInfo("Salvo com Sucesso");this.limpar();}catch(EJBExceptionex){LastExceptionlastException=newLastException();Throwableth=lastException.findLastException(ex);if(thinstanceofSQLException){contexto.adicionaMensagemErro(newDatabaseException((SQLException)th).getMessage());}else{contexto.adicionaMensagemErro(th.getMessage());}}catch(Exceptionex){contexto.adicionaMensagemErro("Erro: "+ex.getMessage());}}