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 :
-
Jambes 2.3.4
-
Quartz 2.1.5
-
Tomcat 6 ou 7
-
Maven 3
-
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)