- PR -

コネクションプーリングについて

投稿者投稿内容
ヨーヨー
会議室デビュー日: 2004/06/10
投稿数: 8
投稿日時: 2004-09-02 10:28
ちょま吉様、返答ありがとうございます。

例外が起こってしまった場合、スローしてしまっているので
直接的には返せていません。
接続してるクラスのfinalize()で返すことになってます。

しかし、接続数のコントロールがうまく出来ていれば例外が起こることは
無いと思われるので、これが原因とは思えないです。
ヨーヨー
会議室デビュー日: 2004/06/10
投稿数: 8
投稿日時: 2004-09-02 11:36
kito様、返答ありがとうございます。

正におっしゃる通りで、リクエスト毎に生成してました。
コネクションプーリングの実装が始めてだったもので、
初歩的な間違いをしていたみたいです。。。

教えて頂いたとおりにアプリケーション初期化時に
アプリケーションスコープにDataSourceをバインドしておくことにより、
解決いたしました。(キャッシュってこの方法で大丈夫ですよね?)

本当にありがとうございました。
ヨーヨー
会議室デビュー日: 2004/06/10
投稿数: 8
投稿日時: 2004-09-02 11:46
taku様、返答ありがとうございます。

せっかく教えて頂いたのですが、私が無知のあまり
根本的な所が間違っていました。申し訳ありません。

しかし、PostgreSQLのJDBCドライバにプーリング機能があるのは
初めてしりました。ありがとうございました。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2004-09-02 23:36
引用:

ヨーヨーさんの書き込み (2004-09-02 11:36) より:
kito様、返答ありがとうございます。

正におっしゃる通りで、リクエスト毎に生成してました。
コネクションプーリングの実装が始めてだったもので、
初歩的な間違いをしていたみたいです。。。

教えて頂いたとおりにアプリケーション初期化時に
アプリケーションスコープにDataSourceをバインドしておくことにより、
解決いたしました。(キャッシュってこの方法で大丈夫ですよね?)

本当にありがとうございました。


余談ですが、、、。
コネクションプーリングは、だいたいシングルトンパターンで実装されているのではないでしょうか?
つまりアプリケーションスコープに保持しておくのではなく、シングルトンパターンを用いてDataSourceをアプリケーション内で唯一のオブジェクトとして保持するのが一般的と思っています。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2004-09-03 01:43
引用:

ヨーヨーさんの書き込み (2004-09-02 11:36) より:

教えて頂いたとおりにアプリケーション初期化時に
アプリケーションスコープにDataSourceをバインドしておくことにより、
解決いたしました。(キャッシュってこの方法で大丈夫ですよね?)


DataSourceを共有する必要は全く無いので、Servletなどの
適当に寿命の長いオブジェクトのメンバにしてしまって良いです。
ApplicationContextに保持してしまうと使うときに探さないといけないので
あまり嬉しくないような気がします。
Strutsは使ったことがないのでわからないですが、
多分Actionかなにかのメンバにするんじゃないでしょうか?

引用:

ちょま吉さんの書き込み (2004-09-02 23:36) より:
コネクションプーリングは、だいたいシングルトンパターンで実装されているのではないでしょうか?
つまりアプリケーションスコープに保持しておくのではなく、シングルトンパターンを用いてDataSourceをアプリケーション内で唯一のオブジェクトとして保持するのが一般的と思っています。


あれ?コネクションプールとDataSourceがごっちゃになってません?
「コネクションプール」はあるコンテキスト中で唯一でなければなりませんが、
DataSourceはいわばコネクションを取り出す窓口みたいなものなので、
いくつあっても困ることはありません。
唯一のDataSourceを使いまわすのはほとんど意味が無いので、普通ではないと思います。

ヨーヨー
会議室デビュー日: 2004/06/10
投稿数: 8
投稿日時: 2004-09-03 11:06
返答ありがとうございます。
また質問させてください。
引用:

ApplicationContextに保持してしまうと使うときに探さないといけないので
あまり嬉しくないような気がします。


との事ですが、アプリケーションスコープにバインドしておく方法というのは、
なにか問題があるのでしょうか?それとも普通はやらない、という事でしょうか?

お恥ずかしいのですが、システムはもうほぼ出来上がっています。そこで
サーブレットのメンバにするとなると、全サーブレットに手を加える必要がありますので、
もしバインドが問題が無いようであれば、出来るだけ避けたいのですが・・・

よろしくお願いします。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2004-09-03 12:44
引用:

kitoさんの書き込み (2004-09-03 01:43) より:
あれ?コネクションプールとDataSourceがごっちゃになってません?
「コネクションプール」はあるコンテキスト中で唯一でなければなりませんが、
DataSourceはいわばコネクションを取り出す窓口みたいなものなので、
いくつあっても困ることはありません。


申し訳御座いません。おっしゃる通りごっちゃになってました。っというよりもよくわかっていなかったです。おはずかしい(^^;
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-09-03 17:18
引用:
ヨーヨーさんの書き込み (2004-09-03 11:06) より:
引用:
ApplicationContextに保持してしまうと使うときに探さないといけないので
あまり嬉しくないような気がします。


との事ですが、アプリケーションスコープにバインドしておく方法というのは、
なにか問題があるのでしょうか?それとも普通はやらない、という事でしょうか?



動作上の問題は無いです。

と言うか、Struts は標準で DataSource を ApplicationContext に
設定する機構を持っています。

でも、現在ではこの機構は非推奨です。
理由は、DataSource が Web 層に保持されても、
あまり嬉しくない場合が多いし、
コンテナから JNDI 経由で貰えるからです。

スキルアップ/キャリアアップ(JOB@IT)