-
Servlet et thread
Bonjour,
je voudrais faire une tache régulièrement (tous les dimanches ou tous les jours), après quelques recherches, je me suis lancé dans les threads, mais là 2 choses:
1 - Comment lancer mon thread dans l'application? et où le lancer surtout?
2 - J'ai lu qu'il n'était pas conseillé de lancer des threads, si cela s'avère vrai, y a t-il un moyen de faire une tache cyclique quand même?
Source pour les threads non autorisés
Sinon y a t-il d'autres moyens que les threads pour lancer ces taches?
Merci de vos conseils.
-
L'api Java Quartz est faite pour.
-
il n'est effectivement pas recommandé de lancer des threads car le conteneur n'a pasl e controle dessus, ce qui posse problème pour arrêter la webapp. Seulement, parfois, on a pas vraiment le choix puisque oracle ne fournis pas d'alternative standard pour les jobs réguliers :)
Quartz est effectivement ce qu'il te faut. Il faudra configurer un Listener qui le démarre et l'arrête en même temps que ton application ;)
-
L'utilisation des classes "Timer" et "TimerTask" posent aussi le même problème que les threads ou faut-il obligatoirement passer par "Quartz"?
-
Pour moi non, c'est juste que l'API met à ta dispo des methodes beaucoup plus souples. T'as vite fait de te familiariser avec.
-
D'accord merci beaucoup,
par contre il y a 2 constructeurs, un qui lance un thread bloquant, l'autre demon, Si j'ai bien compris, le thread bloquant prend la main pour s'exécuter immédiatement alors que le demon attend la mise en attente du thread principal.
De plus le thread bloquant s’arrête en même temps que la machine virtuelle alors que le demon s’arrête en même temps que l'application.
Donc pour mon application, si j'utilise un thread demon, je n'ai pas à faire un "listener" sur l’arrêt de l'app, par contre il faut arrêter l'exécution du thread principal et ça je sais pas où le mettre et si j'uitilise un thread bloquant il faudra que je fasse un "listener" sur le lancement et l'arrêt de mon app.
Selon vous quelle est la solution la plus appropriée?
-
Apparemment, le plus simple serrait de faire un thread bloquant et en implémentant l'interface "ServletContextListener", je pourrai faire des actions au démarrage et à l’arrêt de l'application.
Juste une petite question: j’implémente quelle servlet? une que j'utilise déjà ou j'en fais une nouvelle qui restera vide?
-
non, les threads demon/non démons, ca joue au niveau de la JVM. Dans tous les cas, pour arrêter des threads à la fin de ta webapp il faut
1) un listener ou autre moyen de détecter l'arrêt
2) des threads que tu peux notifier de l'arrêt, ca veux dire les coder correctement.
L'avantage de quartz c'est que la partie "threads qu'on peux notifier de l'arrêt" est déjà faite, il suffit de faire un shutdown() sur le scheduler ;)
-
Merci pour toutes vos réponses,
Je pense utiliser Quarts puisqu'il y a déjà un "Job" pour envoyer un mail "SendMailJob", et c'est exactement ce que je veux faire.
Il va falloir que je fasse quelques tutoriels parce que c'est quand même une grosse librairie.
Merci encore.