クラス レベルで LockType READ であるシングルトン コンテナ管理セッション Bean の LockType WRITE メソッドが、LockType READ である同じ Bean 内の別のメソッドを呼び出すとどうなりますか。
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.READ)
public class EmployeBean implements Employee {
@Lock(LockType.WRITE)
public Employee update() {
//update
}
public void calculate () {
//calculate and set
}
}
上記の Bean で、このような実装を行うのは正しいですか? この update() が実行され、同時に他のサービスが calculate() を呼び出すとどうなりますか? サービスは update() が終了するまで待機しますか、それとも並行して calculate() も実行しますか? 並行して実行すると、データが破損したり、データの不一致が発生したりする可能性が高くなると思います。
calculate メソッドはプライベートにすることができ、WRITE 保護メソッドの下でのみ使用できます。こうすることで、同時リクエストによる不一致が発生しないことが保証されます。
上記のような場合に同時リクエストを処理する際の影響を知り、正しいアプローチに従ってください。