次の状況で助けが必要です。属性Job
を持つエンティティの階層を想像してください。progress
一部のジョブは、ジョブ ツリーを作成する複数のサブジョブで構成されます。これらの複合ジョブの進行状況は、サブジョブから計算されます。下位ジョブの進行状況は定期的に更新され、ツリー全体の進行状況がボトムアップで再計算されます。ジョブの進行状況は、受信した JMS メッセージを介して更新されます。この場合、ジョブは JPA を介してデータベースからフェッチされ、進行状況が変更され、再帰的な再計算が開始されます。
これがクラスターで実行されている場合、ロックをどのように処理すればよいですか? 2 つのサブジョブが 0% から 100% に更新され、親ジョブが 100% ではなく 50% になる状況は避けたいと思います。これは、両方の更新が 0%、100%、またはその逆を参照するためです。
私が最初に考えたのは、ジョブ オブジェクトで同期を使用することでした。ただし、複数の実行時オブジェクトがデータベース内の同じレコードを表す可能性があるため、これは問題です。
この状況を処理するための効率的で適切な方法を教えてください。