[[Résolu]Java] Exécuter une action toutes les x minutes ?

Exécuter une action toutes les x minutes ? [[Résolu]Java] - Java - Programmation

Marsh Posté le 16-01-2005 à 16:28:07    

Dans le cadre une appli web sur un serveur tomcat, je vais devoir éxécuter periodiquement une tâche (vérifier une date et une heure de fin d'enchère dans une base de donnée pour mettre fin aux enchères arrivées à échéance)
Je n'ai jamais fait ce genre de chose, quelle serait la meilleure façon de procéder ? J'ai pensé à un thread (j'en ai jamais fait mais je pense que ça doit faire ske je veux) dans une servlet de type load on startup ? Ca tient la route ce genre de truc ou y a un meilleur moyen ?
 
Merci :)


Message édité par glod 2 le 20-01-2005 à 21:56:52
Reply

Marsh Posté le 16-01-2005 à 16:28:07   

Reply

Marsh Posté le 16-01-2005 à 16:41:39    

Y avait deja eu une question similaire sur ce forum :
http://forum.hardware.fr/forum2.ph [...] subcat=390
 
J'espere qu'il y a eu des réponses qui pourront t'aider ;)

Reply

Marsh Posté le 16-01-2005 à 16:46:51    

Ben je pense que le plus simple c est d utiliser des timers (éventuellement ceux de swing) L utilisation n est vraiment pas compilquée... (cf javadoc)  
Sinon si tu n aime pas les timer de swing tu peux le faire avec les timerTask...
PS: n oublie pas que l unitée de temps est la miliseconde  ;)


Message édité par the big ben le 16-01-2005 à 16:47:47
Reply

Marsh Posté le 16-01-2005 à 16:52:20    

patachou a écrit :

Y avait deja eu une question similaire sur ce forum :
http://forum.hardware.fr/forum2.ph [...] subcat=390
 
J'espere qu'il y a eu des réponses qui pourront t'aider ;)


super merci je vais lire ça, apparament le fait d'être dans un contexte j2ee pose problème :/
J'éspère que y a une solution simple en fin de topic :D

Reply

Marsh Posté le 16-01-2005 à 17:07:44    

quartz.

Reply

Marsh Posté le 16-01-2005 à 17:07:57    

(et google)

Reply

Marsh Posté le 16-01-2005 à 17:40:55    

the big ben a écrit :

Ben je pense que le plus simple c est d utiliser des timers (éventuellement ceux de swing) L utilisation n est vraiment pas compilquée... (cf javadoc)  
Sinon si tu n aime pas les timer de swing tu peux le faire avec les timerTask...
PS: n oublie pas que l unitée de temps est la miliseconde  ;)


En même temps, utiliser un composant Swing dans une webapp, c'est un peu tordu quand même.
 
Sinon, mieux que la servlet load on startup pour effectuer des opérations d'initialisation au démarrage de la webapp, il y a ServletContextListener.

Reply

Marsh Posté le 17-01-2005 à 11:49:35    

Glod 2 a écrit :

super merci je vais lire ça, apparament le fait d'être dans un contexte j2ee pose problème :/
J'éspère que y a une solution simple en fin de topic :D


 
dans un contexte j2ee tu devrais utiliser les timer EJB

Reply

Marsh Posté le 18-01-2005 à 10:31:43    

java.util.Timer et java.util.TimerTask répondent parfaitement à ton besoin

Reply

Marsh Posté le 18-01-2005 à 10:36:39    

patachou a écrit :

Y avait deja eu une question similaire sur ce forum :
http://forum.hardware.fr/forum2.ph [...] subcat=390
 
J'espere qu'il y a eu des réponses qui pourront t'aider ;)


 
+1 à ce qui est dit dans ce fil de discussion à propos du fait qu'il est plus propre d'externaliser ces traitement en dehors de ton serveur d'appli J2EE

Reply

Marsh Posté le 18-01-2005 à 10:36:39   

Reply

Marsh Posté le 18-01-2005 à 18:16:35    

alors qu'il y a de quoi le faire dedans? je vois pas ou tu veux en venir là...
autant dans certains ça peut etre tout à fait justifié de les externaliser, autant dans d'autres tu aurais des tas d'avantages à faire ça dans le serveur, donc en faire une regle generale sans connaitre le besoin, je trouve ça un peu douteux non :??:

Reply

Marsh Posté le 20-01-2005 à 21:56:36    

Finalement j'ai utilisé Quartz qui marche nickel, et mon idée 1ère était bonne pour la servlet load on statup, c'est bien comme ça qu'il faut faire a priori (ils filent une servlet de ce type dans le package Quartz comme exemple)
Merci à tous :jap:

Reply

Marsh Posté le 20-01-2005 à 22:19:12    

euh, y'a les ServletContextListener, c'est qd mme plus propre qu'une servlet/load-on-startup.

Reply

Marsh Posté le 20-01-2005 à 22:19:55    

sinon, si t'as qqchose à dire (positif, negatif, ...) à propos de quartz, ça m'interesse.

Reply

Marsh Posté le 20-01-2005 à 22:29:30    

Jvais regarder pour les Listener mais j'ai jamais fait encore :sweat:
Pour Quartz, à par un essai avec Timer et TimerTask j'ai pas assez d'experience et de recul pour en parler, je dirai juste que ça à l'air vraiment bien foutu, puissant et en même temps on peu faire des trucs simples rapidement sans lire des tonnes de doc, rien qu'avec le mini tuto fourni avec.
Enfin y mass possibilités, comme les threads persistants dans une BDD (où Quartz gère tout, on lui file juste une chaîne de connexion et roule), ça je sens que ça va me servir.
Et en survolant comme ça par rapport aux Timers de java, y a déja la possibilité de donner un comportement dans le cas où un Job à échoué qui permet de faire quand même des trucs qui tiennent plus la route que les Timers. Pour le reste, j'ai vraiment fait qu'éfleurer aussi bien les Timers de java que les Jobs de Quartz donc jpeux pas trop comparer.

Reply

Marsh Posté le 20-01-2005 à 22:48:09    

:jap:

Reply

Marsh Posté le 21-01-2005 à 22:37:33    

Pour le ServletContextListener, si jfais ça ça marche ? (première fois que jlutilise pataper :o)
 

Code :
  1. import javax.servlet.*;
  2. import Quartz.Job.*;
  3. public final class ContextListener
  4. implements ServletContextListener {
  5. private ServletContext context = null;
  6. public void contextInitialized(ServletContextEvent event) {
  7.  context = event.getServletContext();
  8.  //Je lance mon Job Quartz
  9. }
  10. public void contextDestroyed(ServletContextEvent event) {
  11.  context = event.getServletContext();
  12.                 //j'arrette mon Job Quartz
  13. }
  14. }

Les ServletContextEvent jmen occupe pas il les lance "tout seul" ? (désolé hein :D)

Reply

Marsh Posté le 21-01-2005 à 22:40:58    

Ah pis jrajoute ça dans mon web.xml
 
<listener>
   <listener-class>
      package.ContextListener
  </listener-class>
</listener>

Reply

Marsh Posté le 21-01-2005 à 23:19:38    

oui c'est ça, mais dans la methode contextDestroyed, tu remets ta variable context à null, au moins à la fin de la methode.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-01-2005 à 23:20:57    

merci :jap:
En passant, pourquoi c'est plus propre comme méthode qu'une load on startup ?

Reply

Marsh Posté le 21-01-2005 à 23:22:47    

ben ça te saute pas aux yeux? j'ai meme pas d'explication, c'est juste un objet qui te permet de faire des "trucs" au demarrage et a l'extinction de ton appli; alors que ta serlvet à la base c'est pour repondre à des requetes.
ds certains cas une servlet-load-on-startup peut etre justifiée, mais pas pour faire ça, à priori


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-01-2005 à 23:34:49    

oki :)

Reply

Marsh Posté le 03-02-2005 à 17:58:22    

the real moins moins a écrit :

ben ça te saute pas aux yeux? j'ai meme pas d'explication, c'est juste un objet qui te permet de faire des "trucs" au demarrage et a l'extinction de ton appli; alors que ta serlvet à la base c'est pour repondre à des requetes.
ds certains cas une servlet-load-on-startup peut etre justifiée, mais pas pour faire ça, à priori


 
 
A part si ultérieurement tu veux authoriser certaine personne à forcer les taches à la main...  :D  
 
Et dans ce cas, tu n'as qu'à implémenter une méthode doGet() et hop le tour est jouer...
 
Comment ca je chipotes :P

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed