title: Tomcat JDBC Pool: Too many connections
body: <p>I am using Tomcat JDBC pool for MySQL DB connection pool in my web application. The JDBC pool is declared as resource in context.xml of application (not at global level). I am developing this web application in Eclipse IDE. So, whenever I make changes to code, eclipse makes Tomcat server to reload context.</p>
  
  <p>But the problem is, when context gets reloaded, tomcat creates JDBC pool with new connections without releasing old pool. And after few more changes to code, the tomcat eventually exhausts MySQL server maximum connection limit, and tomcat starts displaying "Too many connections" error on context reloads.</p>
  
  <p>My context.xml file is like:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;Context&gt;
      &lt;Resource
          name="jdbc/myDB"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          username="root"
          password="admin"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/myDB?allowMultiQueries=true"
          defaultAutoCommit="false"
          initialSize="20"
          maxActive="50"
          maxIdle="30"
          minIdle="15"
          maxWait="5000"
          testOnBorrow="true"
          testWhileIdle="true"
          validationQuery="SELECT 1"
          timeBetweenEvictionRunsMillis="35000"
          minEvictableIdleTimeMillis="55000"
          removeAbandoned="true"
          removeAbandonedTimeout="3600"
          logAbandoned="true"
          validationInterval="35000"
      /&gt;
  &lt;/Context&gt;
  </code></pre>
  
  <p>My web.xml is like:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"&gt;
    &lt;display-name&gt;MyApp&lt;/display-name&gt;
  
    &lt;welcome-file-list&gt;
      &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
      &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
    &lt;/welcome-file-list&gt;
  
    &lt;resource-ref&gt;
        &lt;description&gt;MyApp DB Connection&lt;/description&gt;
        &lt;res-ref-name&gt;jdbc/myDB&lt;/res-ref-name&gt;
        &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
        &lt;res-auth&gt;Container&lt;/res-auth&gt;
    &lt;/resource-ref&gt;
  
    &lt;context-param&gt;
      &lt;param-name&gt;data-source-lookup-name&lt;/param-name&gt;
      &lt;param-value&gt;java:comp/env/jdbc/myDB&lt;/param-value&gt;
    &lt;/context-param&gt;
  
    &lt;listener&gt;
      &lt;listener-class&gt;com.project.listeners.AppListener&lt;/listener-class&gt;
    &lt;/listener&gt;
  &lt;/web-app&gt;
  </code></pre>
  
  <p>App Listener is like:</p>
  
  <pre><code>package com.project.listeners;
  
  import java.sql.Driver;
  import java.sql.DriverManager;
  import java.util.Enumeration;
  
  import javax.servlet.ServletContext;
  import javax.servlet.ServletContextEvent;
  import javax.servlet.ServletContextListener;
  
  import org.apache.log4j.Logger;
  
  import com.mysql.jdbc.AbandonedConnectionCleanupThread;
  
  public class AppListener implements ServletContextListener {
      private static Logger logger = Logger.getLogger(AppListener.class);
  
      @Override
      public void contextInitialized(ServletContextEvent event) {
          logger.info("Application context initialing");
  
          ServletContext context = event.getServletContext();
  
          DBObjectNames.dataSourceLookupName = context.getInitParameter("data-source-lookup-name");
          if(DBObjectNames.dataSourceLookupName == null){
              logger.fatal("data-source-lookup-name init parameter not supplied, using default: java:comp/env/jdbc/myDB");
              DBObjectNames.dataSourceLookupName = "java:comp/env/jdbc/myDB";
          }
          DBObjectNames.dataSourceLookupName = DBObjectNames.dataSourceLookupName.trim();
          logger.info("data-source-lookup-name set to: " + DBObjectNames.dataSourceLookupName);
  
          logger.info("Application context initialed");
      }
  
      @Override
      public void contextDestroyed(ServletContextEvent event) {
          logger.info("Application context destroying");
  
          try {
              logger.info("Shutting down AbandonedConnectionCleanupThread");
              AbandonedConnectionCleanupThread.shutdown();
              logger.info("Shut down AbandonedConnectionCleanupThread");
          } catch (Throwable t) {
              logger.fatal("Error while shutting down AbandonedConnectionCleanupThread", t);
          }
  
          Enumeration&lt;Driver&gt; drivers = DriverManager.getDrivers();
          while (drivers.hasMoreElements()) {
              Driver driver = drivers.nextElement();
              try {
                  logger.info("Deregistering driver: " + driver);
                  DriverManager.deregisterDriver(driver);
                  logger.info("Deregistered driver: " + driver);
              } catch (Throwable t) {
                  logger.fatal("Error while deregistering driver: " + driver, t);
              }
          }
  
          logger.info("Application context destroyed");
      }
  }
  </code></pre>
  
  <p>And I get exceptions like:</p>
  
  <pre><code>Oct 30, 2014 4:16:54 PM org.apache.catalina.core.StandardContext reload
  INFO: Reloading Context with name [/myapp] is completed
  Oct 30, 2014 4:17:04 PM org.apache.catalina.core.StandardContext reload
  INFO: Reloading Context with name [/myapp] has started
  2014-10-30 16:17:04,497 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context destroying
  2014-10-30 16:17:04,498 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Shutting down AbandonedConnectionCleanupThread
  2014-10-30 16:17:04,498 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Shut down AbandonedConnectionCleanupThread
  2014-10-30 16:17:04,498 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context destroyed
  Oct 30, 2014 4:17:04 PM org.apache.jasper.servlet.TldScanner scanJars
  INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
  2014-10-30 16:17:04,660 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context initialing
  2014-10-30 16:17:04,661 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - data-source-lookup-name set to: java:comp/env/jdbc/myDB
  2014-10-30 16:17:04,662 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context initialed
  Oct 30, 2014 4:17:04 PM org.apache.catalina.core.StandardContext reload
  INFO: Reloading Context with name [/myapp] is completed
  Oct 30, 2014 4:17:14 PM org.apache.catalina.core.StandardContext reload
  INFO: Reloading Context with name [/myapp] has started
  2014-10-30 16:17:14,665 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context destroying
  2014-10-30 16:17:14,666 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Shutting down AbandonedConnectionCleanupThread
  2014-10-30 16:17:14,666 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Shut down AbandonedConnectionCleanupThread
  2014-10-30 16:17:14,666 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context destroyed
  Oct 30, 2014 4:17:14 PM org.apache.tomcat.jdbc.pool.ConnectionPool init
  SEVERE: Unable to create initial connections of pool.
  com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
      at com.mysql.jdbc.Util.getInstance(Util.java:360)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
      at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1037)
      at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2234)
      at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2265)
      at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064)
      at com.mysql.jdbc.ConnectionImpl.&lt;init&gt;(ConnectionImpl.java:790)
      at com.mysql.jdbc.JDBC4Connection.&lt;init&gt;(JDBC4Connection.java:44)
      at sun.reflect.GeneratedConstructorAccessor12.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
      at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:395)
      at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:307)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:142)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:553)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:241)
      at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
      at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
      at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
      at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
      at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5120)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3821)
      at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
      at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5576)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
      at java.lang.Thread.run(Unknown Source)
  
  Oct 30, 2014 4:17:14 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon
  WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@1090e8d6]:java.lang.Exception
      at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1052)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:704)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:142)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:553)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:241)
      at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
      at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
      at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
      at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
      at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5120)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3821)
      at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
      at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5576)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
      at java.lang.Thread.run(Unknown Source)
  
  Oct 30, 2014 4:17:14 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon
  WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@c572aa4]:java.lang.Exception
      at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1052)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:704)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:142)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:553)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:241)
      at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
      at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
      at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
      at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
      at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5120)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3821)
      at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
      at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5576)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
      at java.lang.Thread.run(Unknown Source)
  
  Oct 30, 2014 4:17:14 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon
  WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@72e8fcdd]:java.lang.Exception
      at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1052)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:704)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:142)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:553)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:241)
      at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
      at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
      at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
      at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
      at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5120)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3821)
      at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
      at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5576)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
      at java.lang.Thread.run(Unknown Source)
  
  Oct 30, 2014 4:17:14 PM org.apache.naming.NamingContext lookup
  WARNING: Unexpected exception resolving reference
  com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
      at com.mysql.jdbc.Util.getInstance(Util.java:360)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
      at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1037)
      at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2234)
      at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2265)
      at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064)
      at com.mysql.jdbc.ConnectionImpl.&lt;init&gt;(ConnectionImpl.java:790)
      at com.mysql.jdbc.JDBC4Connection.&lt;init&gt;(JDBC4Connection.java:44)
      at sun.reflect.GeneratedConstructorAccessor12.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
      at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:395)
      at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:307)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:142)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:553)
      at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:241)
      at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
      at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
      at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
      at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
      at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
      at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5120)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3821)
      at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
      at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5576)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
      at java.lang.Thread.run(Unknown Source)
  
  Oct 30, 2014 4:17:14 PM org.apache.catalina.core.NamingContextListener addResource
  WARNING: Failed to register in JMX: javax.naming.NamingException: Data source rejected establishment of connection,  message from server: "Too many connections"
  Oct 30, 2014 4:17:14 PM org.apache.jasper.servlet.TldScanner scanJars
  INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
  2014-10-30 16:17:14,788 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context initialing
  2014-10-30 16:17:14,789 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - data-source-lookup-name set to: java:comp/env/jdbc/myDB
  2014-10-30 16:17:14,791 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  com.project.listeners.AppListener  - Application context initialed
  Oct 30, 2014 4:17:14 PM org.apache.catalina.core.StandardContext reload
  INFO: Reloading Context with name [/myapp] is completed
  </code></pre>
  
  <p>More information:</p>
  
  <p>These happens without testing application, that is, <strong>I am not</strong> executing web application to open connections, still just writing code, so there wont be any matter of opening connection and keeping it alive without closing it.</p>
  
  <p><strong>Using Apache Tomcat: Version 8.0. and Eclipse Luna Release.</strong></p>
  
  <p>Please help me on this.</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>Every time context is getting reloaded, I see more 15 opened connections to DB in MySQL Workbench before hitting maximum connection limit of 151 connections to MySQL server.</p>