2010-05-04 3 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); 

는 다음과 같이 정의된다 : ( 지연 INT, 간격, IScheduledJob 작업을 INT)

addScheduledJobAfterDelay 사후이 시작됩니다주기적인 실행을위한 작업을 예약 지정된 지연.

"정기 실행"키입니다.

addScheduledOnceJob가 (긴 timeDelta, IScheduledJob 작업) 미래에 하나의 실행을 위해 작업 일정 : 당신이 찾고있는 것은 같은데.

그래서 전화는 다음과 같습니다 오초 메서드 호출 후 UfkJob에게 한 시간을 실행할 것

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

합니다.

관련 문제