BasicDataSource does not consider the method 
"setSoftMinEvictableIdleTimeMillis" of CommonsPool.GenericObjectPool
-----------------------------------------------------------------------------------------------------------------

                 Key: DBCP-334
                 URL: https://issues.apache.org/jira/browse/DBCP-334
             Project: Commons Dbcp
          Issue Type: Bug
    Affects Versions: 1.3
            Reporter: Alberto Mozzone
            Priority: Critical


The BasicDataSource should have the "softMinEvictableIdleTimeMillis" (get and 
set) as the GenericObjectPool, to avoid destroying idle connections below the 
"minIdle" value. In this case, connections are dropped and immediately 
recreated with no reason. The "minEvictableIdleTimeMillis" should not be 
considered because there are ways to validate idle connections before they are 
used.

The class should have these lines of code, besides those existing:
// property
        private long softMinEvictableIdleTimeMillis = 
GenericObjectPool.DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
// getter
        /**
         * Returns the {...@link #softMinEvictableIdleTimeMillis} property.
         * @return the value of the {...@link #softMinEvictableIdleTimeMillis} 
property
         * @see #softMinEvictableIdleTimeMillis
         */
        public synchronized long getSoftMinEvictableIdleTimeMillis() {
                return softMinEvictableIdleTimeMillis;
        }

// setter
        /**
         * Sets the {...@link #softMinEvictableIdleTimeMillis} property.
         * @param softMinEvictableIdleTimeMillis the minimum amount of time an 
object
         * may sit idle in the pool 
         * @see #softMinEvictableIdleTimeMillis
         */
        public synchronized void setSoftMinEvictableIdleTimeMillis(final long 
softMinEvictableIdleTimeMillis) {
                this.softMinEvictableIdleTimeMillis = 
softMinEvictableIdleTimeMillis;
                if (connectionPool != null) {
                        
connectionPool.setSoftMinEvictableIdleTimeMillis(softMinEvictableIdleTimeMillis);
                }
        }

// creator of the pool
        @Override protected void createConnectionPool() {
                super.createConnectionPool();
                
connectionPool.setSoftMinEvictableIdleTimeMillis(softMinEvictableIdleTimeMillis);
        }

I implemented myself a "NotSoBasicDataSource" class, inheriting from 
"BasicDataSource" and used it in a single test. It worked: idle connections do 
not decrease under (and re-grow to) "minIdle".
Please, consider this feature, because it can save resources.
I don't know what is the behavior of the Tomcat DBCP, but it seems to me it has 
the same problem.

I'm waiting your opinions.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to