[J2EE] Notifier au contexte qu'une tâche est terminée.

Notifier au contexte qu'une tâche est terminée. [J2EE] - Java - Programmation

Marsh Posté le 10-03-2005 à 20:28:56    

Hello,
 
dans mon appli web (serveur tomcat), j'ai une tache quartz qui lance un traitement lourd une fois par semaine. Ce traîteent se fait dans des classes java simple. J'aimrais pouvoir notifier mon contexte web que le traitement est terminé, pour que mes JSP soient "au courant" qu'ils peuvent exploiter les nouvelles données. J'ai pas trop d'idée sur comment faire ça, donc je me tourne vers vous :jap:
 
Merci.

Reply

Marsh Posté le 10-03-2005 à 20:28:56   

Reply

Marsh Posté le 10-03-2005 à 20:59:42    

ton traitement est executé au sein du serveur tomcat ?
si oui, tu as juste à mettre un objet dans le context pour prévenir que c'est terminé ...

Reply

Marsh Posté le 10-03-2005 à 21:10:52    

Oui je crois. J'avais pensé à mettre un truc dans le contexte mais je ne sais pas comment le récupérer, le contexte, à partir des classes qui font le traîtement (qui sont des POJO tous simples). A mon avis oui le traîtement se fait dans tomcat puisque dans les classes sont dans le WEB-INF de ma webapp, m'enfin chuis pas bien sûr d'avoir compris ta question :sweat:

Reply

Marsh Posté le 10-03-2005 à 21:12:30    

tu lances une JVM à part ? ou c'est la JVM qui execute le serveur tomcat qui execute ton traitement ?
 
t'as qu'à passer le contexte à l'objet qui fait le traitement ...

Reply

Marsh Posté le 10-03-2005 à 21:29:19    

Ah oui pas con, mais jsais pas si jpeux faire ça.
Je reprends la chaîne des appels :
Une servlet initialise les jobs quartz, qui va donc tourner en fond. A la fin de la semaine, le le scheduler quartz se réveille et appelle ses jobs par
 

Code :
  1. public class MatchJob implements Job {
  2.    
  3.     /** Creates a new instance of MatchJob */
  4.     public MatchJob() {
  5.     }
  6.    
  7.     public void execute(JobExecutionContext cntxt)
  8.     throws JobExecutionException {


 
Le blem c'et que j'ai pas de contrôle sur la façon dont quartz appelle ses petits, donc je peux changer aucune méthode d'appel :( (à moins que qque chose m'échappe)
 

Reply

Marsh Posté le 10-03-2005 à 21:48:22    

pourquoi t'as mis [J2EE] dans ton titre?


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

Marsh Posté le 10-03-2005 à 21:50:23    

ben pkoi tu le passes pas au moment où tu créés tes jobs quartz ?

Reply

Marsh Posté le 10-03-2005 à 21:50:51    

(perso je pense qu'il doit y avoir une solution plus élégante :o)


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

Marsh Posté le 10-03-2005 à 21:51:50    

the real moins moins a écrit :

pourquoi t'as mis [J2EE] dans ton titre?


bein la servlet api *est* dans le j2ee non?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 10-03-2005 à 21:52:01    

http://www.onjava.com/pub/a/onjava [...] tml?page=3

Citation :


There are three types of listeners: JobListeners, TriggerListeners, and SchedulerListeners.


tu as regardé de ce coté là ?


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

Marsh Posté le 10-03-2005 à 21:52:01   

Reply

Marsh Posté le 10-03-2005 à 21:52:35    

schnapsmann a écrit :

bein la servlet api *est* dans le j2ee non?


oui enfin on est surtout dans un problème de quartz ici


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

Marsh Posté le 10-03-2005 à 22:21:29    

Oui, c'est en expliquant le pb que je me suis apperçu que ça tenait plus à quartz. Je vais matter du coté des listeners.
, mais je pense pas que ça ira de ce coté, puisque quartz lance le job mais je ne pense pas qu'il soit prévenu que le job est terminé. Enfin ptêt que justement les listeners le permettent. MErci pour le lien en tout cas.

Reply

Marsh Posté le 10-03-2005 à 22:23:58    

benou a écrit :

ben pkoi tu le passes pas au moment où tu créés tes jobs quartz ?


 

the real moins moins a écrit :

(perso je pense qu'il doit y avoir une solution plus élégante :o)


 
déja plus élégante, et même si je voulais le faire jvois pas comment jpourrai passer quoique ce soit, pour créer le job y a des méthodes bien définies et jpeux pas y ajouter quoique ce soit (à moins encore une fis que qque chose m'échappe :o)
 
extrait de la création et du "schedulage" des jobs :

Code :
  1. StdSchedulerFactory factory;
  2.             factory = new StdSchedulerFactory();
  3.    
  4.             Scheduler scheduler = factory.getScheduler();
  5.             scheduler.start();
  6.            
  7.             JobDetail jd = new JobDetail("Encheres",
  8.                                           scheduler.DEFAULT_GROUP,
  9.                                           EnchereJob.class);
  10.             SimpleTrigger trigger = new SimpleTrigger("Defaut",
  11.                                                        scheduler.DEFAULT_GROUP,
  12.                                                        SimpleTrigger.REPEAT_INDEFINITELY,
  13.                                                        1000*60);
  14.            
  15.             JobDetail jeco = new JobDetail("Economie",
  16.                                           scheduler.DEFAULT_GROUP,
  17.                                           EcoJob.class);
  18.             SimpleTrigger ecotrig = new SimpleTrigger("EcoTrig",
  19.                                                        scheduler.DEFAULT_GROUP,                                                     
  20.                                                        cal.getTime(),
  21.                                                        null,
  22.                                                        SimpleTrigger.REPEAT_INDEFINITELY,
  23.                                                        1000*60*60*24*7);
  24.             cal.set(2005,2,1,21,4);
  25.             System.out.println("Date de début : " + cal.getTime());
  26.             JobDetail jmatch = new JobDetail("Matchs",
  27.                                              scheduler.DEFAULT_GROUP,
  28.                                              MatchJob.class);
  29.             SimpleTrigger matchtrig = new SimpleTrigger("MatchTrig",
  30.                                                        scheduler.DEFAULT_GROUP,                                                     
  31.                                                        cal.getTime(),
  32.                                                        null,
  33.                                                        SimpleTrigger.REPEAT_INDEFINITELY,
  34.                                                        1000*60*60*24*7);
  35.            
  36.             scheduler.scheduleJob(jd, trigger);
  37.             scheduler.scheduleJob(jeco, ecotrig);
  38.             scheduler.scheduleJob(jmatch, matchtrig);

Reply

Marsh Posté le 10-03-2005 à 22:24:46    

LES LISTENERS JTE DIS


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

Marsh Posté le 10-03-2005 à 22:28:37    

c'est pas un objet que tu passes mais une classe ???
et quand tu as besoin de passer des paramètres tu fais comment ?

Reply

Marsh Posté le 10-03-2005 à 22:31:15    

y'a un context, genre de map je crois.
mais clairement, il ferait mieux de passer par un listener, putain de bordel de cul.
tu refourgues le servletctx dans le cteur du listener, et basta


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

Marsh Posté le 10-03-2005 à 22:32:11    

the real moins moins a écrit :

LES LISTENERS JTE DIS


ben j'ai dis que j'allais matter :o

Reply

Marsh Posté le 10-03-2005 à 22:33:07    

nan mais j'ai rien contre le listener, moi ...
 
c'est quoi l'intérêt de filer un objet classe plutut qu'un objet de type runnable ou autre ?

Reply

Marsh Posté le 10-03-2005 à 22:34:42    

au JobDetail là?  à mon avis c'est pour registrer ton job. derriere doit y'avoir une factory qui va l'instancier *quand y'en aura besoin*. (sinon les Jobs devraient persister à perpete...)


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

Marsh Posté le 10-03-2005 à 22:36:32    

the real moins moins a écrit :

au JobDetail là?  à mon avis c'est pour registrer ton job. derriere doit y'avoir une factory qui va l'instancier *quand y'en aura besoin*. (sinon les Jobs devraient persister à perpete...)


je trouve ca bizarre quand même ... rien t'empêche de le faire toit même le newInstance() si tu veux pas que l'objet reste en mémoire ...

Reply

Marsh Posté le 10-03-2005 à 22:45:46    

euh, le but du jeu c'est de planifier l'execution future et recurrente de jobs, pas de les executer sur le moment.
et si t'y tiens vraiment, oui, y'a ptet moyen d'utiliser une instance; mais comme je t'ai dis, je pense qu'un "contexte" est passé à tes jobs, ds lequel tu peux probablement mettre ce que tu veux, de toute façon.


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

Marsh Posté le 10-03-2005 à 22:53:26    

mouais ... je trouve pas ca terrible de passer par de l'invocation dynamique pour ca ... l'intérêt est minime ... par contre d'un point de vu design, c'est bien crade :/

Reply

Marsh Posté le 10-03-2005 à 22:57:04    

moi j'crois que t'as pas bien pigé la portée du truc - et qu'il y a aussi un moyen de passer des instances si ça te chante


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

Marsh Posté le 10-03-2005 à 22:58:35    

the real moins moins a écrit :

moi j'crois que t'as pas bien pigé la portée du truc


non, clairement pas ... j'ai pas regardé ...
 

the real moins moins a écrit :

et qu'il y a aussi un moyen de passer des instances si ça te chante


oki :jap:

Reply

Marsh Posté le 10-03-2005 à 23:02:36    

benou a écrit :

non, clairement pas ... j'ai pas regardé ...


en gros, le code qu'il utilise là, c'est pour au "moteur":
"he, tu vas m'executer CE job tous les 3 jours": ça me parait donc sain de n'instancier la classe qu'au moment venu, et d'avoir une instance "fraiche" par execution: c'est quartz qui gere ça. en tant qu'utilisateur/developpeur, tu ne fais que "registrer" tes jobs.
 


en fait j'en sais rien, je ne fais que supposer, mais il me semble que ça n'a pas bcp d'interet


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

Marsh Posté le 10-03-2005 à 23:05:43    

je vois pas en quoi c'est mieux de "registrer" des classes plutot que des objets [:skeye]
ptête pour las à avoir se faire chier avec la sérialisation ou un truc dans le genre ... mais bon ...

Reply

Marsh Posté le 10-03-2005 à 23:17:41    

"avoir une instance "fraiche" par execution" !
un Job.


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

Marsh Posté le 11-03-2005 à 07:51:50    

the real moins moins a écrit :

"avoir une instance "fraiche" par execution" !
un Job.


et donc ? c'est quoi l'intérêt ?

Reply

Marsh Posté le 11-03-2005 à 10:59:57    

j'abandonne.


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

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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