Salve Gujeiros.
Estou com algumas dúvidas com relação ao lançamento de exception para exibição de mensagens ao usuário... espero que possam me ajudar :)
public class ComumLogic {
public String salvaEntidade(Object obj) throws EntityExistsException, Exception{
logger.log(Level.DEBUG, "salvando obj: " + obj);
String ret = "nok";
try{
em.persist(obj);
ret = "ok";
}
catch(EntityExistsException e){
throw new EntityExistsException("O objeto já existe.", e);
}
catch(Exception e){
throw new Exception("Erro ao persistir objeto.", e);
}
return ret;
}
public String alteraEntidade(Object obj) throws Exception{
logger.log(Level.DEBUG, "alterando obj: " + obj);
String ret = "nok";
try{
em.merge(obj);
ret = "ok";
}
catch(Exception e){
throw new Exception("Erro ao alterar objeto.", e);
}
return ret;
}
public String excluiEntidade(Object id) throws RollbackException, Exception{
String ret = "nok";
if(logger.isDebugEnabled())
logger.log(Level.DEBUG, "excluindo obj: " + ReflectionTools.showAllAttributes(id));
try{
id = em.merge(id);
em.remove(id);
em.getTransaction().commit();
ret = "ok";
}
catch(RollbackException e){
String message = "Erro ao excluir objeto";
if (e.getCause() instanceof ConstraintViolationException)
message = "A exclusão do objeto viola restrição de chave estrangeira.";
throw new RollbackException(message, e);
}
catch(Exception e){
throw new Exception("Erro ao excluir objeto.", e);
}
return ret;
}
}
A intenção seria que caso ocorra um Exception, essa Exception seja lançada até a classe Controller, que seria responsável por exibir a mensagem da Exception ao usuário e fazer o log...
Por exemplo: No caso de tentar excluir um objeto que é referenciado como chave estrangeira em outra Entidade, seria lançada uma ConstraintViolationException e este erro deveria ser informado ao usuário.
Seria uma boa prática ao invés de lançar vários tipos de Exceptions (ConstraintViolationException, EntityExistsdException) lançar apenas Exception?
Ex.public String excluiEntidade(Object id) throws Exception{
String ret = "nok";
if(logger.isDebugEnabled())
logger.log(Level.DEBUG, "excluindo obj: " + ReflectionTools.showAllAttributes(id));
try{
id = em.merge(id);
em.remove(id);
em.getTransaction().commit();
ret = "ok";
}
catch(RollbackException e){
String message = "Erro ao excluir objeto";
if (e.getCause() instanceof ConstraintViolationException)
message = "A exclusão do objeto viola restrição de chave estrangeira.";
throw new RollbackException(message, e);
}
catch(Exception e){
throw new Exception("Erro ao excluir objeto.", e);
}
return ret;
}
Esta seria a melhor maneira de tratar a exception e exibir o erro ao usuário?
Quem puder ajudar... agradeço!
[]'s

