[Seasar-user:1895] Re: 論理的なコネクションが閉じられない?

Koichi Kobayashi koichik
2005年 4月 29日 (金) 04:07:33 JST


小林 (koichik) です.

On Thu, 28 Apr 2005 14:16:19 +0900
Shotaro Tsubouchi <[E-MAIL ADDRESS DELETED]> wrote:

> 今気付きましたが、S2Hibernateはどこかでトランザクションが掛かっていないと
> セッションはコネクションプールのタイムアウトまでクローズされません。
> (S2SessionImpl#closeがTransactionImpl#afterCompletionからしか呼ばれていないので)
> トランザクションを掛け忘れているところがあると常に再現します。
> 
> http://homepage3.nifty.com/seasar/s2hibernate.htmlでも
> 「SessionはJTAのトランザクション中は維持され、
>  トランザクションの終了時に自動的にクローズ(flushも)されます。」
> とあるので仕様かもしれませんが、どこかで解放できないものでしょうか?

先日書いたばかりですが,トランザクション境界は明示的に
設定することを強く推奨します.
OpenSessionInView に近いことをやっているのであれば,そこで
一括してトランザクション境界を設定することができるのでは
ないでしょうか?

ともあれ (JW),トランザクション境界が設定されない以上,
S2Hibernate はセッションをクローズすべきタイミングを
知ることができませんから,アプリケーションが明示的に
セッションをクローズするほかありません.
Hibernate セッションをクローズするには,適切なコンポーネントに
S2SessionFactory をDI してもらい,

S2Session session = getS2SessionFactory().getSession();
//session を使ってデータアクセス (よって S2Hibernate.dao は使えない)
Connection conn = session.close();
conn.close();

とすれば可能だと思います.
# これができるならトランザクション境界も設定できるはずだと
# 思いますが.


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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