石英调度器,如何知道作业何时完成

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被重新初始化,并且现在已被经理知道。

有没有办法规避这个问题?你如何通知经理实体已经完成了调度的工作?

3个回答

2
我最终把工作名称退回给经理。
   EventScheduleManager.getInstance().eventComplete
        (jobExecutionContext.getJobDetail().getName());

经理本身维护了Map<String,ScheduledEvent>,从那里获取它。


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);
    }
}

-1
据我理解,他们针对基于工作流的工作(其中必须确保一个任务跟随另一个任务)的建议是,在第一个任务完成时为其后继任务创建一个条目以立即执行。

你能否提供一个例子? - James Raitsev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接