[Seasar-user:17693] Re: [DBFlute] Spring環境で特定環境でDBCPコネクションプールが使い果たされる

kubo [E-MAIL ADDRESS DELETED]
2009年 6月 10日 (水) 21:16:02 JST


久保(jflute)です。

> 先ほどの手修正と同じように、問題なく動作しているようです。
> 一応、開発中のリソースに反映させておきました。

ありがとうございます。

> こちらはまだ始まったばかりで、検証がほとんどですので、
> 久保さんのペースでやっていただければ十分です。

了解しました。

貴重なフィードバックありがとうございました!

2009/6/10 Ippei Nojima <[E-MAIL ADDRESS DELETED]>:
>
> ippei です。
>
> スナップショットへの反映、ありがとうございます。
> こちらでダウンロードして確認してみました。
> 先ほどの手修正と同じように、問題なく動作しているようです。
> 一応、開発中のリソースに反映させておきました。
>
>> また、リリースタイミングについて希望がありましたらご相談ください。
>> (そろそろ開発が終わるので早めににリリースして欲しいとか)
>
> お心遣い、感謝します。
> こちらはまだ始まったばかりで、検証がほとんどですので、
> 久保さんのペースでやっていただければ十分です。
>
> 以上、よろしくお願いいたします。
>
>
> On Wed, 10 Jun 2009 18:13:54 +0900
> kubo <[E-MAIL ADDRESS DELETED]> wrote:
>
>> 久保(jflute)です。
>>
>> ご確認ありがとうございます。
>> こちらでも、dbflute-spring-exampleにて
>> 同じ現象を再現させて、修正に問題が発生しないことを
>> 確認できました。(他の処理が問題ないことも確認)
>> (NoTransactionTestがそれです)
>>
>> 様子を見て、また何かあれば言ってください。
>> 一応、この修正をdbflute-0.9.5.1に反映させました。
>> http://dbflute.sandbox.seasar.org/download/dbflute/dbflute-0.9.5.1-SNAPSHOT.zip
>> でダウンロード可能です。
>> また、リリースタイミングについて希望がありましたらご相談ください。
>> (そろそろ開発が終わるので早めににリリースして欲しいとか)
>>
>> > org.springframework.jdbc.core.JdbcTemplate.execute(StatementCallback)
>> ありがとうございます。
>> なるほど、こういうクラスがあるのですね。参考になります。
>>
>>
>>
>> 2009/6/10 Ippei Nojima <[E-MAIL ADDRESS DELETED]>:
>> >
>> > ippei です。
>> > 素早い対応、ありがとうございます。
>> >
>> >> 取り急ぎ、DBFluteInitializerの
>> >> SpringDBCPDataSourceHandlerのgetConnection()を
>> >> 以下のようにしてお試しください。
>> >
>> > DBFluteInitializer の該当箇所を修正し、確認してみました。
>> > トランザクション宣言アリ、ナシともに、問題ありませんでした。
>> > (通常通り更新もされるし、枯渇もしない)
>> > もうしばらくは様子を見てみます。
>> >
>> > このあたりの処理は、
>> > ?org.springframework.jdbc.core.JdbcTemplate.execute(StatementCallback)
>> > も参考になると思いますので、もしよろしければご確認ください。
>> >
>> > 以上、よろしくお願いいたします。
>> >
>> >
>> > On Wed, 10 Jun 2009 16:38:58 +0900
>> > kubo <[E-MAIL ADDRESS DELETED]> wrote:
>> >
>> >> 久保です。
>> >>
>> >> ippeiさん、こんにちは
>> >>
>> >> 取り急ぎ、DBFluteInitializerの
>> >> SpringDBCPDataSourceHandlerのgetConnection()を
>> >> 以下のようにしてお試しください。
>> >> (Transaction無し実行が枯渇しないことだけじゃなくて、
>> >> ?Transactionあり実行がそれまで通りTransactionが有効かどうかも)
>> >>
>> >> public Connection getConnection(final DataSource ds) throws SQLException {
>> >> ? ? final Connection conn = DataSourceUtils.getConnection(ds);
>> >> ? ? if (DataSourceUtils.isConnectionTransactional(conn, ds)) {
>> >> ? ? ? ? return new NotClosingConnectionWrapper(conn);
>> >> ? ? } else {
>> >> ? ? ? ? return conn;
>> >> ? ? }
>> >> }
>> >>
>> >> 2009/6/10 Ippei Nojima <[E-MAIL ADDRESS DELETED]>:
>> >> >
>> >> > ippei です。
>> >> > jflute さんの blog では何度かお世話になってます。
>> >> >
>> >> > さて標記の件、特定環境下で dbcp のコネクションプールが
>> >> > 枯渇する問題が起きました。
>> >> > 原因は特定できているので、DBFlute 側でどうにか対処できないかな、
>> >> > という相談も含めての投稿になります。
>> >> >
>> >> > -----------------------------
>> >> >
>> >> > <環境>
>> >> > ?Java ? ?; Sun JDK 1.5.0_19
>> >> > ?DBFlute ; DBFlute 0.9.5
>> >> > ?Spring ?; Spring Framework 2.5.6
>> >> > ?DBCP ? ?; Commons DBCP 1.2.2
>> >> >
>> >> > <現象>
>> >> > ?トランザクションプロキシが設定されていないメソッド (*1) を
>> >> > ?呼び出した際に、コネクションプールが返却されない。
>> >> >
>> >> > ?(*1)
>> >> > ?<tx:annotation-driven/> 環境下で、@TransactionAttribute、
>> >> > ?または @Transactional が宣言されていないメソッド。
>> >> > ?もしくは、それ以外の環境下で TransactionProxyFactoryBean などが
>> >> > ?設定されていないクラスのメソッド。
>> >> >
>> >> > <原因>
>> >> > ?(DBFLUTE-478) 対応ではき出される DBFluteInitializer で
>> >> > ?DataSourceUtils#getConnection(DataSource) が呼ばれているが、
>> >> > ?トランザクションマネージャが動作していない環境下でこのメソッドを
>> >> > ?呼んだ場合、以下のような動作となり、結果コネクションが枯渇する。
>> >> >
>> >> > ?1. DataSourceUtils#getConnection(DataSource) を呼んだ場合、
>> >> > ? ? 常に DataSource#getConnection() が呼ばれる。
>> >> > ? ? (DataSourceUtils の L.113 参照)
>> >> > ?2. 取得した Connection は、NotClosingConnectionWrapper に
>> >> > ? ? ラッピングされるため、DBFlute の動作後に close されない。
>> >> > ?3. close されないので、コネクションプールに返却されない。
>> >> > ? ? (PoolableConnection#close() 参照)
>> >> > ?4. 解放されないコネクションがたまり、枯渇する。
>> >> >
>> >> > トランザクションプロキシが設定されている場合は、Spring 自体が
>> >> > トランの最後に Connection を close するようになっているため、
>> >> > このような問題は発生しない。
>> >> >
>> >> > -----------------------------
>> >> >
>> >> > トランザクションプロキシを設定せずに db アクセスをするなど、
>> >> > 本来はまずない動作ではあるとは思いますが、トランザクション宣言忘れ、
>> >> > select のみなのでプロキシいらない (?)、などを考慮すると、
>> >> > 無視はできないのかな、と思っております。
>> >> >
>> >> > 対応のほど、ご検討ください。
>> >> >
>> >> > _______________________________________________
>> >> > Seasar-user mailing list
>> >> > [E-MAIL ADDRESS DELETED]
>> >> > https://ml.seasar.org/mailman/listinfo/seasar-user
>> >> >
>> >> _______________________________________________
>> >> Seasar-user mailing list
>> >> [E-MAIL ADDRESS DELETED]
>> >> https://ml.seasar.org/mailman/listinfo/seasar-user
>> >
>> >
>> >
>> >
>> > ※部署名が変わりました。
>> > ――――――――――――――――――――――――
>> > ?野島 逸平 (Ippei Nojima)
>> > ?JFE システムズ株式会社
>> > ? SI ソリューション事業部 第 2 開発部
>> > ? ? ? ? ? ? ? ? ? ? 基幹ソリューショングループ
>> > ?E-mail : [E-MAIL ADDRESS DELETED]
>> > ?電話 043-296-6984 (内線2229) FAX 043-296-8418
>> > ――――――――――――――――――――――――
>> >
>> > _______________________________________________
>> > Seasar-user mailing list
>> > [E-MAIL ADDRESS DELETED]
>> > https://ml.seasar.org/mailman/listinfo/seasar-user
>> >
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
>
>
> ※部署名が変わりました。
> ――――――――――――――――――――――――
>  野島 逸平 (Ippei Nojima)
>  JFE システムズ株式会社
>   SI ソリューション事業部 第 2 開発部
>                     基幹ソリューショングループ
>  E-mail : [E-MAIL ADDRESS DELETED]
>  電話 043-296-6984 (内線2229) FAX 043-296-8418
> ――――――――――――――――――――――――
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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