J'ai donc eu des problèmes avec le pilote MySQL Connector/J qui ne se charge pas correctement dans une application Java Web Start qui s'exécute sur Tomcat 6.0.20. J'ai copié le fichier JAR du connecteur MySQL dans le répertoire lib de Tomcat ainsi que le répertoire lib dans webapps // WEB-INF. J'ai également ajouté une référence au fichier JAR dans le fichier JNLP. Après quelques recherches, j'ai découvert que j'avais aussi besoin d'ajouter un noeud au fichier context.xml ($ CATALINA_HOME/conf), ce que j'ai fait selon la syntaxe Tomcat 6. Ci-dessous le contenu du fichier XML:MySQL Connector/J Problème
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
<Resource name="jdbc/MySQLDB" auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="10" maxIdle="1" maxWait="500" type="javax.sql.DataSource"
url="jdbc:mysql://myServerName:3306/myDbName" username="myUserName"
password="myPassword>" />
</Context>
Et voici le code que j'utilise pour accéder à la base de données:
Connection con = null;
try {
sb.append("\nAbout to register JDBC driver\n");
Driver driver=new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
sb.append("About to create new instance of mysql jdbc driver\n");
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException e) {
sb.append(e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
sb.append(e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
sb.append(e.getMessage());
e.printStackTrace();
} catch (SQLException e) {
sb.append(e.getMessage());
e.printStackTrace();
} catch (Exception e) {
sb.append(e.getMessage());
e.printStackTrace();
} // end try-catch
try {
sb.append("About to create connection using DriverManager\n");
con = DriverManager.getConnection("jdbc:mysql://myServerName:3306/myDbName","myUserName", "myPassword");
// Make sure that connection instance isn't null before creating statement and executing query.
if (con != null) {
sb.append("About to create SQL statement using con.createStatement\n");
Statement st = con.createStatement();
sb.append("About to create ResultSet by executing query");
ResultSet rs = st.executeQuery("SELECT * FROM catissue_user");
sb.append("About to loop through ResultSet\n");
while(rs.next()) {
sb.append(rs.getString(2));
} // end of while
sb.append("\nAbout to close ResultSet, Statement and connection\n");
rs.close();
st.close();
con.close();
} else {
sb.append("There was a problem creating the connection:\n");
} // end if
} catch(SQLException exception) {
sb.append(exception.getMessage());
exception.printStackTrace();
} catch(Exception exception) {
sb.append(exception.getMessage());
exception.printStackTrace();
} // end try-catch
Lorsque j'exécute le code d'Eclipse ou de SSH en utilisant Ant , Je reçois les résultats très bien, donc je sais que ce n'est pas un problème avec l'URL de connexion. Toutefois, lorsque je l'exécute à l'aide de Web Start (fichier jnlp), le JFrame ne s'ouvre même pas lorsque je clique sur le bouton. Je sais que ce n'est pas un problème avec l'écouteur d'événement, cependant, puisque le code fonctionne bien en l'exécutant des deux autres façons. J'ai compris que l'exception se produit quand le conducteur est enregistré mais si je n'inclue pas ces lignes, j'obtiens une erreur disant "Aucun conducteur approprié trouvé." Des suggestions sur ce que je peux faire pour résoudre ce problème?