Struts 2 : erreur de chargement de driver MySQL
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:
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:
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:
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:
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:
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:
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.