commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Phil Steitz <>
Subject Re: DBCP problem with idle object
Date Tue, 02 Dec 2008 01:57:35 GMT
Martin Dyulgerov wrote:
> Hello group!
> This is the first time i actuali write something in here. First of all 
> - please excuse my bad english, it is not my native language. Now to 
> get to the point... I have problems implementing DBCP on my Tomcat 
> 6.0.18 in my web applications. I don't want to use JNDI, that is why i 
> have ServletContextListener, in witch i do as follows in order:
> 1.Define GenericObject Pool
> 2. Define ConnectionFactory as implementation of 
> DriverManagerConnectionFactory
> 3.Define PoolableConnectionFactory with the previously created 
> GenericObjectPool and ConnectionFactory
> 4.Define PoolingDataSource with the GenericObjectPool object from step 1
> Then i "stick" my PoolingDataSource to the servlet context, retreive 
> it in my JSPs and servlets and aquire a connection via 
> "getConnection()" (which returns Connection object). I make sure to 
> close() all my connections at the edn of the pages...I am sure that 
> the connections that are opened dont exceed the number 100 (which is 
> the maximum number of connections on my database - a MySQL database 
> system), so i think there must be something wrong with my pooling 
> code. The exact error i get is:
> "Exception: Cannot get a connection, pool error Timeout waiting for 
> idle object SQL Exception Connection is closed. SQLException 
> Connection is closed." At some point i began to ask myself if it the 
> problem is caused by the restarts(reloads) i do for that exact 
> application, because the other work fine (byt i dont play with them 
> that much)... My configurations for the GenericObjectPool and 
> DriverManagerConnectionFactory are as follows:
> GenericObjectPool.Config config=new GenericObjectPool.Config();
>            config.maxActive=15;
>            config.maxIdle=10;
>            config.minIdle=5;
>            config.maxWait=3000;
>            config.testOnBorrow=true;
>            config.testOnReturn=true;
>            config.testWhileIdle=true;
>            config.timeBetweenEvictionRunsMillis=1000;
>            config.minEvictableIdleTimeMillis=1000;
> Properties p=new Properties();
>            p.setProperty("user", user);
>            p.setProperty("password", password);
>            p.setProperty("useUnicode", "true");
>            p.setProperty("characterEncoding", "CP1251");
>            p.setProperty("autoReconnect", "true");
> Can You help me please? Any help will be appriciated. Thanks in 
> advance, and accept my apologies if i have breaked some rules of the 
> group or something like that.
These settings make it hard for the pool to manage connections:

The first two force the pool to try to keep the number of idle 
connections between 5 and 10, which is going to force it to close / open 
frequently to stay within that relatively narrow range.   Unless you 
really need both of these, I would recommend eliminating one or both of 

The second two are probably the source of your problem.  These 
parameters are specified in milliseconds (thousandths of a second).  The 
first one tells the pool to kick off an evictor run every second and the 
second tells it to destroy any connections that sit idle for more than a 
second.  This will create lots of connection churn and also pool access 
contention as the idle object evictor runs every second and closes 
connections that have been idle and then tries to create new ones to 
reach minIdle.  You should either increase both of these by at least an 
order of magnitude or drop  them.   Unless you really want to close 
connections that have been idle in the pool for longer than a specified 
idle timeout, I would drop these.


> All best,
> Martin
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message