Spring – org.apache.tomcat.jdbc.pool.DataSource is no longer in the tomcat 7 dbcp jar

poolingspringtomcat

I am trying to create a spring-managed standalone pool for tomcat-dbcp using the version 7.0.30 of tomcat-dbcp.jar

However it seems the org.apache.tomcat.jdbc.DataSource class that is referred to in the Tomcat's documentation (http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Standalone)

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
    destroy-method="close">
    <property name="factory"
        value="org.apache.tomcat.jdbc.pool.DataSourceFactory" />
    <property name="type" value="javax.sql.DataSource" />
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/ym" />
    <property name="username" value="admin" />
    <property name="password" value="admin" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="10" />
</bean>

So this spring bean definition is correct according to Tomcat doc, however when I start the app up, I get CNF exception:

Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.tomcat.jdbc.pool.DataSource] for bean with name 'dataSource' defined in class path resource [application-context.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.tomcat.jdbc.pool.DataSource

Am I being super stupid and missing the obvious here???

Best Answer

Class org.apache.tomcat.jdbc.pool.DataSource is included in tomcat-jdbc.jar, not tomcat-dbcp.jar. The Tomcat JDBC Connection Pool is a replacement for commons-dbcp, of which tomcat-dbcp is just a renamed version.

The jar file tomcat-jdbc.jar is not included in all Tomcat installations (e.g. it is not included in the standard Debian/Ubuntu package). You can download it from Maven Central or you can find it in the Tomcat binary distribution archive.

Related Topic