Bonjour à tous,
J'ai actuellement un problème sur une appli J2EE/Struts sous WAS5 avec des accès base Oracle via JDBC : nous effectuons actuellement des tests de charges sur cette appli et nous constatons beaucoup d'exception sql lors de la montée en charge![]()
Ces SQLException sont dans 90% des cas des :
- DSRA9110E: Statement est fermé
- DSRA9110E: Connection est fermé
Alors ok ça veut dire que mes objets sont déjà fermés quand je les appelle, mais pourquoi ? Voici mon code :
L'appli utilise une datasource pour acceder à la base :
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 ... private static void initDataSource(String nomJndi) throws DataBaseException { InitialContext ctx = null; try { ctx = new InitialContext(); dataSource = (DataSource)ctx.lookup(nomJndi); } catch (NamingException e) { throw new DataBaseException("message."); } finally { if(ctx != null) { try { ctx.close(); } catch (NamingException e1) { throw new DataBaseException("message."); } } } } ...
Une classe mère pour nos DAO qui possède les méthodes suivantes :
Et nos DAO ressemblent à ça :
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 ... protected PreparedStatement prepare(String requeteSql) throws SQLException, DataBaseException { if (connection == null || connection.isClosed()) { ds = DataSourceHelper.getDataSource(this.nomJndi); // appel à la méthode initDataSource ci-dessus connection = ds.getConnection(); } return connection.prepareStatement(requeteSql); } /** * Fermeture de l'état et de la connexion */ protected void fermerStatement (PreparedStatement pstmt) { try { if(pstmt != null){ pstmt.close(); } } catch (SQLException e) { log.error("message"); } } /** * Fermeture de la connexion */ protected void fermerConnection () { try { if(connection != null){ connection.close(); } } catch (SQLException e) { log.error("message"); } } ...
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 ... PreparedStatement pstmt = null; try { pstmt = prepare(REQUETE); pstmt.setString(1,premierParam); pstmt.setString(2,secondParam); ResultSet rs = pstmt.executeQuery(); while(resultat.next()){ truc = construireTruc(rs); liste.add(truc); } } catch (SQLException e) { throw new MonException("message",e); } finally { fermerStatement(pstmt); fermerConnection(); } return liste; ...
Avez-vous une idée de ce qui provoque mes SQLException lors de la montée en charge de mon appli ?
Merci pour vos réponses.
Partager