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