Olá pessoal!
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
será que algum dos colegas pode me ajudar?
Abraço!
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.
package br.com.usinaweb.secom.exception;
/**
*
* @author Rogerio Martins 17/02/2010
*/
public class LastException {
/**
* 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
*/
public Throwable findLastException(Throwable exception) {
Throwable ee = exception.getCause();
Throwable th = exception;
while ((ee != null) && ((ee = ee.getCause()) != null)) {
th = ee;
}
return th;
}
}
package br.com.usinaweb.secom.exception;
import java.sql.SQLException;
/**
* Excessões relacionadas a persistencia em bancos de dados
* @author Rogerio Martins 17/02/2010
*/
public class DatabaseException extends SQLException {
private String mensagem;
private String getMensagem() {
return mensagem;
}
private void setMensagem(String mensagem) {
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
*/
public DatabaseException(SQLException exception) {
Integer erro = exception.getErrorCode();
switch (erro) {
case 1062:
setMensagem("Tentativa de duplicidade de registos!");
break;
case 1451:
setMensagem("Erro com integridade referencial!");
break;
case 1022:
setMensagem("Tentativa de duplicidade de chave!");
break;
case 1406:
setMensagem("Erro dados longos para a coluna!");
break;
case 1408:
setMensagem("Erro Campo obrigatório não pode ser nulo!");
break;
case 1048:
setMensagem("Campo obrigatório não informado");
break;
default:
setMensagem("Erro ao persistir os dados");
break;
}
}
@Override
public String getMessage() {
return getMensagem();
}
}
chamada:
public void salvar() {
try {
bairroSession.salvar(this.getBeanBairro());
contexto.adicionaMensagemInfo("Salvo com Sucesso");
this.limpar();
} catch (EJBException ex) {
LastException lastException = new LastException();
Throwable th = lastException.findLastException(ex);
if (th instanceof SQLException) {
contexto.adicionaMensagemErro(new DatabaseException((SQLException) th).getMessage());
} else {
contexto.adicionaMensagemErro(th.getMessage());
}
} catch (Exception ex) {
contexto.adicionaMensagemErro("Erro: " + ex.getMessage());
}
}
espero que tenha ajudado…
boa solução cara!
tranquilo de entender e bem interessante
vou testar e amanhã posto o resultado aqui
Muito Obrigado mesmo!
Valeu! 