Also, please note that JNDI DataSource configuration in general, and this tutorial in
particular, assumes that you have read and understood
the Context and Hostconfiguration references, including the section about Automatic
Application Deployment in the latter reference.
DriverManager, the service provider mechanism and memory
leaks
java.sql.DriverManager
supports the service provider mechanism. This feature
is that all the available JDBC drivers that announce themselves by providing a
META-
INF/services/java.sql.Driver
file are automatically discovered, loaded and
registered, relieving you from the need to load the database driver explicitly before you
create a JDBC connection. 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.
The JRE Memory Leak Prevention Listener that is included with Apache Tomcat solves
this by triggering the drivers scan during Tomcat startup. This is enabled by default. It
means that only libraries visible to the listener such as the ones
in
$CATALINA_BASE/lib
will be scanned for database drivers. If you are
considering disabling this feature, note that the scan would be triggered by the first web
application that is using JDBC, leading to failures when this web application is reloaded
and for other web applications that rely on this feature.
Thus, the 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.
The list of drivers in
java.sql.DriverManager
is also a known source of memory
leaks. Any Drivers registered by a web application must be deregistered when the web
application stops. Tomcat will attempt to automatically discover and deregister any JDBC
drivers loaded by the web application class loader when the web application stops.
However, it is expected that applications do this for themselves via
a
ServletContextListener
.
Database Connection Pool (DBCP 2) Configurations
The default database connection pool implementation in Apache Tomcat relies on the
libraries from the Apache Commons project. The following libraries are used:
Commons DBCP
Commons Pool
评论