Quels outils existe-t-il pour les processus de traitement par lots temporisés dans Java EE?
Question
Mon employeur vient de me demander d'exécuter un traitement par lots chronométré dans une application Java EE WebSphere en cours d'exécution. Il est supposé organiser un cours à 23h30 tous les jours.
Je ne connais pas très bien Java EE ni le serveur WebSphere (ou tomcat, dans l'environnement de développement). J'ai fouillé, mais tout ce que j'ai trouvé concerne la classe de minuteur java, mais je ne sais pas comment le définir. ou l'invoquer.
Il semble que la modification du fichier web.xml soit également requise.
Toute aide sera appréciée!
La solution
Vous devriez consulter la bibliothèque Quartz Open-Source d'OpenSymphony. Très facile à utiliser et parfait pour ce genre de chose.
Les TimerTasks sont les mieux adaptés pour exécuter quelque chose dans un avenir proche. Mais pour une exécution répétée dans un délai aussi long, Quartz excelle. Vous pouvez même conserver votre liste de tâches à venir dans un stockage persistant, tel qu'un fichier ou une base de données, de sorte que les travaux chronométrés à venir ne soient pas perdus si votre application est redémarrée.
En outre, il existe une abstraction fantastique pour Quartz dans le cadre Spring.
Autres conseils
Dans WebSphere, vous pouvez utiliser le service de planification pour déclencher l'exécution d'une méthode dans une classe java. Le planificateur fournit un calendrier pour planifier l'exécution de travaux (similaire à cron) ou vous pouvez développer les vôtres.
Voici un lien vers la page décrivant le planificateur dans la documentation WAS 6.1:
http://publib.boulder.ibm.com/infocenter /wasinfo/v6r1/index.jsp
EJB 3.1 disposera de services de minuterie améliorés, ainsi que de points d'ancrage du cycle de vie des applications qui suppriment la nécessité d'utiliser des servlets pour démarrer des tâches sans interaction de l'utilisateur.
Ceci peut répondre au titre de la question, mais pour le " vrai " question concernant une application héritée (écrite il y a plus de 6 mois;)) s'exécutant sur Websphere, je vous conseillerais de vous connecter au servlet de démarrage et au service de minuterie EJB.
Service de minuteur dans J2EE 1.4 (EJB 2.1)
Pour EJB 3.0 (et 3.1 dès que disponible), il existe quelques annotations intéressantes;)
Je ne présenterais pas une autre bibliothèque à moins que vous n'en ayez VRAIMENT besoin. Le service du minuteur devrait suffire à l'exécution quotidienne d'un travail arbitraire.
HTH,
Martin
Dans votre fichier web.xml, vous pouvez configurer un servlet à charger au démarrage.
Syntaxe:
< servlet nom-servlet = 'bonjour'
servlet-class = 'test.HelloWorld' >
< chargement au démarrage / >
< / servlet >
Faites ceci, puis dans la méthode init du servlet, vous pouvez configurer un Timer / TimerTask pour qu’il fasse tout ce que vous devez faire. Les TimerTasks sont comme des threads, sauf que vous pouvez les planifier quand ils seront exécutés.
Quartz fait partie de la distribution standard JBoss 4.2.x.
Et c'est une très bonne bibliothèque qui, sans trop de travail, vous pouvez également définir des workflows simples.
La planification dans WebSphere n'est pas prise en charge.
Si vous êtes sous unix, vous pouvez utiliser crontab pour planifier une requête vers une page de votre application websphere. Je suppose que sur Windows, il est également possible de programmer une demande sur une page. Dans ma crontab, je planifie une demande sur une page Web chaque jour à 8h45
45 8 * * * OBTENIR http://www.domain.com/myBatch?securitykey = très secret
Chaque matin, la servlet myBatch est appelée et je peux faire tout ce qui doit être fait à ce moment-là. Pour éviter que d'autres personnes appellent cette page et démarrent le lot, j'ai ajouté le paramètre securitykey.
WebSphere prend en charge la planification.