Bonjour,

Je suis en train de migrer une application Struts en Struts 2 et j'ai un problème au moment d'accéder aux bases : le driver est inconnu

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
Pourtant le driver est bien dans le classpath "WEB-INF/lib".

Si je déplace mon driver dans le Tomcat/lib, çà marche mais ce n'est pas ce que je veux !!

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
 
	public ArrayList<Compte> chercherListe() throws BudgetException, BudgetSQLException {
 
		ResultSet rs = null;
		Statement st = null;
 
		ArrayList<Compte> liste = new ArrayList<Compte>();
 
		StringBuilder requete = new StringBuilder();
 
		requete.append("select * ");
		requete.append(" from TYPREGL ");
		requete.append(" order by LIBELLE ");
 
		try {
			Connection connexion = super.GetConnexion();
 
			st = connexion.createStatement();
 
			rs = st.executeQuery(requete.toString());
			while (rs.next()) {
				Compte compte = new Compte();
				compte.setCode(rs.getString("CODE"));
				compte.setLibelle(rs.getString("LIBELLE"));
 
				liste.add(compte);
			}
		} catch (SQLException e) {
			throw new BudgetSQLException(this, e);
		} catch (Exception e) {
			// des erreurs se sont produites
			throw new BudgetException(this, e);
		} finally {
			super.closeResultset(rs);
			super.closeRequest(st);
		}
 
		return liste;
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
 
	public Connection GetConnexion() throws Exception {
 
		// Creation de la connection
		ServletContext servletContext = ServletActionContext.getServletContext();
 
		if (null == dataSource) {
			dataSource = (DataSource)servletContext.getAttribute("dataSource");
		}
 
		Connection connection = null;
		if (null != dataSource)	{
			try	{
				connection = dataSource.getConnection();
			} catch (SQLException e) {
				System.out.println(e);
			}
		}
 
		return connection;
	}
mon web.xml
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
 
	<!-- chargeur du datasource -->
	<listener>
		<listener-class>fr.pmo.budget.dao.DatasourceListener</listener-class>	    
	</listener>
 
	<!-- information de connexion a la base de donnees -->
	<resource-ref>
	    <descritpion>Connexion a la base de donnees</descritpion>
	    <res-ref-name>jdbcMysql</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth> 
	</resource-ref>
 
	<context-param>
	    <param-name>dataSource</param-name>
	    <param-value>java:/comp/env/jdbcMysql</param-value>
	</context-param>
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
 
public class DatasourceListener implements ServletContextListener {
 
	Context context = null;
	// fonction appelée lors de la création du lanceur
 
	@Override
	public void contextInitialized(ServletContextEvent servletContextEvent)	{
 
		ServletContext servletContext = servletContextEvent.getServletContext();
 
		String dataSourceJNDI = servletContext.getInitParameter("dataSource");
 
		try {
			context = new InitialContext();
			DataSource dataSource = (DataSource)context.lookup(dataSourceJNDI);
			servletContext.setAttribute("dataSource", dataSource);
		} catch (NamingException e)	{
			throw new RuntimeException();
		} finally {
			try {
				// fermer le context
				if (null != context) {
					context.close();
				}
			} catch (Exception e) {
				System.out.println("Erreur lors de initCtx !");
			}
		}
	}
Mon context.xml
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
 
<Context docBase="ProjectName" 
    path="/ProjectName" 
    reloadable="true" 
    source="org.eclipse.jst.jee.server:apiBlog" >
 
   	<Resource name="jdbcMysql"
   		auth="Container"
   		type="javax.sql.DataSource"
   		username="root"
   		password=""
   		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/budget"
		maxActive="20"
		maxIdle="10"
		validationQuery="SELECT 1" />
</Context>
j'ai essayé avec driverClassName="org.gjt.mm.mysql.Driver" (même résultat)

La version de Struts est la 2.5.14.1.

La version du driver MySQL 5.1.22.

Merci d'avance à ceux qui chercheront une solution à mon problème.