began.2013-04-14Infinispanの楽観的ロック/非観的ロックを確認するInfinispan前に、Infinispanのトランザクション管理とデータバージョニングのコードを書いていて、「楽観的ロックって、もしかして明示的にwrite-skewとバージョニングを有効にしないと効かないんじゃないかなぁ?」という疑問を持ちました。Versioninghttps://docs.jboss.org/author/display/ISPN/Data+Versioningなので、せっかくなのでこの機会にInfinispanのトランザクションにおける楽観的ロックと悲観的ロックを試してみることにしました。今回使用しているInfinispanは、5.2.1.Finalです。最新版は5.3.0.Alpha1ですが、まだパスの方向で...。母体となるコードはこんな感じで用意しました。}}2本スレッドを用意していまして、それぞれFirstWriteThreadとDelayWriteThreadとしています。"value")それぞれのスレッドにトランザクションを開始して更新してもらいます。この時、処理がFirstWriteThread、DelayWriteThreadがトランザクション開始FirstWriteThreadがkeyに対する値を更新するDelayWriteThreadがkeyに対する値を更新するFirstWriteThreadがコミットするDelayWriteThreadがコミットするという順番で行われるようにします。ここで、最後のDelayWriteThreadがコミットする時に、どうなるでしょう?という話ですね。最後に、メインスレッドが両スレッドを待ち合わせた後に、もう1度キャッシュからkeyに対する値を取り出して、結果を確認するようにしています。***/の部分を変えていくようにします。楽観的ロック最初は、とりあえず単に楽観的ロックで設定します。.isolationLevel(IsolationLevel.READ_COMMITTED)では、実行。value-by-delay-write-thread何事もなく実行されましたね。value-by-delay-write-thread完全に後勝ちになっています。今度はwrite-skewとバージョニングを使うようにしてみます。.scheme(VersioningScheme.SIMPLE)実行。...思いっきりコケました。9]呼び出し元には、すでにロールバックされたことが報告されています。value-by-first-write-thread最初のスレッドが更新した値を見ることができます。.scheme(VersioningScheme.SIMPLE)からwriteSkewCheckを外してみましたが、最初の例のようにチェックは行われなくなりました。writeSkewCheckを有効にしたままバージョニングを外すと、今度は設定エラーとなります。いうことで、実質この設定で楽観的ロックを行うってことでしょうね。非観的ロック今度は、非観的ロックにいってみます。設定を以下のように変更します。.lockAcquisitionTimeout(0L)わかりやすいように、ロックが取れなかったらさっさと諦めてもらうようにしました。value-by-first-write-threadなんかログが入り乱れていますが、DelayWriteThreadがputする時にロックが取れなくて例外が投げられています。よって、最初にロックを取ったFirstWriteThreadの結果が有効です。READ」に変えても結果は同じです。そりゃあ、そうですよね...。クラスタリングにすると今回はローカルモードで行いましたが、これをクラスタリングモードにするとちょっと結果が変わりました。"value")と値を設定していますが、これがあるかないかで楽観的ロックの方は動きが変わります。具体的には、ローカルモードだと楽観的ロックが効きますが、クラスタリングモードにすると後勝ちになってしまいました。後勝ちになった時のバージョン番号は「1」だったので、クラスタリング時の「更新オペレーション」は阻止できても、「登録オペレーション」は阻止できないということかな。今回書いたコードも、一応載せておきます。最初のDefaultCacheManagerとCacheの設定を変えると、楽観的ロックも悲観的ロックも、ローカルモードにもクラスタリングモードにも切り替えられます。7がリリースされましたね。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro月別アーカイブはてなブログをはじめよう!Kazuhiraさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。