Bonjour,
Je développe une application Web Java dans le serveur Tomcat avec une base de données MySQL 5.1, des pages JSP, Spring et Struts 1.3.
J'ai une difficulté avec la connexion DB. J'ai créé une classe DBConnection implémentant le design pattern Singleton pour récupérer la connexion DB. J'utilise un pool de connexion et je garde l'objet de connexion comme membre statique privé de la classe DBConnection. J'utilise cette classe, et l'objet Connection qui est fourni par le Connection Pool Tomcat dans des classes de la couche DB. J'utilise ces classes dans les JSP (qui incluent éventuellement d'autres JSP), et dans les controleurs Struts.
Le problème est que la classe DBConnection, l'objet Connection Pool, et la Connexion JDBC sont instanciés plusieurs fois (comme je le vois dans le log de chaque requête aux pages JSP).
Je me demande si c'est normal. Pour moi, l'objet DBConnection ne devrait être instancié qu'une fois dans la JVM, ainsi que le connection pool, comme j'ai utilisé le design pattern Singleton mais vu que c'est la première fois que j'utilise un connection pool, je ne suis pas très sûr.
Voici le code de la classe DBConnection:
Dans le log j'ai enregistré ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
2 instanciation de DBConnectionLogin submit
22-août-2009 0:24:42 steemploi.persistance.DBConnection log
INFO: DBConnection.dbconnection = new DBConnection();
22-août-2009 0:24:42 steemploi.persistance.DBConnection log
INFO: DBConnection.dbconnection = new DBConnection();
22-août-2009 0:24:42 steemploi.persistance.DBConnection log
INFO: Connection == null
22-août-2009 0:24:42 steemploi.persistance.DBConnection log
INFO: Connection == null
22-août-2009 0:24:42 steemploi.persistance.DBConnection log
INFO: Connection == null
22-août-2009 0:24:43 steemploi.persistance.DBConnection log
INFO: DBConnection.ds.getConnection(); OK
22-août-2009 0:24:43 steemploi.persistance.DBConnection log
INFO: DBConnection.ds.getConnection(); OK
22-août-2009 0:24:43 steemploi.persistance.DBConnection log
INFO: DBConnection.ds.getConnection(); OK
22-août-2009 0:24:43 steemploi.persistance.DBConnection log
INFO: DBConnection.ds.getConnection(); OK
22-août-2009 0:24:43 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:24:43 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:24:43 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:24:43 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:24:43 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
4 instanciations (récupération?) de Connection
Est-ce que ça veut dire que Tomcat garde un objet pour les futures requêtes clients? Enfin ça a l'air de bien fonctionner finalement.Lors du deuxième appel j'ai ceci:
22-août-2009 0:41:49 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:41:49 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:41:49 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:41:49 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:41:49 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
22-août-2009 0:41:49 steemploi.persistance.Table log
INFO: steemploi.persistance.TableEtudiants : findById()
Finalement ça fonctionne.
J'avais un autre problème, avec cette classe DBConnection et les requêtes JSP. Faut-il fermer le connectionPool Tomcat après utilisation? A mon avis, non dans mon cas car le Connection Pool est apparemment gardé pour plusieurs requêtes HTTP et est sans doute libéré après un certain temps d'inutilisation.
Voilà, je n'avais pas trouvé de documentation à ce sujet et j'ai quand même réussi à le faire

 

 
		
		 
        

 
			
			


 
   
 


 Connexion pool Tomcat
 Connexion pool Tomcat
				 Répondre avec citation
  Répondre avec citation
Partager