- PR -

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

1
投稿者投稿内容
たけ
常連さん
会議室デビュー日: 2005/01/07
投稿数: 20
投稿日時: 2005-01-09 00:21
環境はJ2SE1.4.1 Tomcat4.1.3 Oracle9iです。

コネクションプーリングについてなのですが
driverManager接続した場合は、Class.forNameに何を指定しようが
コネクションプーリングはされないのでしょうか?

また、DataSourceを使用した場合は
無条件にコネクションプーリングされるのでしょうか?
それとも
server.xmlのResourceParamsのfactoryに
oracle.jdbc.pool.OracleDataSourceFactoryを指定した場合に
コネクションプーリングされるのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-01-09 03:59
まず、試してみましょう。
コネクションをクローズしても netstat -an で 1521 とかに接続があればプールされてると判断できるでしょう。
たけ
常連さん
会議室デビュー日: 2005/01/07
投稿数: 20
投稿日時: 2005-01-11 21:15
netstat -an をやってみたのですが
接続しているとき(Tomcat起動中)と、Tomcat非起動中で同じ結果でした。
(かつnetstatの結果の見方がよくわからない)

DataSource接続中
TCP 0.0.0.0:1521 0.0.0.0:0
LISTENING
TCP 自分のPCのアドレス:1086 自分のPCのアドレス:1521
ESTABLISHED
TCP 自分のPCのアドレス:1521 自分のPCのアドレス:1086
ESTABLISHED

なにもしていない時
TCP 0.0.0.0:1521 0.0.0.0:0
LISTENING
TCP 自分のPCのアドレス:1086 自分のPCのアドレス:1521
ESTABLISHED
TCP 自分のPCのアドレス:1521 自分のPCのアドレス:1086
ESTABLISHED

この他にOracleへのコネクションが確立しているかどうかを
調べる方法はないでしょうか?
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2005-01-11 22:51
ディクショナリを見られる権限のあるユーザでOracleに接続して

 SELECT * FROM V$SESSION

を発行すれば、Oracleに接続されているかどうかわかりますよ。

たけ
常連さん
会議室デビュー日: 2005/01/07
投稿数: 20
投稿日時: 2005-01-13 13:45
vincentさん、ありがとうございます。

SELECT * FROM V$SESSION で、接続を確認することができました。

しかし、DataSourceで接続しても
getConnectionすると接続が1つ増えcloseすると接続が1つ消えました。
これってどうやらコネクションプーリングされていないようです。

以下のような設定でコネクションプーリングをしているつもりですが
何かおかしな設定をしていますでしょうか。

web.xml
<resource-ref>
<res-ref-name>jdbc/DataSource</res-ref-name>
<res-type>oracle.jdbc.pool.OracleDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

server.xml
<Context〜略>
<Resource name="jdbc/DataSource" auth="Container" type="oracle.jdbc.pool.OracleDataSource"/>
<ResourceParams name="jdbc/DataSource">
<parameter>
<name>factory</name>
<value>oracle.jdbc.pool.OracleDataSourceFactory</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:ユーザ名/パスワード@localhost:1521:SID</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>5</value>
</parameter>
</ResourceParams>
</Context>
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-01-13 19:08
JDBCドライバのバージョンが分かりませんが、例えば
OracleDataSourceではなくてOracleConnectionPoolDataSource
を使うべきであったりしませんか?
たけ
常連さん
会議室デビュー日: 2005/01/07
投稿数: 20
投稿日時: 2005-01-18 17:55
OracleConnectionPoolDataSourceを使用してみたのですが
状況は変わりませんでした。

ところで、私すごく勘違いかもしれないのですが
これらの設定を行えば、かってにコネクションを確保してくれると
思っているのですが間違いでしょうか?

コネクションを管理するクラスが別に必要でしょうか?
どくおっと
会議室デビュー日: 2004/10/12
投稿数: 2
投稿日時: 2005-06-13 08:57
当方も同じような環境
(環境はJ2SE1.4.1 Tomcat4.1.3 Oracle9i)

factoryにoracle.jdbc.pool.OracleDataSourceFactory
を指定し、
OracleConnectionPoolDataSource
を使用してもプーリングされませんでしが、
OracleConnectionPoolDataSource
ではなく
OracleConnectionCacheImpl
を使用したらプーリングされたような動作をしています。
OracleConnectionCacheImpl
を使うのには何か問題ありますでしょうか?
1

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