[Seasar-user:10444] Re: [S2Dao]サーバ再起動時の動作に関して

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 9月 10日 (月) 19:30:22 JST


小林 (koichik) です.

Date:    Mon, 10 Sep 2007 16:00:16 +0900
From:    林 祐一郎 <[E-MAIL ADDRESS DELETED]>
To:       <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:10441] [S2Dao]サーバ再起動時の動作に関して

> 現在、私が携わっているプロジェクトで、
> 『サーブレットコンテナの再起動時と、DBへの登録処理とが重なった場合、
>  データの登録(コミット)が中途半端な状態で行われる』
> という現象が発生いたしました。

Oracle の JDBC ドライバは,コネクションをクローズ
する際に,

・自動コミットモードがオフ
・未コミットのトランザクションがある

場合はトランザクションをコミットしてしまうようです.
以下のドキュメントの「注意」.

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/basic.htm#sthref117

しかし,Seasar2 のコネクションプールは
終了時にコネクションを単にクローズしていました.

そのため,Seasar2 が管理しているトランザクションが
開始されている (自動コミットモードがオフ) 状態で
Web コンテナが終了されると,コネクションプール及び
コネクションがクローズされ,未コミットの
トランザクションがコミットされてしまうことになります.

これはまずいので,コネクションをクローズする際に
自動コミットモードがオフであればトランザクションを
ロールバックするように修正しました.

以下に SNAPSHOT を起きましたが,これらを使って頂くには
S2Dao のバージョンアップも必要になってしまいます.
その場合,dao.dicon 等の修正も必要になるらしいのですが,
そのドキュメントはまだ揃っていないとのことです.

もしバージョンアップが困難であれば,添付のソースを
アプリケーションのソースフォルダに加えてください.
Seasar2 の Jar ファイルよりも WEB-INF/classes に
あるクラスが優先的に使用されます.

http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.3.23-SNAPSHOT/s2-framework-2.3.23-20070910.095704-3.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-extension/2.3.23-SNAPSHOT/s2-extension-2.3.23-20070910.095704-3.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/dao/s2-dao/1.0.47-SNAPSHOT/s2-dao-1.0.47-20070910.101146-4.jar


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: ConnectionWrapperImpl.java
型:         application/octet-stream
サイズ:     15923 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20070910/1e78cb64/attachment-0001.obj 


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