Tomcat 7.0 Connection pooling - jdbc driver exception

10,240

Solution 1

I think you should include the driver for MySQL in your tomcat /lib folder instead of deploying it along with your web application. This way the server will find the proper classes to instantiate your connection pool and everything should go fine.

Solution 2

check if the classpath of your project contains the file mysql-connector-java-5.1.6.jar. Did maven run without problems?

Share:
10,240
vlio20
Author by

vlio20

Updated on June 04, 2022

Comments

  • vlio20
    vlio20 almost 2 years

    I want to implement connection pooling on my Tomcat server. Here is my context.xml file (placed under WebContent/META-INF/context.xml:

    <Context path="/evappserver" reloadable="true">
        <Resource
              name="jdbc/evapp"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              initialSize="34"
              maxActive="377"
              maxIdle="233"
              minIdle="89"
              timeBetweenEvictionRunsMillis="34000"
              minEvictableIdleTimeMillis="55000"
              validationQuery="SELECT 1"
              validationInterval="34"
              testOnBorrow="true"
              removeAbandoned="true"
              removeAbandonedTimeout="55"
              username="root"
              password=""
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/evapp?allowMultiQueries=true"
         />
    </Context> 
    

    I have a maven project so the mysql jdbc driver is imported via the pom.xml file, like this:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
    

    Here is my java code which throws the exception:

        Context initContext  = new InitialContext();
        Context envContext  = (Context) initContext.lookup("java:/comp/env");
        dataSource = (DataSource) envContext.lookup("jdbc/evapp"); //here is the exception
    

    Here is the exception:

    May 13, 2014 10:39:58 AM org.apache.naming.NamingContext lookup
    WARNING: Unexpected exception resolving reference
    java.sql.SQLException: com.mysql.jdbc.Driver
        at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254)
        at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:634)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:488)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
        at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:539)
        at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:237)
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
        at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
        at com.evappserver.dblayer.DBType.<init>(DBType.java:62)
        at com.evappserver.dblayer.MySqlDB.<init>(MySqlDB.java:16)
        at com.evappserver.logiclayer.BaseLogic.getMainDbConnection(BaseLogic.java:19)
        at com.evappserver.logiclayer.PasswordLoginLogic.doLogin(PasswordLoginLogic.java:27)
        at com.evappserver.servlets.PasswordLoginServlet.doGet(PasswordLoginServlet.java:37)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
    Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:266)
        at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
        ... 38 more
    

    Is there something wrong with this configuration?