[Seasar-user:7776] [DBFlute,S2DAO]Re: 楽観的排他制御について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 5月 23日 (水) 22:05:41 JST


いつもお世話になっております。
米原です。

久保さん、ご回答ありがとうございます。

<1>
>DBFlute-0.4.4よりBehaviorにupdateNonstrict()というMethodがあります。
>こちら、Entityに排他制御Annotation(VersionNoとか)を設定していても
>このMethod実行時は排他制御が行われません。
>VersionNoに値がSETされていようがいまいが
>where句の 「and version_no = 3」という条件が付与されません。


なるほど! その機能、見過ごしてしまってました。。
updateは、それを使えば、問題なさそうです。
ただ、deleteNonstrict()が無いのは意図的なことでしょうか。
deleteもupdateと同じように、楽観的排他を行うので、できれば
使用したく思うのですが。



<2>
トランザクションに関しては、

public void doMethod() {
  try {
    updateAaaTable();
    updateBbbTable();
  }catch(NotSingleRowUpdatedRuntimeException e){
    ・・・
  }
}
にて、updateBbbTable()で楽観的排他エラーになった場合、
throwしないとrollbackされず、updateAaaTable();は
更新されてしまうと思います。
現状、doMethod() はJSFのアクションメソッドで、
throwsIntercepterを掛けており、throwするとシステムエラー
としてしいます。

transactionAspectCustomizerを掛けておきながら、
throwせずにrollbackさせる方法などはありませんよね??
いったん専用の例外でthrowして、rollbackさせてから、
専用の例外の時だけthrowsIntercepterにてシステムエラー
にしない(自画面戻り)といった対応をされてたりするの
でしょうか?

わかりずらい質問ですみません。。。
何かお気づきの点などございましたら、お願い致します。



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