Acho que não estou conseguindo passar corretamente o meu problema…Vou tentar dessa forma
Tenho 3 camadas em minha aplicação Delegate, BO, DAO
No delegate tenho um método parecido com o abaixo no qual faz uma chamada para a camada BO que faz uma chamada para o DAO,
ESTOU FORÇANDO um dado na tela para dar erro quando inserir um valor invalido no campo da tela, quando faço isso da um erro no meu método do DAO (ESTA CORRETO) e entra no meu catch, o que quero e que isso acontece quando eu ter o retorno no meu método no delegate (QUE E A 1° CHAMADA DEPOIS DA TELA QUE O USUÁRIO COLOCA AS INFORMAÇÕES) e dentro do catch eu uso o FacesMessage do JSF para mostrar na tela a msg para o usuário no caso do erro
Método na camada do DELEGATE
public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
boolean retorno = false;
try {
retorno = salvarObjetoBO.salvar(objeto);
if(retorno == true){
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Valores Salvo com Sucesso", "Valores Salvo com Sucesso");
context.addMessage("", message);
}else{
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao Inserir os valores", "Ocorreu um erro ao Inserir os valores");
context.addMessage("", message);
}
} catch (Exception e) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao Inserir os valores", "Ocorreu um erro ao Inserir os valores");
context.addMessage("", message);
e.printStackTrace();
}
return "retornaParaTela";
}
Método na camada do BO
public boolean salvar(Objeto objeto){
boolean retorno = false;
try {
retorno = meuDAO.save(objeto);
} catch (Exception e) {
e.printStackTrace();
}
return retorno;
}
Método na camada do DAO
Fiz uma alteração no meu método do DAO alterando o tipo dele para um boolean, com isso lá no meu DELEGATE faço uma verificação para saber se inseriu as informações com sucesso ou não ai da certo o que eu quero Mas no caso de erro não entra no catch no meu delegate (sei que deu erro devido o retorno de false da minha variável no meu metodo do DAO)
public boolean save(T obj) {
//Le as configurações de Banco configurada no persistence.xml
EntityManager em = new UtilFactoryDAO().getEntityManager();
try {
//Abre a transação
em.getTransaction().begin();
// em.merge(object);
//persiste o objeto
em.persist(obj);
//comita a transação
em.getTransaction().commit();
em.flush();
//Fecha p entity manager
em.close();
return true;
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}