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
[code]
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;
}
}[/code]
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