java - SQLException w/ Tomcat 7.0 JDBC connection pool and MySql -
i'm trying use new tomcat 7.0 jdbc connection pool , mysql. says here can drop latest tomcat-jdbc.jar tomcat/lib directory in tomcat 6.0 environment, , that's i've done.
i'm using spring initialize , instantiate datasource per examples around web:
<bean id="mydatasource" class="org.apache.tomcat.jdbc.pool.datasource" destroy-method="close" p:driverclassname="${driver_class}" p:url="${url}" p:username="${username?root}" p:password="${password}" p:initialsize="10" p:initsql="select dts dt_tm_ts read ur" p:minidle="10" p:maxidle="100" p:maxactive="100" p:maxwait="6000" p:jmxenabled="true" p:jdbcinterceptors="org.apache.tomcat.jdbc.pool.interceptor.connectionstate;org.apache.tomcat.jdbc.pool.interceptor.statementfinalizer" p:removeabandoned="true" p:removeabandonedtimeout="60" p:logabandoned="true" p:testonborrow="true" p:testonreturn="false" p:testwhileidle="false" p:useequals="false" p:fairqueue="false" p:timebetweenevictionrunsmillis="30000" p:minevictableidletimemillis="30000" p:validationinterval="1800000" p:validationquery="select dts dt_tm_ts read ur" />
however when try connect db throws exception:
java.sql.sqlexception: "com.mysql.jdbc.driver" @ org.apache.tomcat.jdbc.pool.pooledconnection.connectusingdriver(pooledconnection.java:243) @ org.apache.tomcat.jdbc.pool.pooledconnection.connect(pooledconnection.java:176) @ org.apache.tomcat.jdbc.pool.connectionpool.createconnection(connectionpool.java:647) @ org.apache.tomcat.jdbc.pool.connectionpool.borrowconnection(connectionpool.java:589) @ org.apache.tomcat.jdbc.pool.connectionpool.init(connectionpool.java:452) @ org.apache.tomcat.jdbc.pool.connectionpool.<init>(connectionpool.java:130) @ org.apache.tomcat.jdbc.pool.datasourceproxy.createpool(datasourceproxy.java:99) @ org.apache.tomcat.jdbc.pool.datasourceproxy.getconnection(datasourceproxy.java:110) @ org.hibernate.ejb.connection.injecteddatasourceconnectionprovider.getconnection(injecteddatasourceconnectionprovider.java:46) @ org.hibernate.cfg.settingsfactory.buildsettings(settingsfactory.java:111) @ org.hibernate.cfg.configuration.buildsettings(configuration.java:2101) @ org.hibernate.cfg.configuration.buildsessionfactory(configuration.java:1325) @ org.hibernate.cfg.annotationconfiguration.buildsessionfactory(annotationconfiguration.java:867) @ org.hibernate.ejb.ejb3configuration.buildentitymanagerfactory(ejb3configuration.java:669) @ org.hibernate.ejb.hibernatepersistence.createcontainerentitymanagerfactory(hibernatepersistence.java:132) @ org.springframework.orm.jpa.localcontainerentitymanagerfactorybean.createnativeentitymanagerfactory(localcontainerentitymanagerfactorybean.java:225) @ org.springframework.orm.jpa.abstractentitymanagerfactorybean.afterpropertiesset(abstractentitymanagerfactorybean.java:308) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1477) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1417) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:519) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor.finddefaultentitymanagerfactory(persistenceannotationbeanpostprocessor.java:529) @ org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor.findentitymanagerfactory(persistenceannotationbeanpostprocessor.java:495) @ org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor$persistenceelement.resolveentitymanager(persistenceannotationbeanpostprocessor.java:656) @ org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor$persistenceelement.getresourcetoinject(persistenceannotationbeanpostprocessor.java:629) @ org.springframework.beans.factory.annotation.injectionmetadata$injectedelement.inject(injectionmetadata.java:147) @ org.springframework.beans.factory.annotation.injectionmetadata.inject(injectionmetadata.java:84) @ org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor.postprocesspropertyvalues(persistenceannotationbeanpostprocessor.java:338) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory.java:1074) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:517) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:580) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.web.context.contextloader.createwebapplicationcontext(contextloader.java:276) @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:197) @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:47) @ org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:4135) @ org.apache.catalina.core.standardcontext.start(standardcontext.java:4630) @ org.apache.catalina.core.containerbase.start(containerbase.java:1045) @ org.apache.catalina.core.standardhost.start(standardhost.java:785) @ org.apache.catalina.core.containerbase.start(containerbase.java:1045) @ org.apache.catalina.core.standardengine.start(standardengine.java:445) @ org.apache.catalina.core.standardservice.start(standardservice.java:519) @ org.apache.catalina.core.standardserver.start(standardserver.java:710) @ org.apache.catalina.startup.catalina.start(catalina.java:581) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.apache.catalina.startup.bootstrap.start(bootstrap.java:289) @ org.apache.catalina.startup.bootstrap.main(bootstrap.java:414) caused by: java.lang.classnotfoundexception: "com.mysql.jdbc.driver" @ java.net.urlclassloader$1.run(urlclassloader.java:202) @ java.security.accesscontroller.doprivileged(native method) @ java.net.urlclassloader.findclass(urlclassloader.java:190) @ java.lang.classloader.loadclass(classloader.java:307) @ java.lang.classloader.loadclass(classloader.java:248) @ java.lang.class.forname0(native method) @ java.lang.class.forname(class.java:247) @ org.apache.tomcat.jdbc.pool.pooledconnection.connectusingdriver(pooledconnection.java:236) ... 59 more
i've got mysql-connector-java-5.1.13-bin.jar in both webapp web-inf/lib , tomcat/lib. can connect fine specifying driver details in persistence.xml (no datasource/connection pooling).
there simple workaround spring. instead of having tomcat connection pool create database connection , fail because of class loader shenanigans, let spring create , pass reference connection pool.
<!-- data source template use in connection pool. --> <bean id="datasourcetemplate" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- connection pool data source. --> <bean id="datasource" class="org.apache.tomcat.jdbc.pool.datasource" destroy-method="close"> <!-- refer separately created bean data source template work around quirk of tomcat's class loader. --> <property name="datasource" ref="datasourcetemplate" /> ... </bean>
then connection pool use database connection template creating many additional connections needs.
the best part don't have mess tomcat/lib, may not have access to.
Comments
Post a Comment