[Seasar-user:20898] 例外を握りつぶした場合のトランザクション管理について

Masao Suda [E-MAIL ADDRESS DELETED]
2011年 7月 27日 (水) 13:06:57 JST


須田と申します。
お世話になっております。

現在以下の環境で開発を行っています。

jdk:1.6.0_24
Seasar:2.4.44
SaStruts:1.0.4-sp8
Eclipse:Indigo(build id:20110615-0604)
Dolteng:0.41.0
Apatche-tomcat:7.0.16


データをロードするために、CSVファイルを読み込み、値をエンティティに格納
してinsertする処理を行っているのですが、
以下のように(サービスクラスで)insert処理を行った場合に
SEntityExistsExceptionが発生すると処理が
ロールバックされてしまいます。

for (PageDraft pageDraft : pageDraftList) {
pageDraft.cassetteId = cassetteId;
try {
insert(pageDraft);
} catch (SEntityExistsException e) {
log.error(e + " " + pageDraft.orderCode);
}
}

トランザクションの関連設定はDoltengで設定した状態から変更せず。
サービスクラスで以下のようにして、
@Resource
protected UserTransaction userTransaction;

userTransaction.getStatus() の値をモニタしたところ、最初に
SEntityExistsExceptionが発生した時点(
SEntityExistsException のcatchステートメントでステータス値をモニタした)
で、ステータスが、
0から1に変更されました。デバッグしながら処理を追った感じではここでステー
タスが変更されたため、
ロールバックされてしまっているように見えます。

CSV読み込み中でキーが重複したレコードのインサート等は無視して処理続行、
コミットする場合、
SEntityExistsExceptionをaddCommitRule(Class)で指定するしかないのでしょうか?




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