title: Tomcat Connection Pool Exhausted
body: <p>I'm using Apache Tomcat JDBC connection pooling in my project. I'm confused because under heavy load I keep seeing the following error:</p>
  
  <pre><code>12:26:36,410 ERROR [] (http-/XX.XXX.XXX.X:XXXXX-X) org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-/XX.XXX.XXX.X:XXXXX-X] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:4; busy:4; idle:0; lastwait:10000].
  12:26:36,411 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/APP].[AppConf]] (http-/XX.XXX.XXX.X:XXXXX-X) JBWEB000236: Servlet.service() for servlet AppConf threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
  </code></pre>
  
  <p>My expectation was that with pooling, requests for new connections would be held in a queue until a connection became available. Instead it seems that requests are rejected when the pool has reached capacity. Can this behaviour be changed?</p>
  
  <p>Thanks,</p>
  
  <p>Dal</p>
  
  <p>This is my pool configuration:</p>
  
  <pre><code>PoolProperties p = new PoolProperties();
  p.setUrl("jdbc:oracle:thin:@" + server + ":" + port + ":" + SID_SVC);
  p.setDriverClassName("oracle.jdbc.driver.OracleDriver");
  p.setUsername(username);
  p.setPassword(password);
  p.setMaxActive(4);
  p.setInitialSize(1);
  p.setMaxWait(10000);
  p.setRemoveAbandonedTimeout(300);
  p.setMinEvictableIdleTimeMillis(150000);
  p.setTestOnBorrow(true);
  p.setValidationQuery("SELECT 1 from dual");
  p.setMinIdle(1);
  p.setMaxIdle(2);
  p.setRemoveAbandoned(true);
  p.setJdbcInterceptors(
      "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
      + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;" 
      + "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer");
  </code></pre>