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 :
- public class MySQL
- {
- private Connection jdbcConnection;
- private ResultSet rs;
- private ResourceBundle cnxInfo = null;
- //la seule instance de la classe
- public static MySQL instance=new MySQL();
- //comment retourner cette instance
- public static MySQL getInstance()
- {
- return instance;
- }
- //constructeur. protégé pr pas que des gens essaient de feinter et l'utiliser en plusieurs instances
- private MySQL ()
- {
- //permet de prendre les paramètres du fichier dbprod.properties
- cnxInfo = ResourceBundle.getBundle("dbprod" );
- try
- {
- //connection à la base MySQL
- Class.forName((String) cnxInfo.getString("driver" ) );
- String connectionString = cnxInfo.getString("url" ) + "?user=" + cnxInfo.getString("user" ) + "&password=" + cnxInfo.getString("password" );
- jdbcConnection = DriverManager.getConnection(connectionString);
- }
- catch (SQLException connectionError)
- {
- System.err.println("[Test: MySQL : constructeur : SQL : " +connectionError.getMessage()+"]" );
- while ((connectionError=connectionError.getNextException()) != null)
- {
- System.err.println("[Test: MySQL : SQL : " +connectionError.getMessage()+"]" );
- }
- }
- catch (ClassNotFoundException e)
- {
- System.err.println("[Test: MySQL : CLASS : " +e.getMessage()+"]" );
- }
- }
|