2010-04-06 14 views
1

Je suis en train de câbler Guice (Java), planificateur Quartz et iBatis (iBaGuice) pour effectuer les opérations suivantes:Guice + quartz + iBatis

  1. ligne de commande Démarrer utilitaire scanner à l'aide main()
  2. périodiquement répertoire d'analyse (fourni comme argument) pour les fichiers contenant la sortie au format XML (ou YAML)
  3. Lorsque le fichier est détecté, analyser et résultat de sortie à la base de données

Les problèmes:

  1. J'ai utilisé this example pour câbler Guice et Quartz. Cependant, je me manque des détails importants que je me pose dans les commentaires, mais le poste est un peu daté et je cite ici aussi:
  1. Il est pas évident de mettre en place la planificateur. Où et comment dois-je câbler le Trigger (je peux utiliser Trigger#makeMinutelyTrigger)?
  2. J'ai vraiment juste un type de travail que j'exécuterai, je comprends que les détails dans le JobFactory # newJob viennent du paramètre TriggerFiredBundle mais où/comment est-ce que je fais le câblage? Et où/comment puis-je créer ou fil de travail concret?

P.S. Je suis allé un peu plus loin en créant et en câblant ScheduleProvider. Maintenant, je suis coincé avec la façon de planifier réellement le travail dans cet extrait suivant. Il coutures que ma méthode JobFactory#newJob est jamais appelé

public class CollectorServiceImpl implements CollectorService { 
Scheduler scheduler; 

/** 
* @throws SchedulerException 
*/ 
@Inject 
public CollectorServiceImpl(final SchedulerFactory factory, final GuiceJobFactory jobFactory) 
     throws SchedulerException { 
    scheduler = factory.getScheduler(); 
    scheduler.setJobFactory(jobFactory); 
} 

/** 
* @throws SchedulerException 
* @see teradata.quantum.reporting.collector.service.CollectorService#start() 
*/ 
@Override 
public void start() throws SchedulerException { 
    Trigger trigger = TriggerUtils.makeMinutelyTrigger("MIN_TRIGGER"); 
    scheduler.scheduleJob(trigger); // this fails trigger validation since no job name is provided 
    scheduler.start(); 
} 

}

Répondre

2

coeur à votre problème, vous ne pas planifier en fait une classe d'emploi:

getScheduler().scheduleJob(new JobDetail("myFooJob", null, FooJob.class), 
     TriggerUtils.makeMinutelyTrigger("MIN_TRIGGER")); 

réponse complète & code démo sur http://www.codesmell.org/blog/2009/01/quartz-fits/

+0

Merci Uwe - c'est exactement ce qui me manquait! – Bostone

0

Avez-vous vraiment besoin d'ordonnancement, ou tout simplement l'exécution de tâches répétitives à intervalles fixes? Si c'est le cas, jetez un coup d'oeil à la construction de Java dans ExecutorService, en particulier le ScheduledThreadPoolExecutor. Enregistre un cadre entier pour quelque chose d'assez simple :)

+0

C'est premier pas. J'ai vraiment besoin d'un programmateur de type cron dans un proche avenir et Quartz fait l'affaire – Bostone