[Seasar-user:13132] Re: VersionNoによる排他制御の値のインクリメントについて

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2008年 3月 3日 (月) 19:03:46 JST


中村(taedium)です。

>  自動更新SQLのVersionNoのインクリメントの制御についてお伺いします。
>  以前、[Seasar-user:10429]にて会話されている内容に関わる問題ですが、
>  使い方によっては排他にならないケースが出てくると思いメールしました。

報告ありがとうございます。

>  この場合再実行してもエラーにしたいので、
>  (つまり、再検索して新しいVersionNoにしないと更新できないようにしたい)
>  同じポインタのVersionNoを1インクリメントするのではなく、SQLの式を組み立てるときに
>  1インクリメントした値を代入する仕様が望ましいのですが、[Seasar-user:10429]の仕様と
>  相反する仕様になると思います。
> 
>  例外が発生した場合は、業務ロジックで1戻す処理等をしなければならないでしょうか?
>  更新時に一律インクリメントする・しないを設定するオプション等があればうれしいのですが。
>  また他に代案があればご教授願います。

S2Daoが無条件にBeanのVersionNoをインクリメントしてしまうのは、
そもそもまちがっているように思われます。

NotSingleRowUpdateRuntimeExceptionをスローするときは
インクリメントすべきではないですね。
瀧さんが指摘している通り、排他にならないケースが発生して
しまいます(リトライをする処理など)。

例外が発生するときは、インクリメントしないように修正する方向で
検討したいと思います。
-- 
Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>



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