Olá, em meu curso aprendi diretamente com o professor, que eu deveria criar e instanciar minha conexão em um FILTER que passa para todas as páginas acessadas em um web project.
[code]java.sql.Connection c = new Conexao().GO();
request.setAttribute(“connection”, c);
if(c != null){
chain.doFilter(request, response);
} else {
System.out.println("falha na conexao - sem acesso ao banco de dados");
}
try {
c.close();
} catch (SQLException e) {
System.out.println("erro metodo doFilter - classe Conecta (filter)");
}
[/code]
Assim está meu filter por enquanto. O problema é que a conexão não está fechando. Só fecha após o projeto ser finalizado. Isso pode causar inumeros problemas (mesmo com a conexão ficando em sleep no bd).
A questão é, devo realmente criar a conexão no meu filter, e tentar resolver a questão dela não estar fechando, ou seria mais correto criar a conexão em minhas classes DAO apenas nos métodos que eu utilizo a conexão, e nele já fechar a conexão? (Creio que neste segundo caso ela fecharia corretamente).
Pode ser que o professor só tenha ensinado a montar a conexão via FILTER para ensinar a turma a usar um filter… Ou será que é realmente “mais correto” deixar a conexão no próprio filter?
(obs: cada vez que eu abro uma página, este filter é chamado várias vezes, não sei porque. Deveria estar sendo chamado apenas 1x pela lógica. E se eu não dou o c.close, fica várias conexões abertas. Com o c.close fica apenas 1 conexão aberta por aba acessada)