Grailsでロックを使用しているときに問題が発生しています。Grailsでロックが動作しない
状況は以下の通りです:私はUserクラスを持っている
、その後、belognsTo =ユーザープロパティを持つ別のクラスUserProperty。
ユーザーが同時にこのプロパティを変更するのを避けるために、ユーザーをロックし、その後に新しいプロパティを変更/追加/削除します。
しかし、ロックが機能していないように見えるのは、どちらの場合でもリクエストがトラフになるからです。擬似コードは次のようになります。
User.lock(userId)
log.info "Starting modifiying properties"
addRemoveOrChangePropertiesToUser(userId)
log.info "Finsih modifing properties"
User.save(flush: true)
私の予想している動作は、最初の要求が通過してすべてを記録するということです。そしてそれまで(ユーザーがロックされているため)、2番目のリクエストが待機してから、プロパティの変更を行います。
ログファイルに基づいて、私は完全に異なる動作を見ます。両方のリクエストは待ち時間なしで処理されます(almos simultationiusly)。
私は間違って何を考えていますか? db lockingに関連する概念のいくつかを誤解しましたか?どのようにして目的の動作を達成できますか?
おかげで、 ニコラス
あなたはどのDBを使用していますか? –
これは何か違いがありますか? – Nicolas
なぜ 'user'は小文字ですか?静的クラスメソッドではなく、オブジェクトに対して 'lock(int id)'メソッドを呼び出していますか? –