I driver JDBC4 includono un file:
META-INF/services/java.sql.Driver
nel jar che utilizza il meccanismo ServiceProvider per registrare l'implementazione del driver con la JVM (vedi javadocs per java.util.ServiceLoader
). Ecco perché Class.forName
non è più necessario.
La mia ipotesi è che questo sia un problema del caricatore di classi. Il ServiceLoader
javadoc afferma che:
Proverei a mettere il tuo driver in tomcat\lib
directory anziché la directory dell'app Web per vedere se ciò fa la differenza (caricatore di classi diverso?).
Se avvii la tua app Web tramite un ide e imposti un punto di interruzione, una volta raggiunto il punto di interruzione, puoi utilizzare la funzione "valuta espressione" per eseguire:ServiceLoader.load(Driver.class)
. Questo ti darà un ServiceLoader
classe in cui puoi sbirciare per vedere quali Driver sono registrati. Puoi controllare se il driver mysql è presente, dove si trova nell'elenco, ecc., Il che potrebbe aiutare a capire il comportamento qui.