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

kubo [E-MAIL ADDRESS DELETED]
2007年 5月 24日 (木) 10:14:24 JST


米原さん

久保です。

> >DBFlute-0.4.4よりBehaviorにupdateNonstrict()というMethodがあります。
> >こちら、Entityに排他制御Annotation(VersionNoとか)を設定していても
> >このMethod実行時は排他制御が行われません。
> >VersionNoに値がSETされていようがいまいが
> >where句の 「and version_no = 3」という条件が付与されません。
> 
> 
> なるほど! その機能、見過ごしてしまってました。。
> updateは、それを使えば、問題なさそうです。
> ただ、deleteNonstrict()が無いのは意図的なことでしょうか。
> deleteもupdateと同じように、楽観的排他を行うので、できれば
> 使用したく思うのですが。

優先度的にupdateを先に実装してました。
deleteもやりましょう。
ちょっと実現可能性を見てみますね。(内部処理的に少しだけややこしいもので...)


> にて、updateBbbTable()で楽観的排他エラーになった場合、
> throwしないとrollbackされず、updateAaaTable();は
> 更新されてしまうと思います。
> 現状、doMethod() はJSFのアクションメソッドで、
> throwsIntercepterを掛けており、throwするとシステムエラー
> としてしいます。
> 
> transactionAspectCustomizerを掛けておきながら、
> throwせずにrollbackさせる方法などはありませんよね??
> いったん専用の例外でthrowして、rollbackさせてから、
> 専用の例外の時だけthrowsIntercepterにてシステムエラー
> にしない(自画面戻り)といった対応をされてたりするの
> でしょうか?

なるほど状況わかりました。

自分のProjectもTeedaを使っていて、
排他エラーで自画面戻るのにどうしてもPageでExceptionをthrowしてます。
ErrorPageManagerをOverrideして各自画面へ戻るようにしようかと思っていました。

doMethod()内でTransactionをRollbackする方法はちょっと思いつきません。
確かに皆どうしてるのか自分も知りたいくらいですね(^^





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