Salut à tous,

J'ai mis en place un pooling de connexion.
J'utilise une méthode de connexion centrale faisant appel à un DataSource défini dans un singleton.

Quelques élements de code :

// Le singleton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
public class DataSourceJavaSingletonOst {
 
	/** Donnée de classe contenant l'instance courante */
	private static DataSource dataSource = null;
 
	/** Constructeur privé interdisant l'instanciation en dehors de cette classe 
         * @throws SQLException */ 
	private DataSourceJavaSingletonOst() throws Exception {
 
		try {
			ResourceBundle bundle = ResourceBundle.getBundle("ost");
 
			// Définition du driver JDBC 
			String driver = bundle.getString("driverClassName");
 
			// Utilisateur de la base de données
			String user = bundle.getString("jdbc.user.ost");
 
			// Son password
			String pw = bundle.getString("jdbc.password.ost");
 
			// URL JDBC de connexion
			String connectURI = bundle.getString("jdbc.connection");
 
			BasicDataSource bds = new BasicDataSource();
			bds.setDriverClassName(driver);
			bds.setUsername(user);
			bds.setPassword(pw);
			bds.setUrl(connectURI);
 
			dataSource = (DataSource)bds;
 
		} catch (Exception e) {
			System.out.println("Erreur d'accès au dataSource " + e.getMessage());
			throw new Exception("Erreur d'accès au dataSource " + e.getMessage());
		}
	}
 
	/** Singleton de la classe courante */
	public static DataSource getInstance(){
		if (dataSource==null){
			try {
				new DataSourceJavaSingletonOst();
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
		return dataSource;
	}
}

// La méthode de connexion centrale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
public static Connection getConnection(String mode, String sName)
	{
		Connection connexion = null;
 
		try {
			connexion = DataSourceJavaSingletonOst.getInstance().getConnection();
		}
		catch (Exception e) {
			System.out.println("erreur lors de la connection a la base serveur : "+ e);
		}
 
		catch (Throwable th) {
			System.out.println("Erreur connexion " + th.getMessage());
		}
 
		return connexion;	
	}
Ensuite je précise que dans mon code je ferme bien les connexions, statement etc...

Je rencontre cependant un problème, au 4ème ou 5ème appel, la ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
connexion = DataSourceJavaSingletonOst.getInstance().getConnection();
plante sans me générer d'erreur (en mode debug, ça s'arrête et en execution standard, la servlet mouline), alors que le datasource est bien renvoyé par le singleton. J'ai même été jusqu'à mettre un catch (Throwable), c'est pour dire.

J'utilise exactement le même code dans une autre application et cela fonctionne sans problème.

Si quelqu'un a une petite idée, je suis preneur.

Merci !