Bonjour à tous,
voici mon petit problème : je souhaiterais lancé un job une fois par jour. J'emploie donc Quartz et mon application server est un jboss 4.2 (donc livré avec quartz-ra.rar).
En ce qui concerne la création du job, le cron et le scheduler, je fais confiance à Spring. Voici d'ailleurs mon contexte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <!-- this bean allows to manage a list of triggers --> <bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronDeleteOldOpportunitiesTrigger"/> </list> </property> </bean> <!-- the job will be started every day at 00:00:01 --> <bean id="cronDeleteOldOpportunitiesTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="deleteOldOpportunitiesJob"/> <property name="cronExpression" value="0 * 17 * * ?" /> </bean> <bean id="deleteOldOpportunitiesJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.coyote.backend.jobs.DeleteOldOpportunitiesJob"/> <property name="jobDataAsMap"> <map> <entry key="serviceLocator" value-ref="serviceLocator" /> </map> </property> </bean>
Voici mon job :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 package com.naxosit.backend.jobs; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; import com.coyote.core.locator.ServiceLocator; public class DeleteOldOpportunitiesJob extends QuartzJobBean { private ServiceLocator serviceLocator; private Logger logger = Logger.getLogger(DeleteOldOpportunitiesJob.class); public void setServiceLocator(ServiceLocator serviceLocator) { this.serviceLocator = serviceLocator; } protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { logger.info("DeleteOldOpportunitiesJob is going to delete old job opportunities"); try { Date now = new Date(); List<String> oldOpportunities = serviceLocator.getJobOpportunityService().deleteAllJobsBefore(now); logger.info(oldOpportunities.size() + " has/have been deleted"); } catch (Exception ex) { logger.error("An error occured : " + ex.getMessage()); } } }
- Au démarrage de l'application server, Quartz se lance effectivement bien.
- Les beans sont repertoriés au démarrage de JBoss
Malgré tout cela, le job ne se lance pas. J'espèrais qu'il allait se lancer toutes les minutes de 17h à 17h59 inclus mais rien du tout :-( Quelqu'un a-t-il une idée ?
Merci à tous ceux qui ont tenté ou réussi à m'aider.
Coyote
Partager