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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top