You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "daad@libero.it" <da...@libero.it> on 2007/04/21 10:08:21 UTC

Cannot get a connection, pool exhausted

Hello,
i'm trying to achieve DBCP with tomcat 5.5.9. I thought to have done things right since the application could connect to db, but after a night that the application was running, in the morning, in logs, i saw a lot of "Cannot get a connection, pool exhausted" errors.
This is my configuration:

SERVER.XML:

 <Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> 
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener" /> 

 <GlobalNamingResources>

  <Environment name="simpleValue" type="java.lang.Integer" value="30" /> 

  <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> 
  </GlobalNamingResources>
 <Service name="Catalina">
  <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> 
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" liveDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
  </Host>
  </Engine>
  </Service>
  </Server>

CONTEXT.XML:

<Context path="/xx" docBase="xx" debug="5" reloadable="true" crossContext="true">
  <Resource
    name="jdbc/xxDB"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30"
    maxWait="10000"
    username="user"
    password="pass"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/xx_xx?autoReconnect=true"/>
</Context>

WEB.XML:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  <display-name>xx</display-name>
  <listener>
    <listener-class>xxx.ApplicationWatch</listener-class>
  </listener>
  <servlet>
    <servlet-name>htmlcontent</servlet-name>
    <servlet-class>xxx.HtmlContentServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>htmlcontent</servlet-name>
    <url-pattern>/htmlcontent.view</url-pattern>
  </servlet-mapping>
  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/xxDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  <security-constraint>
    <display-name>Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>xx</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Protected Area</realm-name>
  </login-config>
  <security-role>
    <role-name>xx</role-name>
  </security-role>
</web-app>

THE WAY I CONNECT TO DB (this is one of the 6-7 methods i have to do stuff on db):

  private static Connection con = null;

  private static Connection getConnection() throws Exception {
    // get context: provides the starting point for resolution of names
    Context ctx = new InitialContext();
    if (ctx == null) {
      throw new Exception("No Context");
    }
    // retrieve datasource
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/xxDB");
    if (ds == null) {
      throw new Exception("No Datasource");
    }
    // return db connection
    return ds.getConnection();
  }

  public static void doSomething() {
    Statement stmt = null;
    try {
      // get connection
      con = getConnection();
      if (con == null) {
        throw new Exception("No Connection");
      }
      stmt = con.createStatement();
      stmt.executeUpdate("UPDATE yy SET `zz`=0 WHERE `ww`='oo'");
    }
    catch (Exception e1) {
      //
    }
    // close resources
    finally {
      try {
        stmt.close();
        stmt = null;
      }
      catch (SQLException e2) {
        //
      }
      try {
        con.close();
        con = null;
      }
      catch (SQLException e3) {
        //
      }
    }
  }

Anybody have a clue of what can be? any help appreciated.



------------------------------------------------------
Passa a Infostrada. ADSL e Telefono senza limiti e senza canone Telecom
http://click.libero.it/infostrada



---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org