Pessoal, estou com o seguinte problema:
As classes de persistência de um projeto que estou trabalhando é em JDBC (não pode ser hibernate, por questões de desempenho).
Bem, nessas classes de persistência existem muitas operações com a mesma estrutura, como, por exemplo executar um Statement e retornar um ResultSet. Não faria sentido colocar o mesmo código repetido por todas as classes de persistência, portanto, coloquei o seguinte código na classe abstrata (AbstractePersistence):
[code] protected ResultSet executarQueryToResultSet(String query){
Statement statement = null;
ResultSet resultSet = null;
conexao = getConnection();
try{
statement = conexao.createStatement();
resultSet = statement.executeQuery(query);
conexao.commit();
}catch(Exception ex){
try { conexao.rollback(); } catch (SQLException e) { e.printStackTrace(); }
}
finally{
liberarConexao(conexao);
liberarStatment(statement);
}
return resultSet;
}[/code]
Dessa forma eu não preciso toda vez que chamar um método em uma classe de persistência escrever o mesmo código repetitivo acima. Quando uma sub-classe quiser executar um ResultSet, é só chamar o método da super-classe e pronto.
O problema é: como o método retorna um ResultSet, e no mesmo método da classe abstrata, eu fecho a conexão (usamos um pool, portanto é obrigatório fechar a conexão, caso contrário o pool estoura), fechando a conexão, quem recebeu o ResultSet como retorno do método não vai conseguir obter os dados do ResultSet, pois o mesmo foi fechado.
Gostaria de saber a opnião de voces sobre estas decisões, e se tem algo melhor a ser feito. Pois dessa forma não está dando certo.