Java / JDBC: Najlepszy wzór do zamknięcia połączenia z bazą danych, gdy wystąpi wyjątek

Jestem nowym użytkownikiem Java (używam Java 6). Korzystam z poniższego wzorca projektowego dla wszystkich moich obiektów POJO Java i serwletów, aby uzyskać dostęp do bazy danych Oracle 11G za pośrednictwem serwera WWW GlassFish 3.1.2.

Dostaję sporadyczny błąd bazy danych (ORA-12519), gdy wszystkie dostępne procesy (lub sesje, nie wiem, na czym polega różnica) są zużywane, co prowadzi mnie do myślenia, że ​​procesy nie są uwalniane przez aplikację.

Czy patrząc na poniższy wzór projektu, istnieje lepszy sposób, aby upewnić się, że połączenie JDBC z bazą danych zostanie wydane w przypadku wyjątku? Na przykład, czy powinienem również umieścićif ( conn != null) conn.close(); kod INSIDE bloku catch? A może jest lepszy wzór? Z góry dziękuję za wszelkie uwagi / wskazówki.

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