Java: удалить текущее запланированное задание в классе, который реализует IScheduledJob - PullRequest
0 голосов
/ 04 мая 2010

При выполнении самого запланированного задания я хочу, чтобы оно не повторялось снова и снова, как я могу это сделать, не имея строки, которую я получил, когда создал задание в первую очередь?

public class UfkJob implements IScheduledJob {

 public void execute(ISchedulingService service) {
   if (...) {
   /* here i want to remove the current running job */
  }
}

Я выполнил задание снаружи, используя команды:

 ISchedulingService service = (ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME);

service.addScheduledJobAfterDelay(5000,new UfkJob(),200);

1 Ответ

1 голос
/ 04 мая 2010

Я только что понял, что сначала я ответил на неправильный вопрос, оставлю его ниже для потомков. Опять предположение я смотрю на правильный API. Добавить поле в UFkJob:

public class UfkJob implements IScheduledJob {

  String jobName = null;

 public void execute(ISchedulingService service) {
   if (... && jobName != null) {
   /* here i want to remove the current running job */
   ISchedulingService service = (ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME);
   service.removeScheduledJob(jobName);
  }
  public void setJobName(String name){
    this.jobName = name;
  }
}

, а затем при планировании работы:

ISchedulingService service = (ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME);
UfkJob job = new UfkJob();
job.setJobName(service.addScheduledJobAfterDelay(5000, job, 200));

или у вас всегда может быть расписание работы:

public class UfkJob implements IScheduledJob {

  String jobName;
  ISchedulingService service;

  public UfkJob(ISchedulingService service){
    this.service = service;
    this.jobName = service.addScheduledJobAfterDelay(5000, this, 200);
  }
  public void execute(ISchedulingService service) {
    if (...) {
      service.removeScheduledJob(jobName);
    }
  }

}

//Your calling code
...
new UfkJob((ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME));

----- Мой оригинальный ответ ниже, я считаю, что неправильный вопрос ----

Я не уверен, что я смотрю на документы API для правильной библиотеки, однако ваш метод вызывает:

service.addScheduledJobAfterDelay(5000,new UfkJob(),200);

определяется как:

addScheduledJobAfterDelay (интермедиат интервал, IScheduledJob, int задержка) Запланируйте работу на периодическую выполнение, которое начнется после указанная задержка.

Ключ "периодическое выполнение". Похоже, что вы ищете это:

addScheduledOnceJob (longtimeDelta, IScheduledJob job) Запланируйте работу для одиночное исполнение в будущем.

Итак, ваш звонок будет:

service.addScheduledOnceJob(5000, new UfkJob());

Который будет выполнять UfkJob один раз через 5 секунд после вызова метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...