Author: rdonkin
Date: Thu Nov 10 13:29:25 2005
New Revision: 332379

URL: http://svn.apache.org/viewcvs?rev=332379&view=rev
Log:
Breaks dependency from GenericObjectPool to commons-collections. Submitted by 
Sandy McArthur. Issue #37428.

Modified:
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java?rev=332379&r1=332378&r2=332379&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
 Thu Nov 10 13:29:25 2005
@@ -18,8 +18,9 @@
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
+import java.util.LinkedList;
+import java.util.ListIterator;
 
-import org.apache.commons.collections.CursorableLinkedList;
 import org.apache.commons.pool.BaseObjectPool;
 import org.apache.commons.pool.ObjectPool;
 import org.apache.commons.pool.PoolableObjectFactory;
@@ -417,7 +418,7 @@
         _softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis;
         _testWhileIdle = testWhileIdle;
 
-        _pool = new CursorableLinkedList();
+        _pool = new LinkedList();
         startEvictor(_timeBetweenEvictionRunsMillis);
     }
 
@@ -949,10 +950,6 @@
         clear();
         _pool = null;
         _factory = null;
-        if(null != _evictionCursor) {
-            _evictionCursor.close();
-            _evictionCursor = null;
-        }
         startEvictor(-1L);
         super.close();
     }
@@ -970,19 +967,18 @@
     public synchronized void evict() throws Exception {
         assertOpen();
         if(!_pool.isEmpty()) {
-            if(null == _evictionCursor) {
-                _evictionCursor = (_pool.cursor(_pool.size()));
-            } else if(!_evictionCursor.hasPrevious()) {
-                _evictionCursor.close();
-                _evictionCursor = (_pool.cursor(_pool.size()));
+            ListIterator iter;
+            if (evictLastIndex < 0) {
+                iter = _pool.listIterator(_pool.size());
+            } else {
+                iter = _pool.listIterator(evictLastIndex);
             }
             for(int i=0,m=getNumTests();i<m;i++) {
-                if(!_evictionCursor.hasPrevious()) {
-                    _evictionCursor.close();
-                    _evictionCursor = (_pool.cursor(_pool.size()));
+                if(!iter.hasPrevious()) {
+                    iter = _pool.listIterator(_pool.size());
                 } else {
                     boolean removeObject = false;
-                    ObjectTimestampPair pair = 
(ObjectTimestampPair)(_evictionCursor.previous());
+                    ObjectTimestampPair pair = 
(ObjectTimestampPair)(iter.previous());
                     long idleTimeMilis = System.currentTimeMillis() - 
pair.tstamp;
                     if ((_minEvictableIdleTimeMillis > 0) 
                         && (idleTimeMilis > _minEvictableIdleTimeMillis)) {
@@ -1013,7 +1009,7 @@
                     }
                     if(removeObject) {
                         try {
-                            _evictionCursor.remove();
+                            iter.remove();
                             _factory.destroyObject(pair.value);
                         } catch(Exception e) {
                             ; // ignored
@@ -1021,6 +1017,7 @@
                     }
                 }
             }
+            evictLastIndex = iter.previousIndex(); // resume from here
         } // if !empty
     }
     
@@ -1122,7 +1119,7 @@
 
     /**
      * The idle object evictor thread.
-     * @see #setTimeBetweenEvictionRunsMillis
+     * @see GenericObjectPool#setTimeBetweenEvictionRunsMillis
      */
     class Evictor implements Runnable {
         private boolean _cancelled = false;
@@ -1154,12 +1151,6 @@
                     // ignored
                 }
             }
-            synchronized(GenericObjectPool.this) {
-                if(null != _evictionCursor) {
-                    _evictionCursor.close();
-                    _evictionCursor = null;
-                }
-            }
         }
 
     }
@@ -1331,7 +1322,7 @@
     private long _softMinEvictableIdleTimeMillis = 
DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
 
     /** My pool. */
-    private CursorableLinkedList _pool = null;
+    private LinkedList _pool = null;
 
     /** My [EMAIL PROTECTED] PoolableObjectFactory}. */
     private PoolableObjectFactory _factory = null;
@@ -1347,5 +1338,8 @@
      */
     private Evictor _evictor = null;
 
-    private CursorableLinkedList.Cursor _evictionCursor = null;
+    /**
+     * Position in the _pool where the _evictor last stopped.
+     */
+    private int evictLastIndex = -1;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to