[Seasar-user:18703] Re: [S2DBCP] DB再起動後のコネクション取得について

takiguchi [E-MAIL ADDRESS DELETED]
2009年 10月 20日 (火) 22:54:18 JST


瀧口です。
説明をはしょりすぎてしまいました。申し訳ありません。

> ロールバックする前に何らかの DB アクセスを
> 行っていると思うのですが,そこでも例外が
> 発生しないのでしょうか?
おっしゃる通り、無効なコネクションを使ってDBアクセスしているため、例外が発生します。
そこではRuntimeExceptionを投げており、ロールバック自体はS2のRequiredInterceptorから行われます。
このS2によるロールバックにおいて、ロールバックが成功した場合にコネクションがプールに返却されています。

小林さまがおっしゃるような、
>S2DBCP では,例外が発生したコネクションは
>プールに戻さないようになっています.
というのは正確ではなく、実際には
例外が発生した場合のロールバックで例外が発生したコネクションはプールに戻さない、
という動きになっています。

実際のコードですと、TransactionImpl#rollbackResources で、
ロールバックで例外が発生した場合に status に Status.STATUS_UNKNOWN を、
それ以外の場合 Status.STATUS_ROLLEDBACK を設定しています。
この status の値が ConnectionPoolImpl.SynchronizationImpl#afterCompletion に渡され、
STATUS_COMMITTED か STATUS_ROLLEDBACK の場合 ConnectionPoolImpl#checkInTx が呼ばれています。


2009/10/20 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date:    Tue, 20 Oct 2009 20:10:08 +0900
> From:    taktos <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:18694] Re: [S2DBCP] DB再起動後のコネクション取得について
>
>> PostgreSQLのJDBCドライバの場合ですが、
>> 無効なコネクションに対してrollbackを実行しても例外が発生しません。
>
> ロールバックする前に何らかの DB アクセスを
> 行っていると思うのですが,そこでも例外が
> 発生しないのでしょうか?
>
> 全く例外が発生しないのにロールバックすると
> 判断することもないように思うのですが.
>
>
> --
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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