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

林 祐一郎 [E-MAIL ADDRESS DELETED]
2007年 9月 10日 (月) 21:23:52 JST


ひが様
近藤様
小林様

いつもお世話になっております。
林祐一郎です。

○ひが様
>トランザクションありでDBへの登録処理をしているのか
>確認してください。
>トランザクションなしだと、中途半端な状態になります。

○近藤様
>トランザクションが使用されているかどうかが第一だと思います。
>素の状態では、オートコミットになってしまいますので、随時commitされます。
>確認方法は、ログの中に「トランザクションを開始しました」というログが
>出力されて入れば、トランザクションは使用されています。
>トランザクションが使用されていない用であれば、以下リンクを参考にdicon
>ファイルを設定すればトランザクションを適用することができます。
>
>http://s2container.seasar.org/2.3/ja/tx.html
ありがとうございます。
トランザクションの設定をもう一度、見直してみました。
トランザクションの設定に関しては、お2人の言われていたよう、
設定がなされていました。

○小林様
>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-SNAPSH
OT/s2-dao-1.0.47-20070910.101146-4.jar
バージョンアップが困難そうなので、
添付のソースにて対応使用と思います。
このソースは、package指定どおりの階層をWEB-INF/classes に
作って配置して、からでないと動かないということですよね。

まず、ためしに動かしてみます。

ありがとうございます。
後日、結果を報告させていただきます。

以上です。

-----Original Message-----
From: [E-MAIL ADDRESS DELETED]
[mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Koichi Kobayashi
Sent: Monday, September 10, 2007 7:30 PM
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10444] Re: [S2Dao]サーバ再起動時の動作に関して

小林 (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-SNAPSHO
T/s2-dao-1.0.47-20070910.101146-4.jar


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




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