Exemple d’intégration du planificateur Struts 2 + Quartz 2

Exemple d'intégration de l'ordonnanceur Struts 2 + Quartz 2

Updated 2012-07-24
L'article est mis à jour pour utiliser les dernières Struts 2 et Quartz 2, et testé sur Tomcat 6 et 7.

Struts 2 n’était pas livré avec un plug-in comme «Struts2-Quartz.jar» prêt, le hack consiste à utiliser un écouteur de servlet standard pour relier les deux frameworks. Voir la relation

Struts 2 <-- (Listener)--> Quartz <---> Scheduler task

Dans ce didacticiel, nous vous montrons comment intégrer à la fois le framework Struts 2 et Quartz Scheduler.

Les outils utilisés :

  1. Jambes 2.3.4

  2. Quartz 2.1.5

  3. Tomcat 6 ou 7

  4. Maven 3

  5. Eclipse 4.2

1. Bibliothèques de dépendances

Pas beaucoup de dépendances, vous avez juste besoin du fichier jar Struts 2 et Quartz.

Fichier: pom.xml

  ...
   

    
    
        org.apache.struts
        struts2-core
        2.3.4
    

    
    
        org.quartz-scheduler
        quartz
        2.1.5
    

        
    
        org.apache.tomcat
        servlet-api
        6.0.35
    

  
  ...

2. Travail du planificateur

Créez un travail Quartz et imprimez une seule ligne.

Fichier: SchedulerJob.java

package com.example.quartz;

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

public class SchedulerJob implements Job {
    public void execute(JobExecutionContext context)
        throws JobExecutionException {

        System.out.println("Struts 2.3.4 + Quartz 2.1.5");

    }
}

3. Écouteur de servlet

Créez une classe d'écouteur de servlet standard pour effectuer les travaux d'intégration. Il appelle le framework du planificateur Quartz dans la méthodecontextInitialized(). Lors de l'initialisation du conteneur Servlet, cette méthodecontextInitialized() sera exécutée automatiquement.

Fichier: QuartzSchedulerListener.java

package com.example.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.example.quartz.SchedulerJob;

public class QuartzSchedulerListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent arg0) {
        //
    }

    public void contextInitialized(ServletContextEvent arg0) {

        JobDetail job = JobBuilder.newJob(SchedulerJob.class)
            .withIdentity("anyJobName", "group1").build();

        try {

            Trigger trigger = TriggerBuilder
              .newTrigger()
              .withIdentity("anyTriggerName", "group1")
              .withSchedule(
                 CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))
              .build();

            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);

        } catch (SchedulerException e) {
            e.printStackTrace();
        }

    }
}

4. web.xml

Placez la classe d'écouteurQuartzSchedulerListener.java dans le fichierweb.xml.

Fichier: web.xml




    Struts 2 Web Application

    
      struts2
      
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
          
    

    
      struts2
      /*
    

    
      
            com.example.listener.QuartzSchedulerListener
          
    

5. Demo

Une fois le projet Struts 2 démarré, la classe d'écoute enregistréeQuartzSchedulerListener.java est déclenchée et appelle le travail planifié Quartz pour exécuter la méthodeSchedulerTask.printSchedulerMessage() toutes les 10 secondes.

INFO: Overriding property struts.i18n.reload - old value: false new value: true
Jul 23, 2012 4:56:47 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true
Jul 23, 2012 4:56:48 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Jul 23, 2012 4:56:48 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Jul 23, 2012 4:56:48 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/38  config=null
Jul 23, 2012 4:56:48 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1215 ms
Struts 2.3.4 + Quartz 2.1.5
Struts 2.3.4 + Quartz 2.1.5

Télécharger le code source

Téléchargez-le -Struts2-Quartz-Example.zip (22 Ko)