Sujet assez pointu mais je pose quand même la question : Je cherche à charger en live des drivers JDBC avec un système de plugin (mon mysql.jar n’est donc pas à l’origine dans le classpath).
Voici mon code :
[code] public static void main(String… args) throws Exception {
JarFileLoader jarFileLoader = new JarFileLoader();
jarFileLoader.addFile("/usr/share/java/mysql.jar");
Driver driver = (Driver)Class.forName(“com.mysql.jdbc.Driver”, true, jarFileLoader).newInstance();
DriverManager.registerDriver(driver);
// Affichage des drivers chargés
for (Driver myDriver : Collections.list(DriverManager.getDrivers())) {
logger.debug(myDriver.getClass().getName());
}
Properties props = new Properties();
props.setProperty("user", "achievo");
props.setProperty("password", "achievo");
props.setProperty("autoReconnect", "true");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/achievo", props);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery("SELECT 1");
if (result.next()) {
logger.debug("Result : " + result.getInt(1));
}
}
}[/code]
et le résultat :
21:08:38.979 [main] DEBUG org.hibiscus.analysesi.db.DbManager - sun.jdbc.odbc.JdbcOdbcDriver
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/achievo
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.hibiscus.analysesi.db.DefaultDbManager.main(DefaultDbManager.java:286)
Comme vous le voyez, il ne me trouve pas mon Driver même si j’arrive à instancier la classe “com.mysql.jdbc.Driver”, par contre si j’ajoute mon fichier jar mysql.jar dans le classpath, ça passe bien.
J’essaye de fouiller dans tout ce qui touche au Driver JDBC et au ClassLoader mais je ne trouve pas beaucoup de documentation sur la marche à suivre. Y a-t-il quelqu’un qui ai déjà du travailler avec plusieurs ClassLoader et qui connait les pièges à éviter ?