- - PR -
プールされた接続のリセット
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-13 15:40
Servletからコネクションプーリングを利用して、RDBMSに接続するアプリケーションを前提とする質問です。
Servletコンテナの種類は限定しません。 RDBMSはOracleですが、今回の質問にはあまり関係がありません。 コネクションプーリングでプールされている接続を、コンテナが起動している間に、ある程度の間隔でリセット(切断、再接続)したいのです。 一定時間おきでも構いませんし、事前に決められた回数だけ利用されたらリセットでも構いません。 手動でリセット(1本ずつでもまとめてでも)できるようなものでもいいです。 とにかく、オンライン処理に影響を与えずに、DBセッションの寿命に上限を設けたいのです。 このような設定・操作が可能なコネクションプーリングコンポーネントを知りませんか? オープンソースでも商用プロダクトに付属のコンポーネントでもよいです。 ちなみに理由を先に言っておくと、つながりっぱなしだとゴミが溜まるから、くらいでご理解下さい。ゴミと言っても、こちらの都合で溜めてるものなのですが、それをクリアする方法がセッション切断しかないのです。 よい情報がお持ちでしたらぜひ教えてください。よろしくお願いします。 | ||||
|
投稿日時: 2004-10-13 16:34
WLS ならコマンドラインや MBean ベースでリセットできます。
http://edocs.beasys.co.jp/e-docs/wls/docs81/admin_ref/cli.html#1156066 またプール使用時にテストクエリを発行して接続が有効かどうかテストすることもできます。 http://edocs.beasys.co.jp/e-docs/wls/docs81/jdbc/programming.html#1053561 [ メッセージ編集済み 編集者: インギ 編集日時 2004-10-13 16:36 ] | ||||
|
投稿日時: 2004-10-13 17:33
インギさん、情報どうもありがとうございます。
WLSに関してはちょっとしたジョブを定時起動すればどうにかなりそうですね。 IBM WASに関しても調べてみたところ、管理コンソールからコネクションプールを設定する際に「経過タイムアウト」というのが設定でき、物理接続が破棄されるまでの時間を指定できるようです。これはどんぴしゃ。 http://publib.boulder.ibm.com/infocenter/ws51help/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/udat_conpoolset.html オープンソースの雄 Tomcat ではDBCPがメジャーでしょうか。 これについても調べてみます。 もし他にメジャーなコネクションプーリングコンポーネントがあれば、ぜひ情報提供お願いします。コンポーネントの名前だけでも結構です。マニュアルなど公開されていれば自分で調べてみます。 | ||||
|
投稿日時: 2004-10-14 09:20
Jakarta Commons DBCPの場合、パラメータで設定、というのは無理そうですね。 http://jakarta.apache.org/commons/dbcp/configuration.html PoolingDataSourceで使用するObjectPoolの、invalidateObject(Object)メソッドを叩くと良いような気もしますが、ちょっと今回はそこまでは。 | ||||
|
投稿日時: 2004-10-14 15:48
こんにちは
ObjectPoolの close() メソッドで保有している 全コネクションを解放することができますよ。 closeしたら、再取得すれば、いいのではないでしょうか。 また、一定時間の間隔でプールをリセットする場合は java.util.Timer クラスを使えば便利だと思います。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Timer.html ただ、リセット中にアクセスがあった場合・・・ とかいうことは、考えていませんのであしからず。 | ||||
|
投稿日時: 2004-10-14 16:31
情報提供どうもありがとうございます。
なるほど。 プールをクローズしたときに接続中のセッションはどうなるとか、 クローズから再オープンまでの短い間に接続要求があった場合の挙動が心配ですね。 当方、パッケージ製品のDeveloper(もどき)なので、運用に多くの前提を置けず、 なるべく汎用的に考えないといけないのが辛いところです。 ちなみにOracle9iASはマニュアルを見る限り、パラメータに設定箇所なし、APIのほうはAPIリファレンスが見つからず、で困ったもんです。 | ||||
|
投稿日時: 2004-10-14 16:55
そもそもゴミがたまるとはどういった状態でしょうか?
正しく ResultSet/Statement などをクローズしていればセッションが続く限り正常にコネクションを利用できると思いますが。 コネクションプール機構に dirty solution を求めるより根本原因を解決したほうが良いかと思います。 | ||||
|
投稿日時: 2004-10-14 17:14
最初に書いたとおり、セッションを切らない限り掃除できないゴミを プロダクトの都合で貯めているのです。 詳しくはこちらをご参照下さい。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14133&forum=10 |