[Servlet] Un timer partagé entre différent servlets...

Un timer partagé entre différent servlets... [Servlet] - Java - Programmation

Marsh Posté le 13-02-2003 à 13:46:20    

salut !
 
j'ai besoin d'un timer du côté servlet pour couper des connexions, mais voilà, j'ai plusieurs servlet qui doivent avoir le même timer. y'a-t-il un moyen de faire ça ?
 
si je stocke un javax.swing.Timer et son listener dans la session HTTP, est-ce que ça va marcher ?
 
par exemple le code suivant
il se trouve dans le constructeur d'un servlet, et la méthode disconnect() est une méthode qui coupe juste les connexions qu'il faut...
 

Code :
  1. ActionListener actionListener = new ActionListener(){
  2.    public void actionPerformed(ActionEvent e){
  3.       Servlet.this.disconnect();
  4.    }
  5. };
  6. javax.swing.Timer timer = new Timer(getSession().getMaxInactiveInterval()*0.9,actionListener);
  7. timer.start
  8. getSession.setAttribute("timer",timer);


 
en faisant comme ça, est-ce que l'évènement sera récupéré et traité par le servlet ?
 
merci
 
### EDIT ###
 
ce problème vient du fait que postgresql ne coupe pas de lui-même des connexions à une base de donnée, et une fois la session tomcat perdue, il n'y a plus aucun moyen de les couper.
il existe plusieurs servlet qui accèdent à cette base à travers la même connexion, c'est pour ça que j'ai besoin d'un seul timer, qu'il doit générer un évènement récupérable par au moins une servlet qui coupera la connexion, et ce timer doit être accessible par tous les servlets pour le réinitialiser à chaque accès à la base...
 
remerci :D


Message édité par Predicator le 13-02-2003 à 13:52:26
Reply

Marsh Posté le 13-02-2003 à 13:46:20   

Reply

Marsh Posté le 13-02-2003 à 14:29:34    

ActionListener dans des servlet ??   :heink:

Reply

Marsh Posté le 13-02-2003 à 14:30:47    

euh les connections sql tu DOIS les fermer toi meme hein :heink:
et si t'as envie de les garder ouvertes t'utilises un pool entre les deux


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 13-02-2003 à 14:31:02    

benou a écrit :

ActionListener dans des servlet ??   :heink:  


 
je sais bien, mais je m'y connais absolument pas en servlet... je dois modifier celles qui existent parce que ce £$@# de programmeur à mal fait son boulot :pfff:  
 
je suis ouvert à toute solution, vue que j'en ai pas :D

Reply

Marsh Posté le 13-02-2003 à 14:48:17    

--greg-- a écrit :

euh les connections sql tu DOIS les fermer toi meme hein :heink:
et si t'as envie de les garder ouvertes t'utilises un pool entre les deux


 
je sais bien, c'est bien ça le problème...
bon j'explique un peu mieux...
 
j'ai un client applet qui se sert de plusieurs servlet.
ces servlet ouvrent 2 connexions vers pgSQL, et les stocke dans la session HTTP pour ne pas avoir à la fermer et les rouvrir à chaque fois...
 
tomcat à un session timeout de 30 minutes
 
si au bout de ces 30 minutes il n'y a aucun transfert entre l'applet et un des servlet, bah la session se ferme
 
du coup, les références des 2 connexions sont perdues, et je peux plus les fermer.
 
voilà le problème de départ...
à partir de là je me suis dit qu'un timer du côté server, qui déclenche un évènement au bout du temps de session timeout x 90% (ça laisse une marge de 10%) pourrait fermer ces connections (un autre timer du coté client est initialisé à 85% et permet de fermer l'applet).
 
le problème est :
 
comment utiliser du côté server un timer accessible par tous les servlets
et comment lancer une action unique (disconnect qui ferme les 2 connexions SQL) quand le timer arrive à 0. ce timer doit pouvori accéder à la session pour récupérer les connexions à SQL...
 
voilà, j'espère que c'est aps trop confu :)

Reply

Marsh Posté le 13-02-2003 à 15:10:27    

ben.. tu ajoutes des connection.close() là ou il faut dans tes servlets, stout  :heink:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 13-02-2003 à 15:32:38    

--greg-- a écrit :

ben.. tu ajoutes des connection.close() là ou il faut dans tes servlets, stout  :heink:  


 
bon apparemment c'est pas clair...


Message édité par Predicator le 13-02-2003 à 15:34:32
Reply

Marsh Posté le 13-02-2003 à 15:34:29    

Predicator a écrit :


 
bah...
comment tu sais que l'applet ne se servira plus des connexions ?
l'utilisateur peut très bien décrocher de devant son ordi pendant 20 minutes...
et puis on peut pas mettre la déconnexion dans le finalize() car les servlets ne sont détruits qu'à la fermeture du serveur...
 
en gros, tu as la solution....
il faut mettre ce qu'il faut faire là où il faut...
c'est bien, mais ça je peux le deviner :)
mais je peux pas couper et rouvrir la connexion à la base à chaque accès, c'est pour ça que ces connexions sont stockées dans la session...

mais si tu peux
tu vires les cnx de la session (quelle idée aussi  :sarcastic: ) et tu utilises un pool de connections


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 13-02-2003 à 15:36:46    

--greg-- a écrit :

mais si tu peux
tu vires les cnx de la session (quelle idée aussi  :sarcastic: ) et tu utilises un pool de connections


 
certes...
mais là tu parles à quelqu'un qui s'y connait pas en servlet. qui reprend un code tout pourrave d'un développeur qui en avait rien à battre, et qui s'est barré à la fin du projet. ce projet a deux mois de retard que je dois combler, et j'ai pas le temps d'apprendre à me servir de tomcat... je sais ce qu'est un pool, je devine ce qu'est un pool de connexion, mais de là à savoir m'en servir...
bref, je cherche une solution rapide qui m'oblige pas à reprendre à zéro le code d'un baka yaro qui devrait être dénoncé à l'ordre des développeur :)


Message édité par Predicator le 13-02-2003 à 15:37:22
Reply

Marsh Posté le 13-02-2003 à 15:53:52    

Predicator a écrit :


 
certes...
mais là tu parles à quelqu'un qui s'y connait pas en servlet. qui reprend un code tout pourrave d'un développeur qui en avait rien à battre, et qui s'est barré à la fin du projet. ce projet a deux mois de retard que je dois combler, et j'ai pas le temps d'apprendre à me servir de tomcat... je sais ce qu'est un pool, je devine ce qu'est un pool de connexion, mais de là à savoir m'en servir...
bref, je cherche une solution rapide qui m'oblige pas à reprendre à zéro le code d'un baka yaro qui devrait être dénoncé à l'ordre des développeur :)

ben fermer des connexions sql ça n'a rien à voir avec des servlets ;)
tu reperes les endroits ou les cnx sont foutues dans la sessions
( session.setAttribute("cnxname", cnx) ), tu jettes ça.
apres, j'espere pour toi que l'ouverture des cnx est centralisée dans une methode ou une class utilitaire; tu changes le driver utilisé par celui d'un pool manager (cherche sur le forum pour ça, on en a deja parlé plusieurs fois), et voila, c tout. si le pool est bien fait, il s'utilise exactement comme un driver jdbc ordinaire, donc tu ne devrais rien avoir a changer, juste à configurer le pool pour lui dire quelle base utiliser)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 13-02-2003 à 15:53:52   

Reply

Marsh Posté le 13-02-2003 à 15:57:15    

--greg-- a écrit :

ben fermer des connexions sql ça n'a rien à voir avec des servlets ;)


 
bah tel que c'est fait actuellement, c'est le seul moyen que j'ai de le faire (l'accession à pgSQL se fait avec JDBC au niveau des servlets)
 

Citation :

tu reperes les endroits ou les cnx sont foutues dans la sessions
( session.setAttribute("cnxname", cnx) ), tu jettes ça.
apres, j'espere pour toi que l'ouverture des cnx est centralisée dans une methode ou une class utilitaire;


 
 :cry:  
boulet powaaaaa.... :pfff:  
 

Citation :

tu changes le driver utilisé par celui d'un pool manager (cherche sur le forum pour ça, on en a deja parlé plusieurs fois), et voila, c tout. si le pool est bien fait, il s'utilise exactement comme un driver jdbc ordinaire, donc tu ne devrais rien avoir a changer, juste à configurer le pool pour lui dire quelle base utiliser)


 
oki, merchi beaucoup, je pars en quête :D
 
EDIT : et je tombe sur le post où c'est toi qui pose la question :lol:


Message édité par Predicator le 13-02-2003 à 15:59:23
Reply

Marsh Posté le 13-02-2003 à 16:02:45    

Predicator a écrit :


 
bah tel que c'est fait actuellement, c'est le seul moyen que j'ai de le faire (l'accession à pgSQL se fait avec JDBC au niveau des servlets)


 
je voulais dire que c'est pas parce que tu connais pas les servlets que tu connais jdbc, vu que ça n'a rien a voir. mtnt que le jdbc soit geré directement dans les servlets, soit...
 

Predicator a écrit :


 
 :cry:  
boulet powaaaaa.... :pfff:  
 


 
me dit pas qu'il fait un Class.forname et tout le tralala a chaque fois qu'il a besoin d'une connection, et que le nom du driver est hardcodé? [:mlc]
fin bon, si c'est ça il a sans doute fait du copié/collé, donc tu peux la jouer au search&replace :D
 

Predicator a écrit :


oki, merchi beaucoup, je pars en quête :D
 
EDIT : et je tombe sur le post où c'est toi qui pose la question :lol:

ha??? ou ça?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 13-02-2003 à 16:08:17    

--greg-- a écrit :


ha??? ou ça?


 
http://forum.hardware.fr/forum2.ph [...] subcat=390 :D
 
le problème est le même, le code de départ est... :sweat:  
j'ai rien dit :D
je continue ma quête... :)
je vais essayer ce protomatter...
 
EDIT : contre le fleur ICQ aussi :lol:


Message édité par Predicator le 13-02-2003 à 16:16:01
Reply

Marsh Posté le 13-02-2003 à 16:57:26    

excellent ce topic  [:--greg--]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 13-02-2003 à 18:24:09    

:pfff:  
y'en a qui voient la lumière, moi je viens de voir les ténèbres... ça existe une bible de ce qu'il ne faut pas faire ? si non, je dépose le brevet tout de suite :D  
dire qu'il va continuer à sévir ailleurs... :sweat:

Reply

Sujets relatifs:

Leave a Replay

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