内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
java:commons_dbcp
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== DBCPを使う ====== ===== コネクションプーリング ===== コネクションプーリングとは、コネクションをトランザクション毎に作成、解放するのではなく、一度作成したコネクションを解放せずに使い回す事で、データベースアクセスの負荷を減らす手法です。コネクションの作成コストは高いので負荷軽減に大きく貢献します。 J2EEアプリケーションでは、J2EEコンテナがプーリング機能を持ったDataSourceを提供しているため特に意識せずにコネクションプーリングを利用できます。通常J2EE環境では、JNDIサービスを通してDataSourceを利用します。DataSourceの設定を行うとコンテナがデータソースをJNDIに登録し、J2EEアプリ中で登録したDataSourceをlookupして取得することができます。 <code java> InitialContext ic = new InitialContext(); DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/Postgres"); Connection conn = ds.getConnection(); </code> ===== 非J2EE環境でコネクションプーリング ===== J2SE環境でのデータベースアクセスには通常DriverManagerを使いますが、Jakarta commonsのDBCPというライブラリを使用するとDataSourceを使ったコネクション取得が可能となります。DBCPはコネクションプーリング機能も提供しており、これを利用する事で非J2EE環境でも簡単にコネクションプーリングを利用する事ができます。 DBCPはTomcatのコネクションプーリング実装に利用されており、実績のある信頼性の高いライブラリです。 * Jakarta-Commons DBCP 1.0以降 * Jakarta-Commons Collections 2.0以降 * Jakarta-Commons Pool 1.0以降 これらのjarをダウンロードしてクラスパスに加えます。以下のコードでDBCPを取得します。 <code java> BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName(driverName); ds.setUsername(dbUser); ds.setPassword(dbPass); ds.setUrl(jdbcUrl); ds.setDefaultAutoCommit(true); ds.setDefaultReadOnly(false); // プーリングされたコネクションを取得 Connection c = ds.getConnection(); // JDBC処理 // ここでコネクションは解放されず、プールに戻されるのみ c.close(); </code> BasicDataSourceには、プールする初期コネクション数や最大コネクション数、コネクションを解放するまでの待ち時間などを設定するメソッドがあります。アプリに合わせてカスタマイズすると良いでしょう。 コネクションプーリングではConnection#closeを呼んでも実際にはclose処理は行われません。Connectionオブジェクトがコネクションプールに戻されるだけでConnection#closeと同時にコミット(AutoCommitがoffの場合)されたり、リソースが開放がされたりしません。必ず明示的にConnection#commitメソッドやStatement#closeを呼び出す必要があります。「とりあえずcloseしとけば良いよね」という考え方ではダメです。リソース管理を手抜きするとバグの元になります。 プーリングされたコネクションを解放するにはBasicDataSource#closeメソッドを呼び出します。アプリケーション終了前や接続を明示的にリセットしたい時に使います。
java/commons_dbcp.txt
· 最終更新:
2007/12/02 07:34
by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ