title: Where do I have to place the JDBC driver for Tomcat's connection pool?
body: <p>So I've figured out my error, now I'm just looking for some insight as to what is going on exactly. I am using Apache Tomcat Version 7.0.32. I am using <a href="http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html" rel="noreferrer">this tutorial</a> to set up pooling for JDBC. In my META-INF folder I made a context.xml file and put this in there.</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  
  &lt;Context&gt;
      &lt;Resource type="javax.sql.DataSource" name="jdbc/gmustudent"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/official"
          username="root" password="root"
          maxActive="100" maxIdle="20" minIdle="15" initialSize="15" maxWait="10000" /&gt;
  &lt;/Context&gt;
  </code></pre>
  
  <p>I got this error when I wrote this</p>
  
  <pre><code>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:699)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:631)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:485)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:143)
      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:304)
      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 org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1061)
      at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671)
      at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
      at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
      at java.util.concurrent.FutureTask.run(FutureTask.java:138)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
      at java.lang.Thread.run(Thread.java:680)
  Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
      at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
      at java.lang.Class.forName0(Native Method)
      at java.lang.Class.forName(Class.java:247)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
      ... 29 more
  Oct 31, 2012 11:23:25 AM org.apache.catalina.core.NamingContextListener addResource
  WARNING: Failed to register in JMX: javax.naming.NamingException: com.mysql.jdbc.Driver
  Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start
  INFO: Starting ProtocolHandler ["http-bio-8086"]
  Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start
  INFO: Starting ProtocolHandler ["ajp-bio-8009"]
  Oct 31, 2012 11:23:25 AM org.apache.catalina.startup.Catalina start
  INFO: Server startup in 794 ms
  </code></pre>
  
  <p>This error only comes up when I have this statement in my context.xml file. When I remove it no error. </p>
  
  <pre><code>factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
  </code></pre>
  
  <p>The reason I want to make sure that I have it is because in the apache tomcat tutorial it says</p>
  
  <pre><code>factory is required, and the value should be org.apache.tomcat.jdbc.pool.DataSourceFactory
  </code></pre>
  
  <p>So then I did a little bit of research on SO and found a post saying that you need to add <a href="http://people.apache.org/~fhanik/jdbc-pool/" rel="noreferrer">this jar</a> to your lib folder if you have an older version of tomcat. So I added the jar and now it works but I would like to have some information as to what on earth is going on because I am using the newest tomcat version. So why when I specify a factory do I get an error. And what is this jar that I'm adding in and why is there very little documentation about it? Any information about what is going on here would be greatly appreciated.</p>