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
Ensuite je précise que dans mon code je ferme bien les connexions, statement etc...
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; }
Je rencontre cependant un problème, au 4ème ou 5ème appel, la ligne :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part connexion = DataSourceJavaSingletonOst.getInstance().getConnection();
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 !
Partager