[seasar-dev:1250] Re: ConnectionPoolImpのcheckInFreePoolでの例外ハンドリング

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2013年 2月 1日 (金) 14:57:09 JST


中村(taedium)です。

PostgreSQLのJDBCドライバがそうなんですが、
Connection#close()を外部から呼ばなくても
JDBCドライバが内部で物理的なコネクションをクローズすることがあります。
把握しているのは、PostgreSQLのJDBCドライバの
socketTimeoutプロパティを有効にして実際にタイムアウトした場合です。

そのような状態の物理的なコネクションを論理的なコネクション経由で
クローズすると、物理的なコネクションのsetAutoCommitで
「すでにクローズされています」といった例外になります。


On Fri, 1 Feb 2013 05:25:18 +0000
YASUO HIGA <higa @ isid.co.jp> wrote:

> ひがです。
> 
> 確かにそうなんだけど、例外が起こるケースってどんな時?
> ________________________________________
> 差出人: seasar-dev-bounces @ ml.seasar.org [seasar-dev-bounces @ ml.seasar.org] が次の人の代理で送信しました: 中村 年宏
> 送信日時: 2013年1月31日 12:15
> 宛先: seasar-dev @ ml.seasar.org
> 件名: [seasar-dev:1248] ConnectionPoolImpのcheckInFreePoolでの例外ハンドリング
> 
> 中村(taedium)です。
> 
> org.seasar.extension.dbcp.impl.ConnectionPoolImpの
> checkInFreePoolメソッドですが、
> 物理的なコネクションのsetAutoCommitメソッドに対する
> 例外ハンドリングが行われていないのではと思います。
> 
> 単に
> 
>   pc.setAutoCommit(true);
> 
> とする代わりに、次のようなコードが必要だと思うのですがどうでしょうか?
> 
>   try {
>     pc.setAutoCommit(true);
>   } catch (SQLException e) {
>     con.closeReally();
>     notify();
>     throw e;
>   }
> --
> Toshihiro Nakamura <nakamura.toshihiro @ isid.co.jp>
> 
> _______________________________________________
> Seasar-dev mailing list
> Seasar-dev @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dev
> _______________________________________________
> Seasar-dev mailing list
> Seasar-dev @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dev

-- 
Toshihiro Nakamura <nakamura.toshihiro @ isid.co.jp>



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