Os drivers JDBC4 incluem um arquivo:
META-INF/services/java.sql.Driver
no jar que usa o mecanismo ServiceProvider para registrar a implementação do Driver com a JVM (consulte javadocs para java.util.ServiceLoader ). É por isso que
Class.forName
não é mais necessário. Meu palpite é que este é um problema do carregador de classes. O
ServiceLoader
javadoc menciona que:Eu tentaria colocar seu driver no
tomcat\lib
diretório em vez do diretório do seu aplicativo da Web para ver se isso faz diferença (carregador de classes diferente?). Se você iniciar seu aplicativo da Web por meio de um IDE e definir um ponto de interrupção, quando atingir o ponto de interrupção, poderá usar o recurso "evaluate expression" para executar:
ServiceLoader.load(Driver.class)
. Isso lhe dará um ServiceLoader
classe que você pode espiar para ver quais Drivers estão registrados. Você pode verificar se o driver mysql está lá, onde está na lista, etc, o que pode ajudar a descobrir o comportamento aqui.