2017-09-19 22 views
0

Je travaille sur les files d'attente JMS. Mon exigence est de surveiller la taille de la file d'attente et d'envoyer des courriels une fois qu'il n'y a pas de messages dans la file d'attente. Le travail Cronjob surveille la file d'attente et déclenché sur le premier message de la file d'attente. Voici le code pour déclencher le travail.Hybris cronjob - démarrer cronjob si ne fonctionne pas

CronJobModel CronJobModel = new CronJobModel(); 
CronJobModel.setCode("Job1"); 
CronJobModel = flexibleSearchService 
     .getModelByExample(CronJobModel); 

modelService.save(CronJobModel); 

LOG.debug(" Check and start job"); 

if (!cronJobService.isRunning(CronJobModel)) {    
    LOG.info("Job initiated on first message in the Queue. "); 
    cronJobService.performCronJob(CronJobModel); 

     LOG.info("Job status::" + cronJobService.isRunning(CronJobModel)); 

} 

sortie de la console

Job a lancé le premier message dans la file d'attente.

Statut d'emploi :: faux

En conséquence, le travail est déclenché plus d'une fois. Pourquoi le cronjob n'a pas commencé et passe immédiatement à l'état de fonctionnement? Y a-t-il une meilleure façon d'identifier le travail qui s'est déclenché et de ne pas déclencher à nouveau?

Répondre

1

Vous pouvez essayer de faire un

modelService.refresh(CronJobModel) 

donc par exemple .:

if (!cronJobService.isRunning(CronJobModel)) {    
    LOG.info("Job initiated on first message in the Queue. "); 
    cronJobService.performCronJob(CronJobModel); 
    modelService.refresh(CronJobModel); 
    LOG.info("Job status::" + cronJobService.isRunning(CronJobModel)); 
} 

Cela ira chercher les dernières informations de la db (dans le cas par exemple un autre thread fait le changement d'état RUNNING). Je ne sais pas si c'est une bonne approche dans l'ensemble.