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

Koichi Kobayashi koichik
2005年 4月 28日 (木) 00:32:29 JST


小林 (koichik) です.

On Wed, 27 Apr 2005 22:41:56 +0900
Shotaro Tsubouchi <[E-MAIL ADDRESS DELETED]> wrote:

> 現状ですと、
> 
> DEBUG 2005-04-27 21:19:46,693 [main] トランザクションを開始しました
> DEBUG 2005-04-27 21:19:46,913 [main] 物理的なコネクションを取得しました
> DEBUG 2005-04-27 21:19:46,913 [main] 論理的なコネクションを取得しました
> DEBUG 2005-04-27 21:19:47,003 [main] トランザクションをコミットしました
> 
> と、物理的なコネクションはプーリングされているの閉じられなくて良いと思いますが、
> 論理的なコネクションを閉じるというログが吐かれていません。
> これは正しい動きなのでしょうか?(はじめの頃は出ていたようにも思うのですが。)

これは S2Hibernate 1.0.6b4 からの動作です.
1.0.6b3 以前はトランザクションがコミットされる直前に Hibernate の
セッションをクローズしており,その時点で JDBC 論理コネクションも
クローズされていました.
1.0.6b4 ではトランザクションがコミットされる直前では Hibernate
セッションのフラッシュのみ行い,クローズはコミット後に行うように
変更になっているため,上記の動作となります.
コミットの後に「論理的なコネクションを閉じました」が出ているはずなので
ご確認ください.

> 環境は以下の通りです。
> WindowsXP
> JDK 1.4.2_04
> Seasar 2.1.4(2.2.7)
> S2Hibernate 1.0.6b3(b4)
> PostgreSQL 8.0(hsqldb)

S2Hibernate 1.0.6b4 は S2.2.5 以降と組み合わせる必要があります.
(S2.2.5 以降は S2Hibernate 1.0.6b4 以降と組み合わせる必要があります)

上記の S2.1.4 + S2Hibernate 1.0.6b3 および括弧内の S2.2.7 + 
S2Hibernate 1.0.6b4 の組み合わせはどちらも大丈夫ですが,念のため.

> Hibernateのマッピング設定の問題なのか、キャッシュ設定の問題なのか、
> 更新直後に取得(同一Session中と思われる)した場合に、更新前の値が取れて来たり、
> 「Found shared references to a collection」のエラーが上がったりと、
> 色々と問題を抱えている状況です。

「更新」が永続オブジェクトのプロパティ値の変更とすると,
その後の「取得」の前に Hibernate セッションがフラッシュされ,
DBMS に対する UPDATE が実行されるはずです.
SQL トレースを有効にするなどして確認してください.

もしセッションがフラッシュされないのなら,どこかで FlashMode に
NEVER 等が設定されてしまっているのかもしれません.
S2Hibernate では FlushMode を設定していないはずなので
(ReadOnlySessionInterceptor を除く),アプリケーションで設定
していないか確認してください (あまり設定することはないと思いますが).

もし FlushMode が AUTO にも関わらず UPDATE が実行されていないなら,
明示的に Session#flush() を呼び出す必要があるのかもしれません.

セッションのフラッシュモードと永続オブジェクトの状態に関しては
以下で軽く試しているのでご参考までに.

http://d.hatena.ne.jp/koichik/20040816#1092672019



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




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