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 :
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");
		}
	}
...
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
 
...
		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.