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)