Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1032 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  java servlets, mysql, singleton, bug... on va bien s'amuser !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

java servlets, mysql, singleton, bug... on va bien s'amuser !!

n°140236
Profil sup​primé
Posté le 17-05-2002 à 09:52:18  answer
 

je fais une appli intranet en serlvets java, j'utilise une base mysql, et j'ai une classe qui gère la connec mysql, cette classe est un singleton car je l'utilise pour synchronizer.
 
Depuis que je l'ai passée en singleton, tout les matins quand j'arrive ca me fait des 500 internal server error, je dois recompiler la classe qui s'occupde de la connec mysql pr que ca marche.
 
je suppose que ca dois venir d'un pb de limite de duree de vie de conenction a la BD ou qqch comme ca, mais je sais pas comment faire pr eviter ce pb (la classe doit a tt prix rester un singleton).
 
le code de la classe en question (je met que la partie qui concerne le pb):
 

Code :
  1. public class MySQL
  2. {
  3. private Connection jdbcConnection;
  4. private ResultSet rs;
  5. private ResourceBundle  cnxInfo = null;
  6. //la seule instance de la classe
  7. public static MySQL instance=new MySQL();
  8. //comment retourner cette instance
  9. public static MySQL getInstance()
  10. {
  11.  return instance;
  12. }
  13. //constructeur. protégé pr pas que des gens essaient de feinter et l'utiliser en plusieurs instances
  14. private MySQL ()
  15. {
  16.  //permet de prendre les paramètres du fichier dbprod.properties
  17.  cnxInfo = ResourceBundle.getBundle("dbprod" );
  18.  try
  19.  {
  20.   //connection à la base MySQL
  21.   Class.forName((String) cnxInfo.getString("driver" ) );
  22.   String connectionString = cnxInfo.getString("url" ) + "?user=" +  cnxInfo.getString("user" ) + "&password=" + cnxInfo.getString("password" );
  23.   jdbcConnection = DriverManager.getConnection(connectionString);
  24.  }
  25.  catch (SQLException connectionError)
  26.  {
  27.   System.err.println("[Test: MySQL : constructeur : SQL : " +connectionError.getMessage()+"]" );
  28.   while ((connectionError=connectionError.getNextException()) != null)
  29.   {
  30.    System.err.println("[Test: MySQL : SQL : " +connectionError.getMessage()+"]" );
  31.   }
  32.  }
  33.  catch (ClassNotFoundException e)
  34.  {
  35.   System.err.println("[Test: MySQL : CLASS : " +e.getMessage()+"]" );
  36.  }
  37. }

mood
Publicité
Posté le 17-05-2002 à 09:52:18  profilanswer
 

n°140246
darklord
You're welcome
Posté le 17-05-2002 à 10:10:02  profilanswer
 

mr_mat a écrit a écrit :

Depuis que je l'ai passée en singleton, tout les matins quand j'arrive ca me fait des 500 internal server error, je dois recompiler la classe qui s'occupde de la connec mysql pr que ca marche.




 
 :heink: Je ne pense pas que c'est le fait de la recompiler qui fait que ca marche mais plutot le fait que tu la "relances". C'est à dire qu'il refait la connection etc.
 
Clair que si tu laisses une connection ouverte 24/24 il risque à un moment donné d'avoir des problèmes ...
 
Encore un truc. Ca sert a rien de faire un getInstance si ton instance est publique. Dans le design pattern du singleton l'instance doit etre privée.

 

[jfdsdjhfuetppo]--Message édité par DarkLord le 17-05-2002 à 10:10:19--[/jfdsdjhfuetppo]


---------------
Just because you feel good does not make you right
n°140258
Profil sup​primé
Posté le 17-05-2002 à 10:27:53  answer
 

DarkLord a écrit a écrit :

 
 
 :heink: Je ne pense pas que c'est le fait de la recompiler qui fait que ca marche mais plutot le fait que tu la "relances". C'est à dire qu'il refait la connection etc.
 
Clair que si tu laisses une connection ouverte 24/24 il risque à un moment donné d'avoir des problèmes ...
 
Encore un truc. Ca sert a rien de faire un getInstance si ton instance est publique. Dans le design pattern du singleton l'instance doit etre privée.  
 
 



ok je paserai en private.
 
en fait je pense justement que le fait de recompiler+rempplacer le .class relance la connec c pr ca que ca marche.
 
ce qu'il me faudrait c'est (dans getInstance) un moyen de tester si la connec est OK, et la relancer si il le faut. mais je sais poa comment faire.

n°140268
darklord
You're welcome
Posté le 17-05-2002 à 10:41:49  profilanswer
 

bin déjà il faudrait que tu logs quel genre d'erreur tu as parce qu'un 500 c'est pas super explicite. Et pour ta remarque est débile.  C'est pas le fait de recompiler et de relancer qui fait que ca marche. C'est simplement le fait que tu recrées le singleton.  
 
Recompiler le meme code n'a rien à voir là dedans, c'est vraiment zarb ce que tu dis.
 
Donc catch les erreurs que tu pourrais avoir au niveau de ta connection et balance les logs.


---------------
Just because you feel good does not make you right
n°140273
Profil sup​primé
Posté le 17-05-2002 à 10:47:13  answer
 

DarkLord a écrit a écrit :

bin déjà il faudrait que tu logs quel genre d'erreur tu as parce qu'un 500 c'est pas super explicite. Et pour ta remarque est débile.  C'est pas le fait de recompiler et de relancer qui fait que ca marche. C'est simplement le fait que tu recrées le singleton.  
 
Recompiler le meme code n'a rien à voir là dedans, c'est vraiment zarb ce que tu dis.
 
Donc catch les erreurs que tu pourrais avoir au niveau de ta connection et balance les logs.  



je sais que c'est le fait de recréer le singleton qui fait que ca marche, c'est ce que je voulais dire (en remplacant le .class il detruit le singleton automatiquement je pense).
 
bo je vais essayer de catcher les erreur

n°140278
Profil sup​primé
Posté le 17-05-2002 à 10:56:25  answer
 

pr l'instant j'ai  

Code :
  1. Communication link failure: java.io.IOException


c'est tout :(
 
bon vais tenter de modifier le code pr recuperer la IOexception,

n°140283
darklord
You're welcome
Posté le 17-05-2002 à 11:00:55  profilanswer
 

la trace surtout avec le code qui correspond


---------------
Just because you feel good does not make you right
n°140303
Profil sup​primé
Posté le 17-05-2002 à 11:20:29  answer
 

ouais ben va faloir attendre que l'erreur intervienne a nouveau, lundi  :wahoo:  
 
en attendant je rajoute  

Code :
  1. if (jdbcConnection.isClosed())
  2.   {
  3.    String connectionString = cnxInfo.getString("url" ) + "?user=" +  cnxInfo.getString("user" ) + "&password=" + cnxInfo.getString("password" );
  4.    jdbcConnection = DriverManager.getConnection(connectionString);
  5.   }


dans le fonctions de query, on verra si ca peut résoudre le pb

n°140401
darklord
You're welcome
Posté le 17-05-2002 à 13:42:50  profilanswer
 

tu as ajouté une stack trace vers les logs au moins ?


---------------
Just because you feel good does not make you right
n°140408
Profil sup​primé
Posté le 17-05-2002 à 13:48:03  answer
 

c'est prévu

mood
Publicité
Posté le 17-05-2002 à 13:48:03  profilanswer
 

n°151894
chapi456
Posté le 05-06-2002 à 17:02:33  profilanswer
 

Normalement, ton singleton devrait conserver un pooledConnection plutot qu'un connection.
Et au lieu d'appeler directement connection.quelquechose(), tu fais : pool.getConnection().quelquechose() ...
Le pool va s'occuper de te trouver une connection valide et donc t'en recréera une le matin !!

n°151904
therier
heu...coucou!
Posté le 05-06-2002 à 17:14:10  profilanswer
 

Ton truc ça pue le Timeout sur la connection!
 
Si tu as les source de ton driver, va voir le code de la classe que tu obtiens sur ton driver.getconnection().

n°151909
darklord
You're welcome
Posté le 05-06-2002 à 17:15:43  profilanswer
 

ce topic pue le rat mort


---------------
Just because you feel good does not make you right
n°152078
greg@frees​tarthu
Posté le 05-06-2002 à 22:14:52  profilanswer
 

DarkLord a écrit a écrit :

ce topic pue le rat mort  




... dans la série DarkLord était de mauvais poil aujourd'hui: l'épisode où ça devient trash, qu'on sent qu'au prochain épisode il va jeter son pc par la fenetre


---------------
\^o^/ Libérez HotShot \^o^/
n°152145
benou
Posté le 05-06-2002 à 23:09:12  profilanswer
 

chapi456 a fait irruption sur le forum a écrit :

Normalement, ton singleton devrait conserver un pooledConnection plutot qu'un connection.
Et au lieu d'appeler directement connection.quelquechose(), tu fais : pool.getConnection().quelquechose() ...
Le pool va s'occuper de te trouver une connection valide et donc t'en recréera une le matin !!  




 
tin mais c'est pas possible ! encore un gars que je connais qui vient squatter ce forum ... je suis suivi ou quoi ???
 
:hello: ca va chapi ?  
il marche ton cookie :D


Message édité par benou le 06-05-2002 à 23:09:25
n°152514
chapi456
Posté le 06-06-2002 à 11:50:30  profilanswer
 

non , il marche pas ...
Et pis il faut bien te suivre pour corriger toutes les conneries que tu racontes !

n°152527
Profil sup​primé
Posté le 06-06-2002 à 11:57:19  answer
 

sympa d'avoir deterré le topic, mais en fait j'avai trouver une solution :)
 

Code :
  1. //on relance la connection si elle est fermée (après un certain temps d'inutilisation)
  2.   if (jdbcConnection.isClosed())
  3.   {
  4.    String connectionString = cnxInfo.getString("url" ) + "?user=" +  cnxInfo.getString("user" ) + "&password=" + cnxInfo.getString("password" );
  5.    jdbcConnection = DriverManager.getConnection(connectionString);
  6.   }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  java servlets, mysql, singleton, bug... on va bien s'amuser !!

 

Sujets relatifs
[java] Un peu d'algorithmique niveau combinatoire...[SVG / java/Batik] Manipulation / convertion de fichiers SVG
MYSQL ->> ORACLE[JAVA] variables d'environnement JAVA_HOME ?
[MFC] CFileDialog qui me retourne -1 ?! Comprend pas bien...PHP/MySQL - Synchronisation de serveurs
[MySQL] : problème lors du téléchargement d'une base en ligneJAVA débutant (vocabulaire)
[JAVA] peut on stocker des méthodes dans un tableau ou vectorPHP / Mysql -> Script News -> Exportation vers un autre site
Plus de sujets relatifs à : java servlets, mysql, singleton, bug... on va bien s'amuser !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR