WebSphereべからず集

第2回 「データベース・コネクションの確保、利用、クローズがコード中に分散している」

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: WebSphereべからず集

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:WebSphereべからず集

このシリーズの続きに乞うご期待。

Category: サーブレットプログラミング
WAS Version:WAS 3.0以降

Bad Practice

あるお客様のコードでは、データベースを利用する際のConnectionに対する処理がコード中のあちこちに分散していました。
つまり、Connectionを取得する部分、Connectionを利用してデータベースの参照・更新を行う部分、Connectionをクローズする部分が、それぞれ別のクラス/別のメソッド内で定義されていて、それらの間には複数の処理が別途行われていました。

Result

このコードでは、データベース利用の間の処理でExceptionが発生した場合、処理が中断して取得したConnectionのクローズが行われないという現象が発生してしまいました。

そのため、しばしばコネクションプール中のデータベース・コネクションが使い尽くされてしまい、アプリケーション・サーバーが使用不能になるという事態が頻発しました。

Best Practice

データベース・コネクションの確保、利用、クローズは必ず一ヶ所で行うようにしてください。その際には取得・利用のコードを必ずtry節で囲み、クローズ処理はそのfinally節で行うようにしてください。これにより、確保されたデータベースコネクションが確実にクローズされるようになります。

Connection conn = null
try {
    conn = dataSource.getConnection(USERID, PASSWORD);

    // データベースに関する処理

} catch (SomeException ex) {

    // Exceptionに対する処理

} finally {
    try {
        if (conn != null) conn.close();
    } catch (Exception ex) {}
}

ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=325041
ArticleTitle=WebSphereべからず集: 第2回 「データベース・コネクションの確保、利用、クローズがコード中に分散している」
publish-date=10012003