Tenho um arquivo DAO, que tenho vários métodos para fazer consulta, insert, update e delete, de classes de entidades genéricas, o que funciona perfeitamente.
Alguns momentos retornam exceções de bancos que não foram tratadas. Qual é a melhor maneira de se fazer isto, tendo em vista que pode se conectar a qualquer banco de dados relacional.
Todos os métodos desta classe tem o throws Exception.
Mas eu utilizo o log4j, sim. Mas o que quero dizer é.
Exemplo: existe um campo obrigatório ou um campo único que não foi tratado em regra de negócios. Se ele tiver vazio ou for único o banco retorna uma exceção, assim cada banco de dados retorna esta mensagem de um jeito.
Este retorno que estou falando, qual é a melhor maneira de tratar ela ?
Ou qualquer mensagem de exceção que vem do bando de dados.
Conseguiu entender ?
J
javaflex
Isso é regra de negócio, você deve criar uma validação no seu sistema e não deixar estourar uma exception do banco.
Em Java se nao me engano se usa mais bean validation.
G
guilhermebhte
Sei que é regra de negócio. Mas se o programador esquecer, como fazer ?
O sistema vai retorna o erro em inglês ?
J
Jonas_B_a_r_r_o_s
Voce faz o tratamento das exceçoes no try catch , não vai aparecer nada em ingles
Ex:
publicstaticConnectiongetConexao(){try{if(c==null){Class.forName(DRIVER);c=DriverManager.getConnection(URL,USUARIO,SENHA);System.out.println("Conexao OK");}}catch(ClassNotFoundExceptione){//JOptionPane.showMessageDialog(null,"Problemas na conexao\n"+e);}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Problemas na conexao\n"+e);}returnc;}}
J
javaflex
Essa é nova! Se esquecer é bug. Tem que ir pro log do log4j e redirecionar pra uma página de erro padrão informando que aconteceu um erro, sem especificar o erro. Muitos frameworks possuem evento ou configuração centralizada pra você fazer esse redirect, sem precisar espalhar try catch pelo código.
Faz o levantamento das regras de negócio antes de programar.
R
raphaeloneves
Se estiver a usar Spring, por exemplo, podes definir um RestAdvisor com base em qualquer tipo de exceção. Desta forma, se o programador esquecer de tratar o erro, a camada de controle de exceções do Spring cuida do assunto.
Se realmente o Spring for a tecnologia do projeto, avisa!
Mas uma coisa é certa, se a aplicação demandar e o programador “esquecer”, certamente é um bug da aplicação
Se não usar o Spring, acredito que podes pensar nesse conceito de interceptor nas suas chamadas.
G
guilhermebhte
É Spring.
Mas uma coisa é certa, se a aplicação demandar e o programador “esquecer”, certamente é um bug da aplicação
Sim, eu sei.
Se estiver a usar Spring, por exemplo, podes definir um RestAdvisor com base em qualquer tipo de exceção. Desta forma, se o programador esquecer de tratar o erro, a camada de controle de exceções do Spring cuida do assunto.
@RestControllerAdvice define que a classe será um interceptor dos controllers @ExceptionHandler define o hook pra executar o método com base no tipo da exceção. Aqui tu podes criar uma exceção que represente o tal erro do banco e toda vez que a exceção for lançada, o método marcado será executado. ResponseEntityExceptionHandler é uma classe que te dá algumas opções interessantes de manipulação.