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;
}

questionAnswers(4)

yourAnswerToTheQuestion