Dúvida projeto web

6 respostas
robinsonbsilva

Bom dia a todos(as)!

Gostaria de uma ajuda, estou iniciando um projeto, onde serão adotados as seguitens tecnologias:
JSF 2, Primefaces, Tomcat 7, PostgreSQL, Hibernate.

Bom, eu gostaria de saber qual a forma mais “correta” de se tratar erros de aplicação e exibir informações do mesmo.
A aplicação tem os seguintes packages:

.controller
.dao
.entity
.exception
.helper

Com base nisso, imaginem um erro de conexão com o BD, seria elegante eu transportar esse erro até as classes de controller para exibi-los ao usuário?

Desde já agradeço a atenção, e estou aberto para qualquer sugestão, estrutural, arquitetural…etc…

6 Respostas

FernandoFranzini

Um bom tratamento de exception funciona assim:

  • Cada camada logica da sua aplicação deve isolar/encasular/esconder os erros internos ocorridos, enviando uma exception padrão da camada.
  • Quando um situação ruim acontecer dentro da camada, ela não pode expor detalhes internos para as outras camadas.

Falando agora especificamente da camada de persistência que vc comentou…quando algum erro de acesso ao mecanismos de persistência acontecer(erro de sql, xml, socket, ldap, nosql, file etc…), sua camada deve tratar isso, enviando uma exception padrão da aplicação que apresente uma mensagem uniforme do tipo “Não possível fazer tal operação, entre em contato com administrador tal”. Dessa maneira vc consegue polimofircamente intercambiar tipos de camadas diferentes (manunteção) sem afetar o resto da aplicação.

robinsonbsilva

Bom Fernando,

Muito obrigado pela explicação. Infelizmente eu tinha o habito de “exibir qualquer exception” para o usuário, e isso não é legal.

FernandoFranzini

robinsonbsilva:
Bom Fernando,
Muito obrigado pela explicação. Infelizmente eu tinha o habito de “exibir qualquer exception” para o usuário, e isso não é legal.

Pois é…isso esta errado…o que um usuário da aplicação pode fazer com uma mensagem de erro de SQL? Nada ! Isso só abre uma “brecha de segurança” aonde a aplicação pode expor o tipo de mecanismo persistido e informações de estruturas internas…etc…
Por isso, Segue um regra de bolo…
Cria uma exception proprietária para cada camada sua…por exemplos no meus projetos existem:

  • DataException - encasula todos os erros ocorridos dentro da camada de persistência, escondendo dentro dela tudo oq acontece.
    Por exemplo…
    1)quando algum programador da minha equipe faz um SQL errado, automaticamente essa exception envia uma mensagem padrão para o usuario final “Ocorreu um erro não esperado no acesso , favor entrar em contato com blabla”
  1. Quando um usuário quer usa uma conexão no pool e não existe mais nenhuma disponível, essa exception envia uma mensagem padrão para o usuario final “Sistema momentaneamente ocupado, aguarde alguns minutos e tente novamente” ja enviando um email, ou notificando o JEE Server Administrator do caso…
  2. e por ai vai…
  • BussinesException - encasula todos os erros ocorridos dentro da camada de negocio, escondendo dentro dela tudo oq acontece.
    Apresenta os erros - campos obrigatórios, inconsistências, erros de venda no feriados, etc etc…

E por ai vai…
Lembrando que as exception no java são classes justamente para que vc possa implementar seus casos de erros com atributos e comportamentos.

FernandoFranzini

Estude isso aqui http://www.javaworld.com/javaworld/jw-08-2001/jw-0803-exceptions.html?
Tem tudo e muito mais do que estou falando…
T+

robinsonbsilva

Obrigadão Fernando.

M

Bom, o ideal é não exibir todos os tipos de erros para o usuário, talvez apenas um código de erro (tipo os erros do Windows).
Mas vc tem que fazer um LOG dos erros reais, para que vc possa consultar mais tarde e ver o que aconteceu.

Criado 5 de agosto de 2011
Ultima resposta 5 de ago. de 2011
Respostas 6
Participantes 3