rwaldhoff 2003/03/13 10:47:54 Modified: pool/src/java/org/apache/commons/pool/impl GenericKeyedObjectPool.java Log: apply Quinton McCombs's javadoc and clean patch see <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17962> Revision Changes Path 1.13 +44 -78 jakarta-commons/pool/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java Index: GenericKeyedObjectPool.java =================================================================== RCS file: /home/cvs/jakarta-commons/pool/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- GenericKeyedObjectPool.java 5 Mar 2003 19:22:52 -0000 1.12 +++ GenericKeyedObjectPool.java 13 Mar 2003 18:47:53 -0000 1.13 @@ -121,7 +121,7 @@ * When [EMAIL PROTECTED] #setTestOnBorrow <i>testOnBorrow</i>} is set, the pool will * attempt to validate each object before it is returned from the * [EMAIL PROTECTED] #borrowObject} method. (Using the provided factory's - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject} method.) Objects that fail + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject} method.) Objects that fail * to validate will be dropped from the pool, and a different object will * be borrowed. * </li> @@ -129,7 +129,7 @@ * When [EMAIL PROTECTED] #setTestOnReturn <i>testOnReturn</i>} is set, the pool will * attempt to validate each object before it is returned to the pool in the * [EMAIL PROTECTED] #returnObject} method. (Using the provided factory's - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject} * method.) Objects that fail to validate will be dropped from the pool. * </li> * </ul> @@ -153,12 +153,12 @@ * <li> * [EMAIL PROTECTED] #setTestWhileIdle <i>testWhileIdle</i>} indicates whether or not idle * objects should be validated using the factory's - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject} method. Objects + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject} method. Objects * that fail to validate will be dropped from the pool. * </li> * </ul> * <p> - * GenericKeyedObjectPool is not usable without a [EMAIL PROTECTED] KeyedPoolableObjectFactory}. A + * GenericKeyedObjectPool is not usable without a [EMAIL PROTECTED] KeyedPoolableObjectFactory}. A * non-<code>null</code> factory must be provided either as a constructor argument * or via a call to [EMAIL PROTECTED] #setFactory} before the pool is used. * </p> @@ -544,7 +544,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * before being returned by the [EMAIL PROTECTED] #borrowObject} * method. If the object fails to validate, * it will be dropped from the pool, and we will attempt @@ -558,7 +558,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * before being returned by the [EMAIL PROTECTED] #borrowObject} * method. If the object fails to validate, * it will be dropped from the pool, and we will attempt @@ -572,7 +572,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * before being returned to the pool within the * [EMAIL PROTECTED] #returnObject}. * @@ -584,7 +584,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * before being returned to the pool within the * [EMAIL PROTECTED] #returnObject}. * @@ -645,7 +645,7 @@ * Sets the number of objects to examine during each run of the * idle object evictor thread (if any). * <p> - * When a negative value is supplied, <tt>ceil([EMAIL PROTECTED] #numIdle})/abs([EMAIL PROTECTED] #getNumTestsPerEvictionRun})</tt> + * When a negative value is supplied, <tt>ceil([EMAIL PROTECTED] #getNumIdle})/abs([EMAIL PROTECTED] #getNumTestsPerEvictionRun})</tt> * tests will be run. I.e., when the value is <i>-n</i>, roughly one <i>n</i>th of the * idle objects will be tested per run. * @@ -684,7 +684,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * by the idle object evictor (if any). If an object * fails to validate, it will be dropped from the pool. * @@ -697,7 +697,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * by the idle object evictor (if any). If an object * fails to validate, it will be dropped from the pool. * @@ -788,11 +788,6 @@ } _factory.activateObject(key,pair.value); if(_testOnBorrow && !_factory.validateObject(key,pair.value)) { - try { - _factory.passivateObject(key,pair.value); - } catch(Exception e) { - ; // ignored, we're throwing it out anyway - } _factory.destroyObject(key,pair.value); } else { Integer active = (Integer)(_activeMap.get(key)); @@ -808,12 +803,10 @@ } public synchronized void clear() { - Iterator keyiter = _poolList.iterator(); - while(keyiter.hasNext()) { + for(Iterator keyiter = _poolList.iterator(); keyiter.hasNext(); ) { Object key = keyiter.next(); CursorableLinkedList list = (CursorableLinkedList)(_poolMap.get(key)); - Iterator it = list.iterator(); - while(it.hasNext()) { + for(Iterator it = list.iterator(); it.hasNext(); ) { try { _factory.destroyObject(key,((ObjectTimestampPair)(it.next())).value); } catch(Exception e) { @@ -834,8 +827,7 @@ return; } else { _poolList.remove(key); - Iterator it = pool.iterator(); - while(it.hasNext()) { + for(Iterator it = pool.iterator(); it.hasNext(); ) { try { _factory.destroyObject(key,((ObjectTimestampPair)(it.next())).value); } catch(Exception e) { @@ -1014,71 +1006,45 @@ // if the _evictionCursor has a previous object, then test it if(_evictionCursor.hasPrevious()) { ObjectTimestampPair pair = (ObjectTimestampPair)(_evictionCursor.previous()); + boolean removeObject=false; if(_minEvictableIdleTimeMillis > 0 && System.currentTimeMillis() - pair.tstamp > _minEvictableIdleTimeMillis) { - try { - _evictionCursor.remove(); - _totalIdle--; - _factory.destroyObject(key,pair.value); - - // if that was the last object for that key, drop that pool - if( ((CursorableLinkedList)(_poolMap.get(key))).isEmpty() ) { - _poolMap.remove(key); - _poolList.remove(key); - } - - - } catch(Exception e) { - ; // ignored - } + removeObject=true; } else if(_testWhileIdle) { boolean active = false; try { _factory.activateObject(key,pair.value); active = true; } catch(Exception e) { - _evictionCursor.remove(); - try { - _factory.passivateObject(key,pair.value); - } catch(Exception ex) { - ; // ignored - } - _factory.destroyObject(key,pair.value); + removeObject=true; } if(active) { if(!_factory.validateObject(key,pair.value)) { - try { - _evictionCursor.remove(); - _totalIdle--; - try { - _factory.passivateObject(key,pair.value); - } catch(Exception e) { - ; // ignored - } - _factory.destroyObject(key,pair.value); - if( ((CursorableLinkedList)(_poolMap.get(key))).isEmpty() ) { - _poolMap.remove(key); - _poolList.remove(key); - } - - } catch(Exception e) { - ; // ignored - } + removeObject=true; } else { try { _factory.passivateObject(key,pair.value); } catch(Exception e) { - _evictionCursor.remove(); - _totalIdle--; - _factory.destroyObject(key,pair.value); - if( ((CursorableLinkedList)(_poolMap.get(key))).isEmpty() ) { - _poolMap.remove(key); - _poolList.remove(key); - } + removeObject=true; } } } } + if(removeObject) { + try { + _evictionCursor.remove(); + _totalIdle--; + _factory.destroyObject(key,pair.value); + + // if that was the last object for that key, drop that pool + if( ((CursorableLinkedList)(_poolMap.get(key))).isEmpty() ) { + _poolMap.remove(key); + _poolList.remove(key); + } + } catch(Exception e) { + ; // ignored + } + } } else { // else the _evictionCursor is done, so close it and loop around if(_evictionCursor != null) { @@ -1089,7 +1055,7 @@ } } } - + //--- package methods -------------------------------------------- synchronized String debugInfo() { @@ -1245,7 +1211,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * before being returned by the [EMAIL PROTECTED] #borrowObject} * method. If the object fails to validate, * it will be dropped from the pool, and we will attempt @@ -1258,7 +1224,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * before being returned to the pool within the * [EMAIL PROTECTED] #returnObject}. * @@ -1269,7 +1235,7 @@ /** * When <tt>true</tt>, objects will be - * [EMAIL PROTECTED] PoolableObjectFactory#validateObject validated} + * [EMAIL PROTECTED] org.apache.commons.pool.PoolableObjectFactory#validateObject validated} * by the idle object evictor (if any). If an object * fails to validate, it will be dropped from the pool. * @@ -1295,7 +1261,7 @@ * The number of objects to examine during each run of the * idle object evictor thread (if any). * <p> - * When a negative value is supplied, <tt>ceil([EMAIL PROTECTED] #numIdle})/abs([EMAIL PROTECTED] #getNumTestsPerEvictionRun})</tt> + * When a negative value is supplied, <tt>ceil([EMAIL PROTECTED] #getNumIdle})/abs([EMAIL PROTECTED] #getNumTestsPerEvictionRun})</tt> * tests will be run. I.e., when the value is <i>-n</i>, roughly one <i>n</i>th of the * idle objects will be tested per run. * @@ -1345,7 +1311,7 @@ * My idle object eviction thread, if any. */ private Evictor _evictor = null; - + private CursorableLinkedList.Cursor _evictionCursor = null; private CursorableLinkedList.Cursor _evictionKeyCursor = null;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]