Bonjour,

J'utilise un dataSource Struts pour gérer la connexion à ma base de données.

Les méthodes qui utilisent ce dataSource se présentent ainsi :

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
 
       ResultSet rs = null;
       Connection conn = null;
       PreparedStatement prep1 = null;
       try {
            conn = ds.getConnection();
            prep1 = conn.prepareStatement("SELECT CHAMP1, CHAMP2 FROM TABLE");
            rs = prep1.executeQuery();
            while (rs.next()) {
               //...
            }
        } catch (SQLException e) {
            e.printStackStrace();
        } finally {
            rs.close();
            prep1.close();
            conn.close();
        }

Le problème est que lorsque je "surcharge" mon appli en effectuant un nombre de requêtes démesuré, mon application reste bloquée sur la ligne suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Connection conn = ds.getConnection();
Je sais que c'est normal que l'application soit bloquée sur cette ligne un laps de temps étant donné que lorsque le nombre maximale de connexions occupées est atteinte, le dataSource se met en attente qu'une connexion soit libérée (principe du pool de connexions) mais là, je reste bloquée sur cette ligne inféfiniment, je ne récupère jamais la main.

Code de mon dataSource (struts-config.xml) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
<data-source key="monDataSource" type="org.apache.commons.dbcp.BasicDataSource">
     <set-property property="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
     <set-property property="password" value="manager" />
     <set-property property="url" value="jdbc:jtds:sqlserver://localhost:1433/QP_TEST" />
     <set-property property="username" value="sa" />
     <set-property property="defaultAutoCommit" value="true" />
     <set-property property="defaultReadOnly" value="false" />
</data-source>
Y a -t-il une erreur dans mon code ? Ou un principe fondamental que j'aurais oublié ?

Merci d'avance.