Un timer partagé entre différent servlets... [Servlet] - Java - Programmation
Marsh Posté le 13-02-2003 à 14:30:47
euh les connections sql tu DOIS les fermer toi meme hein
et si t'as envie de les garder ouvertes t'utilises un pool entre les deux
Marsh Posté le 13-02-2003 à 14:31:02
benou a écrit : ActionListener dans des servlet ?? |
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
je suis ouvert à toute solution, vue que j'en ai pas
Marsh Posté le 13-02-2003 à 14:48:17
--greg-- a écrit : euh les connections sql tu DOIS les fermer toi meme hein |
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
Marsh Posté le 13-02-2003 à 15:10:27
ben.. tu ajoutes des connection.close() là ou il faut dans tes servlets, stout
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 |
bon apparemment c'est pas clair...
Marsh Posté le 13-02-2003 à 15:34:29
Predicator a écrit : |
mais si tu peux
tu vires les cnx de la session (quelle idée aussi ) et tu utilises un pool de connections
Marsh Posté le 13-02-2003 à 15:36:46
--greg-- a écrit : mais si tu peux |
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
Marsh Posté le 13-02-2003 à 15:53:52
Predicator a écrit : |
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)
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 |
boulet powaaaaa....
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
EDIT : et je tombe sur le post où c'est toi qui pose la question
Marsh Posté le 13-02-2003 à 16:02:45
Predicator a écrit : |
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 : |
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é?
fin bon, si c'est ça il a sans doute fait du copié/collé, donc tu peux la jouer au search&replace
Predicator a écrit : |
ha??? ou ça?
Marsh Posté le 13-02-2003 à 16:08:17
--greg-- a écrit : |
http://forum.hardware.fr/forum2.ph [...] subcat=390
le problème est le même, le code de départ est...
j'ai rien dit
je continue ma quête...
je vais essayer ce protomatter...
EDIT : contre le fleur ICQ aussi
Marsh Posté le 13-02-2003 à 16:57:26
excellent ce topic
Marsh Posté le 13-02-2003 à 18:24:09
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
dire qu'il va continuer à sévir ailleurs...
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...
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
Message édité par Predicator le 13-02-2003 à 13:52:26