rwaldhoff    2002/10/31 10:56:11

  Modified:    pool/src/java/org/apache/commons/pool/impl
                        GenericObjectPool.java
  Log:
  extract evict() from inner class
  make some protected stuff private
  
  Revision  Changes    Path
  1.10      +105 -95   
jakarta-commons/pool/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
  
  Index: GenericObjectPool.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/pool/src/java/org/apache/commons/pool/impl/GenericObjectPool.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- GenericObjectPool.java    30 Oct 2002 22:54:41 -0000      1.9
  +++ GenericObjectPool.java    31 Oct 2002 18:56:11 -0000      1.10
  @@ -1,5 +1,5 @@
   /*
  - * $Header$
  + * $Id$
    * $Revision$
    * $Date$
    *
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -61,14 +61,13 @@
   
   package org.apache.commons.pool.impl;
   
  -import org.apache.commons.pool.*;
  -import org.apache.commons.collections.CursorableLinkedList;
  -import org.apache.commons.collections.CursorableLinkedList.Cursor;
   import java.util.Iterator;
   import java.util.NoSuchElementException;
  -import java.util.Enumeration;
  -import java.util.EmptyStackException;
  -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;
   
   /**
    * A configurable {@link ObjectPool} implementation.
  @@ -835,6 +834,10 @@
           clear();
           _pool = null;
           _factory = null;
  +        if(null != _evictionCursor) {
  +            _evictionCursor.close();
  +            _evictionCursor = null;
  +        }
           if(null != _evictor) {
               _evictor.cancel();
               _evictor = null;
  @@ -850,6 +853,66 @@
           }
       }
   
  +    public synchronized void evict() throws Exception {
  +        if(!_pool.isEmpty()) {
  +            if(null == _evictionCursor) {
  +                _evictionCursor = 
(CursorableLinkedList.Cursor)(_pool.cursor(_pool.size()));
  +            } else if(!_evictionCursor.hasPrevious()) {
  +                _evictionCursor.close();
  +                _evictionCursor = 
(CursorableLinkedList.Cursor)(_pool.cursor(_pool.size()));
  +            }
  +            for(int i=0,m=getNumTests();i<m;i++) {
  +                if(!_evictionCursor.hasPrevious()) {
  +                    _evictionCursor.close();
  +                    _evictionCursor = 
(CursorableLinkedList.Cursor)(_pool.cursor(_pool.size()));
  +                } else {
  +                    ObjectTimestampPair pair = 
(ObjectTimestampPair)(_evictionCursor.previous());
  +                    if(_minEvictableIdleTimeMillis > 0 &&
  +                       System.currentTimeMillis() - pair.tstamp > 
_minEvictableIdleTimeMillis) {
  +                       try {
  +                           _evictionCursor.remove();
  +                           _factory.destroyObject(pair.value);
  +                       } catch(Exception e) {
  +                           ; // ignored
  +                       }
  +                    } else if(_testWhileIdle) {
  +                        boolean active = false;
  +                        try {
  +                            _factory.activateObject(pair.value);
  +                            active = true;
  +                        } catch(Exception e) {
  +                            _evictionCursor.remove();
  +                            try {
  +                                _factory.passivateObject(pair.value);
  +                            } catch(Exception ex) {
  +                                ; // ignored
  +                            }
  +                            _factory.destroyObject(pair.value);
  +                        }
  +                        if(active) {
  +                            if(!_factory.validateObject(pair.value)) {
  +                                _evictionCursor.remove();
  +                                try {
  +                                    _factory.passivateObject(pair.value);
  +                                } catch(Exception ex) {
  +                                    ; // ignored
  +                                }
  +                                _factory.destroyObject(pair.value);
  +                            } else {
  +                                try {
  +                                    _factory.passivateObject(pair.value);
  +                                } catch(Exception e) {
  +                                    _evictionCursor.remove();
  +                                    _factory.destroyObject(pair.value);
  +                                }
  +                            }
  +                        }
  +                    }
  +                }
  +            }
  +        }
  +    }
  +    
       //--- package methods --------------------------------------------
   
       synchronized String debugInfo() {
  @@ -866,6 +929,14 @@
           return buf.toString();
       }
   
  +    private int getNumTests() {
  +        if(_numTestsPerEvictionRun >= 0) {
  +            return _numTestsPerEvictionRun;
  +        } else {
  +            
return(int)(Math.ceil((double)_pool.size()/Math.abs((double)_numTestsPerEvictionRun)));
  +        }
  +    }
  +
       //--- inner classes ----------------------------------------------
   
       /**
  @@ -898,7 +969,6 @@
           }
   
           public void run() {
  -            CursorableLinkedList.Cursor cursor = null;
               while(!_cancelled) {
                   long sleeptime = 0L;
                   synchronized(GenericObjectPool.this) {
  @@ -910,81 +980,19 @@
                       ; // ignored
                   }
                   try {
  -                    synchronized(GenericObjectPool.this) {
  -                        if(!_pool.isEmpty()) {
  -                            if(null == cursor) {
  -                                cursor = 
(CursorableLinkedList.Cursor)(_pool.cursor(_pool.size()));
  -                            } else if(!cursor.hasPrevious()) {
  -                                cursor.close();
  -                                cursor = 
(CursorableLinkedList.Cursor)(_pool.cursor(_pool.size()));
  -                            }
  -                            for(int i=0,m=getNumTests();i<m;i++) {
  -                                if(!cursor.hasPrevious()) {
  -                                    cursor.close();
  -                                    cursor = 
(CursorableLinkedList.Cursor)(_pool.cursor(_pool.size()));
  -                                } else {
  -                                    ObjectTimestampPair pair = 
(ObjectTimestampPair)(cursor.previous());
  -                                    if(_minEvictableIdleTimeMillis > 0 &&
  -                                       System.currentTimeMillis() - pair.tstamp > 
_minEvictableIdleTimeMillis) {
  -                                       try {
  -                                           cursor.remove();
  -                                           _factory.destroyObject(pair.value);
  -                                       } catch(Exception e) {
  -                                           ; // ignored
  -                                       }
  -                                    } else if(_testWhileIdle) {
  -                                        boolean active = false;
  -                                        try {
  -                                            _factory.activateObject(pair.value);
  -                                            active = true;
  -                                        } catch(Exception e) {
  -                                            cursor.remove();
  -                                            try {
  -                                                
_factory.passivateObject(pair.value);
  -                                            } catch(Exception ex) {
  -                                                ; // ignored
  -                                            }
  -                                            _factory.destroyObject(pair.value);
  -                                        }
  -                                        if(active) {
  -                                            
if(!_factory.validateObject(pair.value)) {
  -                                                cursor.remove();
  -                                                try {
  -                                                    
_factory.passivateObject(pair.value);
  -                                                } catch(Exception ex) {
  -                                                    ; // ignored
  -                                                }
  -                                                _factory.destroyObject(pair.value);
  -                                            } else {
  -                                                try {
  -                                                    
_factory.passivateObject(pair.value);
  -                                                } catch(Exception e) {
  -                                                    cursor.remove();
  -                                                    
_factory.destroyObject(pair.value);
  -                                                }
  -                                            }
  -                                        }
  -                                    }
  -                                }
  -                            }
  -                        }
  -                    }
  +                    evict();
                   } catch(Exception e) {
                       // ignored
                   }
               }
  -            if(null != cursor) {
  -                cursor.close();
  +            synchronized(GenericObjectPool.this) {
  +                if(null != _evictionCursor) {
  +                    _evictionCursor.close();
  +                    _evictionCursor = null;
  +                }
               }
           }
   
  -        private int getNumTests() {
  -            if(_numTestsPerEvictionRun >= 0) {
  -                return _numTestsPerEvictionRun;
  -            } else {
  -                
return(int)(Math.ceil((double)_pool.size()/Math.abs((double)_numTestsPerEvictionRun)));
  -            }
  -        }
       }
   
       /**
  @@ -1006,21 +1014,21 @@
           public long minEvictableIdleTimeMillis = 
GenericObjectPool.DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
       }
   
  -    //--- protected attributes ---------------------------------------
  +    //--- private attributes ---------------------------------------
   
       /**
        * The cap on the number of idle instances in the pool.
        * @see #setMaxIdle
        * @see #getMaxIdle
        */
  -    protected int _maxIdle = DEFAULT_MAX_IDLE;
  +    private int _maxIdle = DEFAULT_MAX_IDLE;
   
       /**
        * The cap on the total number of active instances from the pool.
        * @see #setMaxActive
        * @see #getMaxActive
        */
  -    protected int _maxActive = DEFAULT_MAX_ACTIVE;
  +    private int _maxActive = DEFAULT_MAX_ACTIVE;
   
       /**
        * The maximum amount of time (in millis) the
  @@ -1038,7 +1046,7 @@
        * @see #setWhenExhaustedAction
        * @see #getWhenExhaustedAction
        */
  -    protected long _maxWait = DEFAULT_MAX_WAIT;
  +    private long _maxWait = DEFAULT_MAX_WAIT;
   
       /**
        * The action to take when the {@link #borrowObject} method
  @@ -1052,7 +1060,7 @@
        * @see #setWhenExhaustedAction
        * @see #getWhenExhaustedAction
        */
  -    protected byte _whenExhaustedAction = DEFAULT_WHEN_EXHAUSTED_ACTION;
  +    private byte _whenExhaustedAction = DEFAULT_WHEN_EXHAUSTED_ACTION;
   
       /**
        * When <tt>true</tt>, objects will be
  @@ -1065,7 +1073,7 @@
        * @see #setTestOnBorrow
        * @see #getTestOnBorrow
        */
  -    protected boolean _testOnBorrow = DEFAULT_TEST_ON_BORROW;
  +    private boolean _testOnBorrow = DEFAULT_TEST_ON_BORROW;
   
       /**
        * When <tt>true</tt>, objects will be
  @@ -1076,7 +1084,7 @@
        * @see #getTestOnReturn
        * @see #setTestOnReturn
        */
  -    protected boolean _testOnReturn = DEFAULT_TEST_ON_RETURN;
  +    private boolean _testOnReturn = DEFAULT_TEST_ON_RETURN;
   
       /**
        * When <tt>true</tt>, objects will be
  @@ -1089,7 +1097,7 @@
        * @see #getTimeBetweenEvictionRunsMillis
        * @see #setTimeBetweenEvictionRunsMillis
        */
  -    protected boolean _testWhileIdle = DEFAULT_TEST_WHILE_IDLE;
  +    private boolean _testWhileIdle = DEFAULT_TEST_WHILE_IDLE;
   
       /**
        * The number of milliseconds to sleep between runs of the
  @@ -1100,7 +1108,7 @@
        * @see #setTimeBetweenEvictionRunsMillis
        * @see #getTimeBetweenEvictionRunsMillis
        */
  -    protected long _timeBetweenEvictionRunsMillis = 
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
  +    private long _timeBetweenEvictionRunsMillis = 
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
   
       /**
        * The number of objects to examine during each run of the
  @@ -1115,7 +1123,7 @@
        * @see #getTimeBetweenEvictionRunsMillis
        * @see #setTimeBetweenEvictionRunsMillis
        */
  -    protected int _numTestsPerEvictionRun =  DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
  +    private int _numTestsPerEvictionRun =  DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
   
       /**
        * The minimum amount of time an object may sit idle in the pool
  @@ -1129,22 +1137,24 @@
        * @see #getTimeBetweenEvictionRunsMillis
        * @see #setTimeBetweenEvictionRunsMillis
        */
  -    protected long _minEvictableIdleTimeMillis = 
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
  +    private long _minEvictableIdleTimeMillis = 
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
   
       /** My pool. */
  -    protected CursorableLinkedList _pool = null;
  +    private CursorableLinkedList _pool = null;
   
       /** My {@link PoolableObjectFactory}. */
  -    protected PoolableObjectFactory _factory = null;
  +    private PoolableObjectFactory _factory = null;
   
       /**
        * The number of objects {@link #borrowObject} borrowed
        * from the pool, but not yet returned.
        */
  -    protected int _numActive = 0;
  +    private int _numActive = 0;
   
       /**
        * My idle object eviction thread, if any.
        */
  -    protected Evictor _evictor = null;
  +    private Evictor _evictor = null;
  +    
  +    private CursorableLinkedList.Cursor _evictionCursor = null;
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@;jakarta.apache.org>

Reply via email to