3

私は仕事がいつ完了するかを知ることに依存している状況があります。

基本的に、シングルトンマネージャーは一連の仕事とそのスケジュールを追跡します。BがAに続くと仮定すると、Aがスケジューラーを実行すると、削除されたBのジョブが実行され、Aに時間的に近づくように再スケジュールされます。

私が遭遇した問題は、仕事が終わったときにマネージャーに通知することです

public class Action extends ScheduledEvent implements Job {

    public Action() {
    }

    protected Action(String name, MomentInTime momentInTime, FireEventFrequency repeatFrequency) throws SchedulerException {
        super(momentInTime, repeatFrequency);
    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // Do some work
        EventScheduleManager.getInstance().eventComplete(this);

    }
}

なぜそれが起こるのかは反省によるものであり、スケジューリング時にthis再初期化され、現在はマネージャーに知られていることを理解しています。

それを回避する方法はありますか?スケジュールされたジョブが完了したことをマネージャーエンティティにどのように通知しますか?

4

3 に答える 3

2

結局、仕事の名前をマネージャーに返しました

   EventScheduleManager.getInstance().eventComplete
        (jobExecutionContext.getJobDetail().getName());

そしてマネージャー自身Map<String,ScheduledEvent>がそこからそれを取って維持しました

于 2012-11-13T22:13:12.893 に答える
1

次のようなラッパーを作成できます。

public class DoubleAction extends ScheduledEvent implements Job {
    private final Job job1,job2;

    public DoubleAction(Job job1, Job job2) {
       this.job1=job1;
       this.job2=job2;
    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
       job1.execute(jobExecutionContext);
       job2.execute(jobExecutionContext);
    }
}
于 2012-11-12T23:02:34.867 に答える
0

私が理解しているように、ワークフローベースのジョブ(一方が他方に続くことを保証する必要がある場合)に対する彼らの推奨事項は、最初のジョブが完了したらすぐに実行できるように、後続のジョブのエントリを作成することです。

于 2012-11-12T22:31:07.963 に答える