In the Tomcat "JNDI Datasource How-To" documentation page <http://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#comments_section>, there is an unusually opinionated section, which discusses the Java service provider (driver manager) mechanism:
"*However, the implementation is fundamentally broken in all Java versions for a servlet container environment. The problem is that java.sql.DriverManager will scan for the drivers only once.*" Can someone help me understand what this means in more practical terms? The page goes on to say: "*...web applications that have database drivers in their WEB-INF/lib directory cannot rely on the service provider mechanism and should register the drivers explicitly.*" And, indeed, I have found that placing my JDBC driver in Tomcat's $CATALINA_HOME/lib or $CATALINA_BASE/lib will be loaded correctly, without explicit registration. MY QUESTIONS: (1) I don't understand why the "scan only once" limitation results in this behavior - so what am I missing, here, conceptually? (2) Where is this "scan only once" behavior documented? (3) What is it about a servlet container environment which allows this problem to exist? Thank you. For reference, here is the documentation link I used above: http://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html (The wording in the documentation has been this way for several Tomcat versions, going back a few years.)