[ http://issues.apache.org/jira/browse/POOL-87?page=all ]
Bernie McGourty updated POOL-87: -------------------------------- Attachment: TestGenericObjectPool.java I've added a new method: testMinIdlePoolSequence() to the TestGenericObjectPool.java. Here's the result ofr the test: test: [echo] Because we need to sleep to test the eviction threads, this takes a little while (a round 35 seconds)... [java] ......................................... [java] ......................................... [java] ......F................................... [java] ........... [java] Time: 47.186 [java] There was 1 failure: [java] 1) testMinIdlePoolSequence(org.apache.commons.pool.impl.TestGenericObjectPool)junit .framework.AssertionFailedError: Validate only called on activated Objects, Activated: false V alidated: true [java] at org.apache.commons.pool.impl.TestGenericObjectPool.testMinIdlePoolSequence(T estGenericObjectPool.java:749) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) [java] FAILURES!!! [java] Tests run: 134, Failures: 1, Errors: 0 > Commons-Pool does not always calling activateObject on newly created Objects > ---------------------------------------------------------------------------- > > Key: POOL-87 > URL: http://issues.apache.org/jira/browse/POOL-87 > Project: Commons Pool > Issue Type: Bug > Environment: Windows 2003 Java HotSpot(TM) Client VM (build > 1.5.0_08-b03, mixed mode, sharing) > Reporter: Bernie McGourty > Attachments: TestGenericObjectPool.java > > > I'm using the GenericObjectPool and a PoolableObjectFactory. > The GenericObjectPool works as expected and documented in that my > implementation of the PoolableObjectFactory is called according to the > life-cycle: > 1. makeObject is called whenever a new instance is needed. > 2. activateObject is invoked on every instance before it is returned from the > pool. > 3. passivateObject is invoked on every instance when it is returned to the > pool. > 4. destroyObject is invoked on every instance when it is being "dropped" from > the pool (whether due to the response from validateObject, or for reasons > specific to the pool implementation.) 5. validateObject is invoked in an > implementation-specific fashion to determine if an instance is still valid to > be returned by the pool. It will only be invoked on an "activated" instance. > I've set the minimum idle instances to 5 and when the pool goes below 5 > instances, new objects are created to reach the minimum. > The problem is that the life-cycle is not followed in that makeObject is > called on the PoolFactory and then validateObject - activateObject is never > called. > The interface doc for validateObject stipulates that it will only be invoked > on "activated" objects. > I looked at the GenericObjectPool class and it appears that ensureMinIdle() > creates the new objects required by calling addObject() but when it calls > addObjectToPool() the newly created object is never activated before it is > validated. > I'm using the following pool config: > poolConfig.maxWait = 5000; > poolConfig.maxActive = 100; > poolConfig.minIdle = 5; > poolConfig.maxIdle = 50; > poolConfig.testOnBorrow = true; > poolConfig.testOnReturn = true; > poolConfig.testWhileIdle = true; > poolConfig.timeBetweenEvictionRunsMillis = 15000; > poolConfig.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_GROW; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]