[Seasar-user:4086] Re: S2のコネクションプーリングについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 7月 15日 (土) 20:00:32 JST


小林 (koichik) です.

Date:    Fri, 14 Jul 2006 12:00:59 +0900
From:    齋藤 宗範 <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:4075] S2のコネクションプーリングについて

> DIコンテナからデータソースを取得し、DBアクセスをしています。
> DBアクセスをした後にResultSet>PreparedStatement>Connectionの順に
> close()を呼び出しているのですが、DBのカーソルが残ったままになります。
> 何度も処理を実行するとカーソルの上限を超えてしまい、エラーが発生してしまいま
> す。
> 
> oracle のカーソルの上限をあげる以外にエラーを回避する方法はあるのでしょうか
>> もしくは、何か設定もれがあるのでしょうか?

まずは,クローズされていないカーソルをオープンしているのが
どこなのかを突き止める必要がありますね.
可能であれば,Eclipse などの IDE 上でブレークポイントを設定して,
カーソルの増減をチェックしながらステップ実行するなどして頂けると
原因を見つけられるのではないかと思います.
また,S2DBCP および S2Dao が出力するログもヒントになるかも
しれないので,差し障りのある部分を除いて添付して頂けると助かります.


率直に言うと,S2DBCP や S2Dao にクローズ漏れが残っている可能性は
あまり多くないと考えています.
原因としてすぐに思いついたのは,リクエスト毎など,繰り返し
S2Container がインスタンス化されて destory() されていない
ケースです.
その場合,プールされたコネクションが解放されないまま,新しい
コンテナと共にコネクションプールも作成されることになります.

S2JSF や S2Struts の設定をそのまま使っているならこういうことは
ないと思いますが,もし S2Container の初期化を独自に行っているので
あれば,その部分のコードも提示して頂けると何か分かるかもしれません.



-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内