2008-09-16 6 views
2

Mon employeur m'a simplement demandé d'exécuter un traitement par lots temporisé dans une application Java EE WebSphere en cours d'exécution. Il est censé diriger une certaine classe à 23h30 tous les jours. Je ne suis pas très familier avec Java EE ni le serveur WebSphere (ou Tomcat, dans l'environnement de développement), et j'ai creusé autour, mais tout ce que j'ai trouvé est sur la classe java timer mais pas comment définir ou l'invoquer.Quels sont les outils disponibles pour les traitements par lots temporisés dans Java EE?

Il semble que la modification du fichier web.xml soit également requise.

Toute aide sera appréciée!

Répondre

5

Vous devriez regarder le code source ouvert Quartz library d'OpenSymphony. Très facile à utiliser et parfait pour ce genre de chose. TimerTasks sont les mieux adaptés pour exécuter quelque chose dans un court laps de temps dans le futur. Mais pour une exécution répétée dans une grande période comme celle-ci, 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, afin que les tâches à venir ne soient pas perdues si votre application est redémarrée.

En outre, il y a une abstraction fantastique pour Quartz dans le cadre du printemps.

0

Dans votre fichier web.xml, vous pouvez configurer une servlet à charger au démarrage.
Syntaxe:

servlet < servlet-name = 'bonjour' servlet-class = 'test.HelloWorld' >
< charge sur le démarrage/>
</servlet >

Pour ce faire, , puis dans la méthode init du servlet, vous pouvez configurer un Timer/TimerTask pour faire ce que vous devez faire. TimerTasks sont comme des Threads, sauf que vous pouvez les programmer quand ils doivent être exécutés.

0

Quartz fait partie de la distribution JBoss 4.2.x standard.

Et c'est une très bonne bibliothèque, que sans beaucoup de travail, vous pouvez également définir des flux de travail simples.

0

La prise en charge de la planification dans WebSphere n'est pas prise en charge.

Si vous êtes sur unix, vous pouvez utiliser crontab pour planifier une requête sur une page de votre application websphere. Je suppose que sur les fenêtres il y a aussi une possibilité de programmer une requête sur une page. Dans mon crontab je planifie une demande à une page Web chaque jour à 8:45

45 8 * * * GET http://www.domain.com/myBatch?securitykey=verysecret

Maintenant, chaque matin, le servlet myBatch est appelé et là, je peux faire tout ce qui doit être fait à ce temps. Pour éviter que d'autres personnes appellent cette page et démarrent le batch, j'ai ajouté le paramètre securitykey.

+0

Ouais, et vous ajoutez régulièrement à chaque fichier journal qui répertorie l'accès HTTP ... Vraiment, VerySecret ... –

+0

Il fonctionne sur mon propre serveur et je suis le seul à voir les fichiers journaux. C'est juste pour m'assurer que les autres ne démarreront pas mon lot. Le point que je voulais faire ici est que vous pouvez utiliser crontab pour appeler une servlet. Fixez-le comme vous le jugez nécessaire. Fonctionne parfaitement pour moi. – boes

1

EJB 3.1 bénéficiera de services de temporisation améliorés, ainsi que de crochets de cycle de vie des applications qui suppriment la nécessité d'utiliser des servlets pour démarrer des tâches sans intervention de l'utilisateur.

Cela peut répondre au titre de la question, mais pour la "vraie" question concernant une application héritée (écrite il y a plus de 6 mois;)) s'exécutant sur websphere je recommanderais d'utiliser la servlet de démarrage et l'EJB service de minuterie.

Timer Service in J2EE 1.4 (EJB 2.1)

Pour EJB 3.0 (et 3.1 dès que possible), il y a quelques annotations belles;)

Je ne présenterai un autre library à moins que vous vraiment besoin. Le service de minuterie devrait suffire pour effectuer un travail arbitraire sur une base quotidienne.

HTH,
Martin

+0

Je l'ai essayé et je n'ai trouvé aucun moyen de créer le minuteur, car la méthode de démarrage de la servlet (init) n'a pas accès à un contexte qui fournit l'API du service de minuteur. J'ai posté cela comme une nouvelle question dans http://stackoverflow.com/questions/1024081/ – mjn

2

Dans WebSphere, vous pouvez utiliser le service Scheduler pour déclencher l'exécution d'une méthode dans une classe java. Le planificateur fournit un calendrier pour planifier l'exécution des tâches (similaire à cron) ou vous pouvez développer le vôtre.

Voici un lien vers la page décrivant le planificateur dans le WAS 6.1 Documentation:

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp

Questions connexes