Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Introduzione a Quartz

Panoramica sulla libreria open source che permette di schedulare i propri processi da una qualsiasi applicazione Java (Desktop o Web)
Panoramica sulla libreria open source che permette di schedulare i propri processi da una qualsiasi applicazione Java (Desktop o Web)
Link copiato negli appunti

Quartz è una libreria opensource che permette di schedulare i propri processi (job) da una qualsiasi applicazione java, sia desktop, che Web.

Dal sito ufficiale del progetto è possibile scaricare lo zip contenente sia la libreria che la documentazione. L'ultima versione rilasciata nel momento in cui questo articolo viene scritto, è la 1.6.2.

Quartz offre numerosi vantaggi al programmatore, analiziamo i principali:

  • i processi possono essere configurati molto semplicemente, seguendo la sintassi delle familiari espressioni crontab di unix.
  • i processi possono essere resi persistenti facilmente, perché possono essere memorizzati da qualche parte (ad esempio in una banca dati), ed essere rischedulati in fase di start-up dell'applicazione.
  • i processi possono essere schedulati anche in un ambiente di cluster.
  • i processi schedulati e il loro flusso di esecuzione può essere monitorato facilmente.

Per prendere confidenza con la libreria, creiamo una semplice applicazione java che permette di schedulare un processo che verrà eseguito ogni minuto, a partire dall'istante in cui viene schedulato.

Nei nostri esempi è necessario includere le seguenti librerie principali, utilizzate da quartz, che troviamo nello zip scaricabile dal sito ufficiale.

  • commons-beanutils-1.7.0.jar
  • commons-collections-3.2.jar
  • commons-digester-1.8.jar
  • commons-logging-1.1.jar
  • jta.jar
  • quartz-1.6.2.jar

Per semplicità il nostro processo schedulato, stamperà soltanto una scritta a video.

Per creare un processo schedulabile con Quartz, occorre definire una classe che implementa l'interfaccia org.quartz.Job. Tale interfaccia, definisce il metodo execute che dovrà essere implementato nella nostra classe. Il metodo execute riceve in ingresso un'istanza della classe JobExecutionContext che contiene tutte le informazioni sul processo in esecuzione, come ad esempio il suo nome, il suo gruppo di appartenenza, l'orario di inizio elaborazione ed altro ancora.

package lucasantaniello.jobs;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job{
  public void execute(JobExecutionContext jec) throws JobExecutionException{
    System.out.println("Ciao sono il processo " + jec.getJobDetail().getName() + "... sono stato eseguito");
  }
}

Fatto ciò vediamo come schedulare il processo utilizzando Quartz.

package lucasantaniello;

import java.util.Date;

import lucasantaniello.jobs.MyJob;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

public class Start {
  public static void main(String[] args) throws Exception {
    SchedulerFactory schedFactory = new StdSchedulerFactory();
    Scheduler sched = schedFactory.getScheduler();
    sched.start();
    JobDetail job = new JobDetail("myJob", null, MyJob.class);
    Trigger trigger = TriggerUtils.makeMinutelyTrigger();
    trigger.setStartTime(new Date());
    trigger.setName("myTrigger");
    sched.scheduleJob(job, trigger);
  }
}

Mediante un'istanza della classe ScheduleFactory, otteniamo un'istanza di Scheduler. La classe Scheduler permette di schedulare un processo, richiamando il suo metodo scheduleJob, che riceve in ingresso un'istanza della classe JobDetail e un'istanza della classe Trigger.

La classe JobDetail permette di dare un nome al nostro processo e di associargli la classe java che abbiamo creato precedentemente.

La classe Trigger, invece, ci permette di configurare questo processo ed indicare allo scheduler quando eseguirlo.

In questo caso creiamo un Trigger di tipo Minutely (minuto), cioè un trigger che parte ogni minuto. Mediante il metodo setStartTime, invece, stabiliamo l'orario a partire dal quale la schedulazione ha inizio.

Naturalmente Quartz mette a disposizione diverse tipologie di trigger, tra le quali:

  • TriggerUtils.makeHourlyTrigger() - che permette di eseguire il processo ogni ora
  • TriggerUtils.makeDailyTrigger() - che permette di eseguire il processo ogni giorno
  • TriggerUtils.makeWeeklyTrigger() - che permette di eseguire il processo ogni settimana

Ti consigliamo anche