Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ServletContextLisener

データソースの接続に関して
ServletContextLisener#contextInitialized メソッド内で Connection オブジェクトを取得して ServletContext#setAttribute しています。

このやり方は各サーブレットやJSPで Connection を取得するより良いと聞いたのですが、ここでコネクションプーリングについて質問です。

Connection オブジェクトというのはコネクションプーリングというものへの参照なんですね?

なのでひとつのコネクションをみんなで回すわけではなくコネクションプーリングへの参照をみんなで回す、ということでしょうか?

意味わかりにくかったら補足要求してください。

14

回答

2540

閲覧

14件の回答

評価

0

>Connection オブジェクトというのはコネクションプーリングというものへの参照なんですね?
違います。
ConnectionはConnectionへの参照です。

>なのでひとつのコネクションをみんなで回すわけではなくコネクションプーリングへの参照をみんなで回す、ということでしょうか?
これも違います。
Connection Pool内のConnection を使い回します。

評価

0

ContextListener で Connection を取得して context.setAttribute して他のページで getAttribute すると 一つの Connection を使いまわす。なので
各ページで Connection を生成するほうがコネクションぷーリングのメリットを生かせる。

こういうことですか。

評価

0

>このやり方は各サーブレットやJSPで Connection を取得するより良いと聞いた

この情報のソースが何か知りませんし、背景にどういう文脈があるか知りませんが、要は不特定多数のユーザーのリクエスト毎にConnectionが必要になるようなシステムでは、Connectionの生成のように負荷の高い処理はリクエスト毎に生成せずにプールから取得しろということです。

>各ページで Connection を生成するほうがコネクションぷーリングのメリットを生かせる。
たぶん、あなたはConnectionPoolを理解してないと思うから、自分で少し調べてみてください。

評価

0

というより、Connection自体からではないでしょうか。

評価

0

mio さんありがとうございます。
各ページで Connection を生成するのと ServletContextListenr#contextInitialized で Connection を生成して context.setAttribute して各ページで getAttribute して使うことの違いを簡単に説明願いませんでしょうか。
私は各ページで Connection を生成します。分散環境を使ったことはありませんが、そういうケースではどうなるのでしょうか。各ページで Connection を生成する方法は無難でリソースの消費も現在のPC環境を考えると特に問題ない、、。

評価

0

>というより、Connection自体からではないでしょうか。
そうですね。
Connection自体から勉強する必要がありそうですね。

評価

0

ブランクの回答は最初と二回目が矛盾してる。
君も再勉強だな。

評価

0

1
contextInitialized(...
Connection con = ds.getConnection();
            context.setAttribute("connection", con);

どのページでも getAttribute して得たcon の参照先は同じ?

2
各ページで
Connection con = ds.getConnection();
この con の参照先は毎回違う?

Connection 問うものが プールの中にある?
なら1は他に Connection が多く確保されているのに1つのコネクションを使いまわすので効率悪くない?


ということです。mio さん。

評価

0

他のConnectionが使われないのは「効率が悪い」のではなく「資源の無駄」でしょう。
それよりも、Connectionを使いたいときにすでに利用中なら処理を止めねばならないほうが、「効率が悪い」のでは。

評価

0

>Connectionを使いたいときにすでに利用中なら処理を止めねばならないほうが、「効率が悪い」のでは。
そうですよね。
1のケースではそういうケースが発生するということですね?
筆末で失礼ですが、ありがとうございます。

評価

0

同時に高々ひとつのリクエストしかないということが確実であれば、1の書き方をしてさらにConnectionPoolも使わないのが良いのでは?

評価

0

なるほどよく分かりました。
本ではそこまで教えてくれないし助かりました。

評価

0

あ、失礼。
Poolを使うか使わないかは他の様々な要因が絡んでくるので使わないほうが良いとは一概には言えませんでした。

評価

0

了解しました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。