-
Timeur dans servlet
Bonjour.
Je travaille sur une application J2EE/AJAX. Le principe est que le client ouvre une connexion vers le serveur, ce dernier guette les modifications, et au bout de 30 secondes renvoie l'etat actuel du traitement. Plusieurs clients peuvent accéder au serveur pour suivre/interagir avec le traitement en cours. Si un utilisateur a fait une modification, les autres doivent en être immédiatement notifiés.
Pour les 30 secondes, je lance un javax.swing.Timer. Mais ce dernier n'interagit qu'avec une seule connexion, en me permettant pas de notifier aux autres connexions le changement effectué.
Je pensais donc faire une classe singleton, et à l'intérieur avoir un tableau/liste de Timer, chaque timer correspondant à un client, et si l'un modifie l'etat du traitement, faire setDelay à 0 sur tous les timeurs que chacun soit immédiatement noticé du changement.
Que pensez-vous de cette idée ? Ya t-il une meilleure manière de tourner le problème ?
Merci de vos avis ^^
-
Réponse vague :
Il existe des servlets fonctionnant comme des tâches automatisées avec un timer intégré (durée de la 1ère utilisation, périodicité, etc.).
ftp://ftp-developpez.com/grisha/javasched.pdf
Tu trouveras des tâches, job, listener (pour écouter)
Mais à priori, je ne pense que ça soit la solution la mieux adaptée...
-
J'ai fait mon implémentation comme décrit plus haut. Cependant, si tu as une meilleure diée de comment tourner le problème ca m'interesse.
J'ai parcouru ton document, mais ca pousse plus vers la planification de tache, alors que la cnneixon est refaite dynamiquement via JS dans mon cas ^^
-
En fait que veux-tu surveiller, pour en informer les autres ?
Ce sont des données en base ?
Car un Listener (Ecouteur) ou un Trigger(Evénement changement d'état sur BDD) serait plus adapté que des Timers à mon avis.
Mais je ne connais pas tous les tenants et aboutissants.
-
Faire ca avec un pattern Observer tu veux dire ? Faut voir, mais il faut aussi intégrer la notion de timeout (30 sec de connexion, puis renvoie de l'état du traitement) ^^
de plus je ne sais pas quel element serait observable
Quand au trigger, il est lié à la base de données, il peut servir de delencheur d'evenement à traiter sous java ? de plus sous Mysql 4.1, il ne me semble aps qu'il y ait de trigger
Sinon, oui, ce que je veux surveiller, c'est une action de validation d'un utilisateur, qui provoque l'enregistrement en bdd, et notifie les autres du changement.