2010-05-04 1 views
0

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

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

Я просто понял, что я думаю, что я ответил на тот вопрос изначально, я оставлю его ниже ради потомства. Снова предположение, что я смотрю на правильный 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 (INT интервала, IScheduledJob работы, внутр задержки) График работы для периодического исполнения, который начнется после того, как Указанная задержка.

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

addScheduledOnceJob (длинный timeDelta, IScheduledJob работы) График работы для одного исполнения в будущем.

Таким образом, ваш звонок будет:

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

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