JDBC: conséquences d'une non-fermeture de connection et ou statement - Java - Programmation
Marsh Posté le 31-07-2002 à 22:29:01
à long terme et dans un environnemnt web, ton proc est occupé à 100%
Marsh Posté le 31-07-2002 à 22:29:56
DarkLord a écrit a écrit : à long terme et dans un environnemnt web, ton proc est occupé à 100% |
elles vont pas se faire jeter toutes seules au bout d'un moment alors...
Marsh Posté le 31-07-2002 à 22:31:52
non
Marsh Posté le 31-07-2002 à 22:32:54
merde ça suxxe.
je sens qu'on va me faire chier dans pas lgtps.
putain de couille
Marsh Posté le 31-07-2002 à 22:33:59
--greg-- a écrit a écrit : merde ça suxxe. je sens qu'on va me faire chier dans pas lgtps. putain de couille |
t'as encore programmé comme un porc toi
Marsh Posté le 31-07-2002 à 22:34:54
DarkLord a écrit a écrit : à long terme et dans un environnemnt web, ton proc est occupé à 100% |
sûr ??? dans les finally du Statement ou du Connecion ca doit les fermer nan ? donc au bout d'un moment ils vont se fermer ...
Marsh Posté le 31-07-2002 à 22:35:20
en J2EE non.
Edit: ce que je veux dire c'est que j'ai déjà programmer une servlet simple qui faisait des requetes débiles et que j'oublias de fermer les connections. Au bout d'un certain temps (meme sans faire d'autre requete sur le serveur) ca boucle et mon serveur est occupé à 100%
un c.close() et tout rentre dans l'ordre ...
Maintenant c'est peut etre du à une config pourrie de la DB chez nous et ca ne m'étonnerait pas non plus
Marsh Posté le 31-07-2002 à 22:38:51
ben ... pkoi ils ont pas foutu un close dans le finalize ??? ca reglerait la plupart des problèmes ...
Marsh Posté le 31-07-2002 à 22:39:33
benou a écrit a écrit : ben ... pkoi ils ont pas foutu un close dans le finalize ??? ca reglerait la plupart des problèmes ... |
parce que c'est pas propre.
Marsh Posté le 31-07-2002 à 22:39:52
DarkLord a écrit a écrit : t'as encore programmé comme un porc toi |
c'était y'a LONGTEMPS.
(pour te dire, j'avais un truc fait en php que j'ai converti en jsp/servlet, tu vois le genre)
en fait les stmt je les fermais mais je retournais le resultset
(genre
Resulset rs = truc;
stmt.close();
con.close();
return rs;
et ça marchait, bizarrement
mais mtnt, paf changement de serveur (chgt de drivers mysql au passage aussi, sans doute), et ça marche pu. (mais bizarrement ça ne produit aucune exception, le rs est juste vide). si je ferme pas le stmt avec de retourner le rs, ça marche le hic c que jpeux pu fermer le stmt apres quoi, ou alors faut que je refasse toute cette merde, mais niet.)
Marsh Posté le 31-07-2002 à 22:52:39
euh en fait
dans ma methode de merde
si je fais
try { |
, le finally il est executé quand exactement? avant que la methode ne retourne "pour du vrai", nan? ou pas du tout? bref, dans un cas comme dans l'autre, ça va pas m'aider...
Marsh Posté le 31-07-2002 à 23:32:56
--greg-- a écrit a écrit : euh en fait dans ma methode de merde si je fais
|
le finally est toujours executé !!
là il ser aexecuté juste avant le return
Marsh Posté le 31-07-2002 à 23:34:01
benou a écrit a écrit : le finally est toujours executé !! là il ser aexecuté juste avant le return |
c bien ce qu'il me semblait.
bon ben
prout alors, je crois.
Marsh Posté le 31-07-2002 à 23:34:03
DarkLord a écrit a écrit : parce que c'est pas propre. |
je vos pas le problème que ca te pose ...
Code :
|
Marsh Posté le 31-07-2002 à 23:43:00
en fait
si ça se trouve cette methode finalize est implementée dans les drivers. auquel cas, j'ai pas de soucis tant que ce sont les memes drivers qui sont utilisés..?
edit: ha ben tfaçons c pas le cas
Marsh Posté le 01-08-2002 à 00:10:48
--greg-- a écrit a écrit : en fait si ça se trouve cette methode finalize est implementée dans les drivers. auquel cas, j'ai pas de soucis tant que ce sont les memes drivers qui sont utilisés..? edit: ha ben tfaçons c pas le cas |
comment tu sais ? t'as les sources ?
et en principe oui, c'est là de dans que ca devrait être implémenté ...
Marsh Posté le 01-08-2002 à 00:21:34
benou a écrit a écrit : comment tu sais ? t'as les sources ? et en principe oui, c'est là de dans que ca devrait être implémenté ... |
yep, j'ai les sources, et c'est pas implementé.
Marsh Posté le 02-08-2002 à 12:26:27
benou a écrit a écrit : je vos pas le problème que ca te pose ...
|
Le probleme c'est justement quand tu veux retourner un ResultSet, si tu fermes le Statement, le ResultSet est vidé alors ca devient un peu chiant ...
Et puis pour les connections, normalement, y'a un timer qui les tuent au bout d'un certain temps (20 minutes je crois).
D'autre part, si tu fermes pas tes connections, tu satures la base en ouvrant trop de curseurs et la tu te fais jeter (en tout cas sur Oracle) !
Marsh Posté le 02-08-2002 à 14:20:32
chapi456 a écrit a écrit : Le probleme c'est justement quand tu veux retourner un ResultSet, si tu fermes le Statement, le ResultSet est vidé alors ca devient un peu chiant ... |
ben nan : il doit y avoir une réf au statement dans le resultset => il sera pas garbagé !
bizarre, j'étais vraimentpersuadé que ca y était ...
Marsh Posté le 02-08-2002 à 17:02:33
ben c'est plutot le contraire, c'est le resultset qui est relié au statement ... donc il est vidé dès que tu close le statement ... c'est dans la doc, c'est pas une invention de ma part !
Marsh Posté le 02-08-2002 à 17:16:26
chapi456 a écrit a écrit : ben c'est plutot le contraire, c'est le resultset qui est relié au statement ... donc il est vidé dès que tu close le statement ... c'est dans la doc, c'est pas une invention de ma part ! |
j'ai pas dit que c'était pas le cas, j'ai juste dit que si le resultset contenanit une ref vers le statement (ce qui de grandes chances d'être le cas vu que les 2 objets sont liés) on ne risquait pas de perdre le resultset à cause du garbage collectig du statement ...
Marsh Posté le 02-08-2002 à 18:22:05
Pour info, certaines BD (DB2 par ex) refusent de commiter si des rs ou des stmt sont ouverts.
Renaud
Marsh Posté le 02-08-2002 à 18:35:54
- Renaud - a écrit a écrit : Pour info, certaines BD (DB2 par ex) refusent de commiter si des rs ou des stmt sont ouverts. Renaud |
euh ? et il faut commiter quand on récupéré un resultset?
(je doute pas de ta parole, mais je capte pas l'idée là)
edit: bon j'avais pas compris ce que tu disais, désolé
Marsh Posté le 02-08-2002 à 19:10:58
un conseil : le mieux c'est de faire :
Code :
|
pour être sûr que la connection se ferme même dans les pires conditions de poisse
Marsh Posté le 02-08-2002 à 22:17:48
R3g a écrit a écrit : un conseil : le mieux c'est de faire :
|
bon
he
je sais comment on gere une cnx merci
faut tout lire
Marsh Posté le 02-08-2002 à 22:23:04
--greg-- a écrit a écrit : Hop, Voudrais juste savoir quelles POURRAIENT etre les conséquences (tous points de vue) si on "oubliait" de fermer une Connection jdbc, ou (ça m'interesse plus dans ce cas-ci), un Statement. |
Si tu dois changer ton code, penses à utiliser un pool de connexions plutôt que d'en ouvrir(-fermer) une à chaque fois que t'en as besoin.
Marsh Posté le 03-08-2002 à 03:11:28
krosso a écrit a écrit : Si tu dois changer ton code, penses à utiliser un pool de connexions plutôt que d'en ouvrir(-fermer) une à chaque fois que t'en as besoin. |
Marsh Posté le 05-08-2002 à 16:29:49
--greg-- a écrit a écrit : |
T'as qu'a utiliser protomatter (fait un recherche sur google, tu tombera direct dessus), ça permet de fermer automatiquement les connections inactives au bout d'un certain temps que tu fixes toi même.
En fait, c un pool de connection, mais tu peux très bien l'utiliser pour une seule connection.
L'avantage, c que c'est l'implémentation d'un driver JDBC, du coup, t'auras pas grand chose à changer ds ton code si tu veux mettre ça em place.
Bon, normalement, cette option de pouvoir fermer les connections inactives, c pas fait pour être utilisé en production, bref, ça sera un peu crade, ms bon, apparement ton truc l'est déja pas mal, non !?
Marsh Posté le 05-08-2002 à 16:40:45
ouah comme il te cherche l'ot là
Marsh Posté le 05-08-2002 à 16:41:29
el_gringo, j'ai failli t'engueuler
mais j'ai lu la fin de ton message qui est plus interessante
je SAIS ce qu'est un pool de cnx, je SAIS comment on utilise des cns, slt à l'epoque ou j'ai écrit la merde en question, manifestement je savais pas
l'idée d'utiliser protomatter cela dit c pas trop con: j'imagine qu'il s'utilise de maniere transparente et que je pourrais donc simplement remplacer le nom de mon driver?
Marsh Posté le 05-08-2002 à 17:44:14
--greg-- a écrit a écrit : el_gringo, j'ai failli t'engueuler mais j'ai lu la fin de ton message qui est plus interessante je SAIS ce qu'est un pool de cnx, je SAIS comment on utilise des cns, slt à l'epoque ou j'ai écrit la merde en question, manifestement je savais pas l'idée d'utiliser protomatter cela dit c pas trop con: j'imagine qu'il s'utilise de maniere transparente et que je pourrais donc simplement remplacer le nom de mon driver? |
J'espère bien que tu sais ce qu'est un pool de connection. Bon, t pas encore un vieux sage du Java comme Darklord ou Benou, ms je t'attriburais qd même le status de grand garçon du Java, ce qui est déja pas mal, non !? )
Non, bon, je fais exprès pr t'emmerder parce que tu m'énerves, j'trouve que t'as un air supérieur quand tu t'adresses à moi (genre, mon idée est "pas trop conne". Ouah, ça c du remerciement comme je les aimes !)
Ouais, protomatter il s'utilise de manière transparente, c ce que j'essayais de te faire comprendre en te disant que un pool sous la forme d'un driver JDBC...
Marsh Posté le 05-08-2002 à 17:48:00
el_gringo a écrit a écrit : Non, bon, je fais exprès pr t'emmerder parce que tu m'énerves, j'trouve que t'as un air supérieur quand tu t'adresses à moi (genre, mon idée est "pas trop conne". Ouah, ça c du remerciement comme je les aimes !) |
disons que tu ne m'as pas toujours fais la meilleure impression au niveau java, du moins ds tes 1er posts...
el_gringo a écrit a écrit : Ouais, protomatter il s'utilise de manière transparente |
el_gringo a écrit a écrit : , c ce que j'essayais de te faire comprendre en te disant que un pool sous la forme d'un driver JDBC...:D |
comme il me provoque!!!
Marsh Posté le 05-08-2002 à 17:55:44
--greg-- a écrit a écrit : disons que tu ne m'as pas toujours fais la meilleure impression au niveau java, du moins ds tes 1er posts... comme il me provoque!!! |
hé oui, g appris (et j'apprend encore) le Java sans cours, sans livre, juste avec le forum et en me balladant sur qqs sites.
Du coup ça a pu m'ariver (et ça peut encore m'arriver) de poser des questions dont la réponse te parait évidente.
Si c le cas, tant mieux, tu pourras m'aider rapidement.
Non, parce que, là par contre, franchement, t'as pas fait fort quand même ! l'idée du pool de connection, t'aurais pu la trouver tout seul ! (non mais franchement, bon Dieu, c vrai quoi ! )
...c chiant hein !?
Allez, j'arrête de te faire chier, ms essaye de penser à ça la prochaine fois que t'auras envie de m'incendier pr une question que g posée qui te plais pas !
Marsh Posté le 05-08-2002 à 18:16:33
nan mais à la base, la question que je posais, ct de savoir quelles pourraient etre les consequences d'une non fermeture de statement et ou de connections alors
et au fait, euh franchement, lis des bouquins, t'apprend +vite et +mieux que sur le net (crois moi, pas eu de cours non plus)
Marsh Posté le 05-08-2002 à 21:40:05
Ne te méprends pas sur --greg--
C'est un gars qui en a ds la tête. le truc c'est qu'il ne fait pas du Java depuis longtemps c'est tout. Ca vient avec le temps ce genre de choses
Marsh Posté le 05-08-2002 à 21:40:43
DarkLord a écrit a écrit : Ne te méprends pas sur --greg-- C'est un gars qui en a ds la tête. le truc c'est qu'il ne fait pas du Java depuis longtemps c'est tout. Ca vient avec le temps ce genre de choses |
Marsh Posté le 05-08-2002 à 21:41:00
quoi t'es pas content ?
Marsh Posté le 31-07-2002 à 21:25:19
Hop,
Voudrais juste savoir quelles POURRAIENT etre les conséquences (tous points de vue) si on "oubliait" de fermer une Connection jdbc, ou (ça m'interesse plus dans ce cas-ci), un Statement.
Message édité par --greg-- le 31-07-2002 à 21:33:19