views:

124

answers:

2

Hello,

I am making a web-app with Tomcat 6 as the container and I'm trying to use connection pooling. The jdbc driver I am using is jtds-1.2.2.
The pool works fine when the driver jar is placed under ${Catalina_Home}/lib, but my hosting provider would not let me do so.

I get a CNF-Exception when the driver is placed in the WEB-INF/lib.

Could someone please provide a solution where I won't have to access the tomcat installation?

+1  A: 

If you don't have control over the server, then you're lost. Just create the connection pool yourself instead of letting the container do it.

I suggest to use c3p0 for this (which is far better than Tomcat's builtin DBCP since it's locked to a single thread). Put the c3p0 libraries in the /WEB-INF/lib and create it as per its documentation:

ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
dataSource.setDriverClass("org.postgresql.Driver"); 
dataSource.setJdbcUrl("jdbc:postgresql://localhost/testdb");
dataSource.setUser("dbuser");
dataSource.setPassword("dbpassword"); 
// ...

Connection connection = null;
// ...
try {
    connection = dataSource.getConnection();
    // ...
} finally {
    // ...
    if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} // Always close resources in finally!
}
BalusC
Good, then I should go for c3p0 :). Thank you!
hkansal
+1  A: 

To use Tomcat's connection pool, you must copy the JDBC Driver's jar into $CATALINA_HOME/lib (as documented) so that the driver class is visible through the Common class loader or DBCP won't be able to find it, hence the ClassNotFoundException. Tomcat's class loaders hierarchy is illustrated below:

      Bootstrap
          |
       System
          |
       Common
       /     \
  Webapp1   Webapp2 ... 

And libraries from WEB-INF/lib are not visible from the Common class loader (which is a good thing).

If you can't copy your driver into $CATALINA_HOME/lib, you won't be able to use Tomcat's connection pool. In that case, you'll have to use a standalone connection pool (and to bundle it along your driver in WEB-INF/lib). And I second BalusC here, I would use C3P0.

Pascal Thivent
Got it! Thank you :)
hkansal