WAS 小ワザ集

第14回:Application Anti Pattern(1) データベース・コネクションの確保、利用、クローズがコード中に分散している

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: WAS 小ワザ集

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

このコンテンツはシリーズの一部分です:WAS 小ワザ集

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

Anti Pattern

あるお客様のコードでは、データベースを利用する際の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=801128
ArticleTitle=WAS 小ワザ集: 第14回:Application Anti Pattern(1) データベース・コネクションの確保、利用、クローズがコード中に分散している
publish-date=03122012