Java / JDBC: Melhor padrão de design para fechar a conexão com o banco de dados quando ocorre uma exceção
Eu sou novo em Java (estou usando o Java 6). Eu tenho usado o padrão de design abaixo para todos os meus POJOs e servlets Java para acessar um banco de dados Oracle 11G por meio do servidor da Web GlassFish 3.1.2.
Estou recebendo um erro de banco de dados intermitente (ORA-12519) quando todos os processos disponíveis (ou sessões, não tenho certeza qual é a diferença) são consumidos, levando-me a pensar que os processos não estão sendo liberados pelo aplicativo.
Observando o padrão de design abaixo, existe uma maneira melhor de garantir que a conexão JDBC com o banco de dados seja liberada no caso de uma exceção? Por exemplo, devo também colocar oif ( conn != null) conn.close();
código dentro do bloco catch? Ou existe um padrão de design melhor? Agradecemos antecipadamente por quaisquer comentários / sugestões.
public String MyFunction() throws Exception {
Connection conn;
CallableStatement cs;
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/MyPool");
conn = ds.getConnection();
cs = conn.prepareCall( "{call my_sproc (?)}" );
cs.registerOutParameter(1, Types.VARCHAR);
cs.execute();
String outParam = cs.getString(1);
if ( conn != null ) // close connection
conn.close();
} catch (Exception e) {
outParam = "an error occurred";
}
return outparam;
}