2010-05-04 2 views
0

Dans l'exécution du travail planifié lui-même je veux l'empêcher d'être exécuté encore et encore, comment puis-je le faire sans avoir la chaîne que j'ai reçue quand j'ai créé le travail en premier lieu?java: supprime le travail planifié en cours dans une classe qui implémente IScheduledJob

public class UfkJob implements IScheduledJob { 

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

J'ai exécuté le travail à l'extérieur à l'aide des commandes:

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

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

Répondre

1

Je viens de réaliser que je crois avoir répondu à la mauvaise question d'abord, je vais le laisser ci-dessous pour la postérité. Encore une fois je suppose que je regarde la bonne API. Ajouter un champ à 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; 
    } 
} 

puis lorsque vous planifiez le travail:

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

ou vous pouvez toujours avoir l'horaire de travail lui-même:

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

----- Ma réponse originale ci-dessous, je crois que pour la mauvaise question ----

Je ne suis pas sûr si je regarde les documents de l'API pour le bibliothèque droite, mais votre appel de méthode:

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

est défini comme:

addScheduledJobAfterDelay (int intervalle , emploi IScheduledJob, int retard) Planifier un emploi pour l'exécution périodique qui commencera après la délai spécifié.

La clé étant "exécution périodique". Il ressemble à ce que vous recherchez est:

addScheduledOnceJob (longue timedelta, emploi IScheduledJob) Planifier un emploi pour exécution unique à l'avenir.

donc votre appel serait:

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

qui exécuterait le UfkJob une seule fois 5 secondes après l'appel de méthode.

Questions connexes