一度に 1 人のユーザーのみが実行できるようにしたい grails サービス メソッド load があります。Grails 悲観的ロックを使用してみましたが、時々しか機能しません。私のコントローラーには、次のものがあります。
try {
def country = Country.lock(id)
myService.load(country)
} catch (CannotAcquireLockException ex) {
flash.message = "Another user is modifying ${Country.get(id)}"
}
myService の load メソッドをアトミックにする最良の方法は何ですか?
2 つのメソッドをアトミックにしたい場合はどうすればよいですか (一方が実行中の場合、どちらも実行できません)。
私のサービスの方法:
def load(id) {
def country = Country.get(id)
country.states.each {
...
it.save(flush: true)
}
}
このメソッドに synchronized キーワードを追加すると、保存時に StaleObjectStateException が発生します。