私はJavaを初めて使用します(Java 6を使用しています)。すべてのJavaPOJOとサーブレットに以下のデザインパターンを使用して、GlassFish3.1.2Webサーバーを介してOracle11Gデータベースにアクセスしています。
使用可能なすべてのプロセス(またはセッション、違いがわからない)が消費されると、断続的なデータベースエラー(ORA-12519)が発生し、アプリケーションによってプロセスが解放されていないように思われます。
以下のデザインパターンを見て、例外が発生した場合にデータベースへのJDBC接続が解放されることを確認するためのより良い方法はありますか?たとえばif ( conn != null) conn.close();
、catchブロック内にコードを配置する必要がありますか?または、より良いデザインパターンはありますか?コメント/ヒントを事前に感謝します。
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;
}