Jobplanlægning

Indtil videre har eksemplerne demonstreret oprettelse af, planlægning af og rapportering om status for simple job. Jobplanlægningsmekanismen er faktisk langt mere kraftig end det, der er vist indtil videre. Du kan have langt mere detaljeret kontrol over den måde, dine job planlægges på vha. prioriteter, forsinkelser og tilpassede planlægningsbetingelser.

Jobprioriteter

En jobprioritet kan bruges til at etablere vigtigheden af et job i forhold til andre job i systemet. Hvis der angives en prioritet for et job, har det ikke indvirkning på det job, der allerede udføres, men den har indflydelse på, hvordan et ventende job planlægges i forhold til andre job. Prioriteten kan være en af flere foruddefinerede prioritetskonstanter:

Standardprioriteten for et job er LONG. Følgende stykke kode opretter det job, vi har benyttet tidligere, men angiver prioriteten til DECORATE for at angive, at det har laveste prioritet:

   TrivialJob job = new TrivialJob();
   job.setPriority(Job.DECORATE);
   job.schedule();

Planlæg med forsinkelse

En teknik til brug for styring af, hvordan et job planlægges, er at bruge en planlægningsforsinkelse. En planlægningsforsinkelse kan angives, når jobbet planlægges. Jobbet forsinkes i det angivne antal millisekunder, inden det er planlagt.

   TrivialJob job = new TrivialJob();
   job.schedule(1000);  // venter et sekund inden planlægning

Planlæg job igen

At planlægge et job, der allerede venter, eller som er i dvale, har ingen virkning. Men at planlægge et job, der allerede udføres, bevirker, at det planlægges igen, når det er afsluttet. Denne mekanisme er nyttig i forbindelse med gentagne job, f.eks. polling-løkker, der udføres i baggrunden. Hvis jobbet planlægges igen flere gange, mens det udføres, benyttes kun den seneste omplanlægning. Følgende stykke kode definerer et job, der planlægger sig selv igen, så det udføres 10 sekunder efter, den aktuelle gentagelse er færdig.

   class RepetitiveTrivialJob extends Job {
      public RepetitiveTrivialJob() {
         super("Repetitive Trivial Job");
      }
         public IStatus run(IProgressMonitor monitor) {
         System.out.println("Running the job.");
         // planlægges igen efter 10 sekunder
         schedule(10000);
            return Status.OK_STATUS;
      }
   }

Tilpassede planlægningsbetingelser

Yderligere protokol i klassen Job tillader, at et job kontrollerer for betingelser, umiddelbart inden det er planlagt eller udført. Dette illustreres bedst ved et eksempel:

class JobWithPreconditions extends Job {
	...
	public boolean shouldSchedule() {
		return super.shouldSchedule() && checkJobPreconditions();
	}
	public boolean shouldRun() {
		return super.shouldRun() && checkJobPreconditions();
	}
	...
}

Metoden shouldSchedule kaldes lige efter, at jobstyringsfunktionen har placeret jobbet i køen. Derved kan jobbet annullere sig selv, hvis de grundlæggende betingelser for planlægning ikke er opfyldt. Jobbet bør returnere false - det er ikke relevant at planlægge det. På samme måde kaldes metoden shouldRun, umiddelbart inden jobstyringsfunktionen udfører jobbet. Det er på dette tidspunkt, at andre yderligere betingelser, der skal være opfyldt, inden jobbet udføres, skal kontrolleres.