2010-08-24 23 views
1

Nous utilisons EJB TimerService: s pour contrôler les tâches qui doivent être exécutées à la demande ou déclenchées via une expression cron, certaines seront exécutées toutes les nuits, par ex. collecteurs de statistiques et certains vont courir toutes les 10 s. la vérification des nouvelles commandes devant être traitées, nous devons également pouvoir les activer et désactiver. Cela fonctionne très bien la plupart du temps, mais parfois les processus ne peuvent pas être arrêtés et la seule façon de résoudre le problème est de vider le TimerPool et de redéployer l'application.Spring alternative à TimerService dans EJB 3

Je cherchais une autre solution de notre problème et nous avons essayé une version, avec des fonctionnalités plus de contrôle, de l'exemple ci-dessous: http://www.adam-bien.com/roller/abien/entry/legally_starting_threads_in_ejbs

Il fonctionne très bien mais j'ai le sentiment que nous » re assez proche de la limite de la façon dont vous devriez travailler avec les EJB.

Je suis à la recherche d'une exécution des tâches et ordonnancement: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html

Et il semble comme une façon de se débarrasser de l'EJB: s puisque nous ne les utiliser pour la TimerService et la communication entre le contrôleur et la tâche réelle. Le problème est que j'ai besoin de plus de contrôle que les fichiers de configuration statiques et peut-être que SchedulerFactoryBean maison brassée fonctionne, mais je ne sais pas vraiment où je devrais commencer à chercher?

Type d'emploi

ProcessEngine

  • sera exécuté toutes les 10s et vérifier s'il y a des nouveaux clients et traiter leurs commandes
  • devraient pouvoir tourner le moteur en marche et OFF, avec du savon ou via un réglage dans le DB

StatisticsCollector

  • courrais tous les soirs à 3h du matin par défaut
  • devrait être en mesure d'être déclenché à courir en ce moment sur la demande
+1

http://www.mkyong.com/spring/spring-quartz-scheduler-example/ Eh bien, je ne suis pas sûr de savoir quelle est votre question.Je ne pouvais pas le comprendre bien, mais si vous avez besoin de Timer Task et JOB au printemps avec par exemple regarder le lien –

+0

C'est à peu près ce que je cherche, le problème est que j'ai besoin de plus de contrôle sur la façon dont les emplois sont programmés et étant capable de les activer et désactiver que l'exemple fournit, voir poste édité. – orjan

Répondre

1

Depuis le commentaire ci-dessus, je devine que vous besoin d'un planificateur beaucoup plus complexe. Avez-vous pensé à utiliser Quartz Scheduler?

Il est open source, extensible et assez puissant. La planification se fait via les expressions CRON, qui peuvent répondre aux besoins spécifiés dans votre message. Les inconvénients des Quarts par rapport à EJB sont que les jobs planifiés ne sont pas persistants, ils créent leur propre pool de threads (qui peut ne pas être redimensionné à l'exécution), et il n'y a pas d'équité dans son algorithme de threading (c'est-à-dire si un job n'a pas été déclenché à son heure assignée à cause de la famine, il est mis au rebut). J'ai quand même eu de bonnes expériences avec Quartz dans son ensemble.