You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2013/07/24 12:37:10 UTC

svn commit: r1506488 - in /commons/proper/pool/trunk/src: main/java/org/apache/commons/pool2/ main/java/org/apache/commons/pool2/impl/ test/java/org/apache/commons/pool2/impl/

Author: markt
Date: Wed Jul 24 10:37:09 2013
New Revision: 1506488

URL: http://svn.apache.org/r1506488
Log:
Make PooledObject an interface so it can be used in the Factory implementations.

Added:
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java
      - copied, changed from r1506481, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObjectState.java
      - copied, changed from r1506478, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectState.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java
      - copied, changed from r1506478, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/TrackedUse.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectImpl.java
      - copied, changed from r1506481, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java
Removed:
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectState.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/TrackedUse.java
Modified:
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultEvictionPolicy.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/EvictionPolicy.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
    commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestAbandonedObjectPool.java
    commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java

Copied: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java (from r1506481, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java)
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java?p2=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java&p1=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java&r1=1506481&r2=1506488&rev=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java Wed Jul 24 10:37:09 2013
@@ -14,18 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.pool2.impl;
+package org.apache.commons.pool2;
 
-import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.Deque;
 
 /**
- * This wrapper is used to track the additional information, such as state, for
- * the pooled objects.
+ * Defines the wrapper that is used to track the additional information, such as
+ * state, for the pooled objects.
  * <p>
- * This class is intended to be thread-safe.
+ * Implementations of this class are required to be thread-safe.
  *
  * @param <T> the type of object in the pool
  *
@@ -33,77 +30,36 @@ import java.util.Deque;
  *
  * @since 2.0
  */
-public class PooledObject<T> implements Comparable<PooledObject<T>> {
-
-    private final T object;
-    private PooledObjectState state = PooledObjectState.IDLE; // @GuardedBy("this") to ensure transitions are valid
-    private final long createTime = System.currentTimeMillis();
-    private volatile long lastBorrowTime = createTime;
-    private volatile long lastReturnTime = createTime;
-    private final Exception createdBy;
-    private final PrintWriter logWriter;
-
-    public PooledObject(T object) {
-        this.object = object;
-        createdBy = null;
-        logWriter = null;
-    }
-
-    public PooledObject(T object, PrintWriter logWriter) {
-        this.object = object;
-        this.logWriter = logWriter;
-        createdBy = new AbandonedObjectException();
-    }
+public interface PooledObject<T> extends Comparable<PooledObject<T>> {
 
     /**
      * Obtain the underlying object that is wrapped by this instance of
      * {@link PooledObject}.
      */
-    public T getObject() {
-        return object;
-    }
+    public T getObject();
 
     /**
      * Obtain the time (using the same basis as
      * {@link System#currentTimeMillis()}) that this object was created.
      */
-    public long getCreateTime() {
-        return createTime;
-    }
+    public long getCreateTime();
 
     /**
      * Obtain the time in milliseconds that this object last spent in the the
      * active state (it may still be active in which case subsequent calls will
      * return an increased value).
      */
-    public long getActiveTimeMillis() {
-        // Take copies to avoid threading issues
-        long rTime = lastReturnTime;
-        long bTime = lastBorrowTime;
-
-        if (rTime > bTime) {
-            return rTime - bTime;
-        } else {
-            return System.currentTimeMillis() - bTime;
-        }
-    }
-
+    public long getActiveTimeMillis();
     /**
      * Obtain the time in milliseconds that this object last spend in the the
      * idle state (it may still be idle in which case subsequent calls will
      * return an increased value).
      */
-    public long getIdleTimeMillis() {
-        return System.currentTimeMillis() - lastReturnTime;
-    }
-
-    public long getLastBorrowTime() {
-        return lastBorrowTime;
-    }
-
-    public long getLastReturnTime() {
-        return lastReturnTime;
-    }
+    public long getIdleTimeMillis();
+
+    public long getLastBorrowTime();
+
+    public long getLastReturnTime();
 
     /**
      * Return an estimate of the last time this object was used.  If the class
@@ -114,13 +70,7 @@ public class PooledObject<T> implements 
      *
      * @return the last time this object was used
      */
-    public long getLastUsed() {
-        if (object instanceof TrackedUse) {
-            return Math.max(((TrackedUse) object).getLastUsed(), lastBorrowTime);
-        } else {
-            return lastBorrowTime;
-        }
-    }
+    public long getLastUsed();
 
     /**
      * Orders instances based on idle time - i.e. the length of time since the
@@ -130,94 +80,31 @@ public class PooledObject<T> implements 
      *       equals if distinct objects have the same identity hash code.
      */
     @Override
-    public int compareTo(PooledObject<T> other) {
-        final long lastActiveDiff =
-                this.getLastReturnTime() - other.getLastReturnTime();
-        if (lastActiveDiff == 0) {
-            // Make sure the natural ordering is broadly consistent with equals
-            // although this will break down if distinct objects have the same
-            // identity hash code.
-            // see java.lang.Comparable Javadocs
-            return System.identityHashCode(this) - System.identityHashCode(other);
-        }
-        // handle int overflow
-        return (int)Math.min(Math.max(lastActiveDiff, Integer.MIN_VALUE), Integer.MAX_VALUE);
-    }
-
+    public int compareTo(PooledObject<T> other);
 
     @Override
-    public boolean equals(Object obj) {
-        // Overridden purely to stop FindBugs complaining because compareTo()
-        // has been defined.
-        return super.equals(obj);
-    }
+    public boolean equals(Object obj);
 
     @Override
-    public int hashCode() {
-        // Overridden because equals() had to be overridden (see above)
-        return super.hashCode();
-    }
+    public int hashCode();
 
     /**
      * Provides a String form of the wrapper for debug purposes. The format is
      * not fixed and may change at any time.
      */
     @Override
-    public String toString() {
-        StringBuilder result = new StringBuilder();
-        result.append("Object: ");
-        result.append(object.toString());
-        result.append(", State: ");
-        synchronized (this) {
-            result.append(state.toString());
-        }
-        return result.toString();
-        // TODO add other attributes
-    }
-
-    public synchronized boolean startEvictionTest() {
-        if (state == PooledObjectState.IDLE) {
-            state = PooledObjectState.EVICTION;
-            return true;
-        }
-
-        return false;
-    }
-
-    public synchronized boolean endEvictionTest(
-            Deque<PooledObject<T>> idleQueue) {
-        if (state == PooledObjectState.EVICTION) {
-            state = PooledObjectState.IDLE;
-            return true;
-        } else if (state == PooledObjectState.EVICTION_RETURN_TO_HEAD) {
-            state = PooledObjectState.IDLE;
-            if (!idleQueue.offerFirst(this)) {
-                // TODO - Should never happen
-            }
-        }
+    public String toString();
+
+    public boolean startEvictionTest();
 
-        return false;
-    }
+    public boolean endEvictionTest(Deque<PooledObject<T>> idleQueue);
 
     /**
      * Allocates the object.
      *
      * @return {@code true} if the original state was {@link PooledObjectState#IDLE IDLE}
      */
-    public synchronized boolean allocate() {
-        if (state == PooledObjectState.IDLE) {
-            state = PooledObjectState.ALLOCATED;
-            lastBorrowTime = System.currentTimeMillis();
-            return true;
-        } else if (state == PooledObjectState.EVICTION) {
-            // TODO Allocate anyway and ignore eviction test
-            state = PooledObjectState.EVICTION_RETURN_TO_HEAD;
-            return false;
-        }
-        // TODO if validating and testOnBorrow == true then pre-allocate for
-        // performance
-        return false;
-    }
+    public boolean allocate();
 
     /**
      * Deallocates the object and sets it {@link PooledObjectState#IDLE IDLE}
@@ -225,82 +112,33 @@ public class PooledObject<T> implements 
      *
      * @return {@code true} if the state was {@link PooledObjectState#ALLOCATED ALLOCATED}
      */
-    public synchronized boolean deallocate() {
-        if (state == PooledObjectState.ALLOCATED ||
-                state == PooledObjectState.RETURNING) {
-            state = PooledObjectState.IDLE;
-            lastReturnTime = System.currentTimeMillis();
-            return true;
-        }
-
-        return false;
-    }
+    public boolean deallocate();
 
     /**
      * Sets the state to {@link PooledObjectState#INVALID INVALID}
      */
-    public synchronized void invalidate() {
-        state = PooledObjectState.INVALID;
-    }
+    public void invalidate();
 
     /**
      * Prints the stack trace of the code that created this pooled object to
      * the configured log writer.  Does nothing of no PrintWriter was supplied
      * to the constructor.
      */
-    public void printStackTrace() {
-        if (createdBy != null && logWriter != null) {
-            createdBy.printStackTrace(logWriter);
-        }
-    }
+    public void printStackTrace();
 
     /**
      * Returns the state of this object.
      * @return state
      */
-    public synchronized PooledObjectState getState() {
-        return state;
-    }
+    public PooledObjectState getState();
 
     /**
      * Marks the pooled object as abandoned.
      */
-    public synchronized void markAbandoned() {
-        state = PooledObjectState.ABANDONED;
-    }
+    public void markAbandoned();
 
     /**
      * Marks the object as returning to the pool.
      */
-    public synchronized void markReturning() {
-        state = PooledObjectState.RETURNING;
-    }
-
-    static class AbandonedObjectException extends Exception {
-
-        private static final long serialVersionUID = 7398692158058772916L;
-
-        /** Date format */
-        //@GuardedBy("this")
-        private static final SimpleDateFormat format = new SimpleDateFormat
-            ("'Pooled object created' yyyy-MM-dd HH:mm:ss " +
-             "'by the following code was never returned to the pool:'");
-
-        private final long _createdTime;
-
-        public AbandonedObjectException() {
-            _createdTime = System.currentTimeMillis();
-        }
-
-        // Override getMessage to avoid creating objects and formatting
-        // dates unless the log message will actually be used.
-        @Override
-        public String getMessage() {
-            String msg;
-            synchronized(format) {
-                msg = format.format(new Date(_createdTime));
-            }
-            return msg;
-        }
-    }
+    public void markReturning();
 }

Copied: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObjectState.java (from r1506478, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectState.java)
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObjectState.java?p2=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObjectState.java&p1=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectState.java&r1=1506478&r2=1506488&rev=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectState.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObjectState.java Wed Jul 24 10:37:09 2013
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.pool2.impl;
+package org.apache.commons.pool2;
 
 /**
  * Provides the possible states that a {@link PooledObject} may be in.

Copied: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java (from r1506478, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/TrackedUse.java)
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java?p2=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java&p1=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/TrackedUse.java&r1=1506478&r2=1506488&rev=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/TrackedUse.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java Wed Jul 24 10:37:09 2013
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.pool2.impl;
+package org.apache.commons.pool2;
 
 /**
  * Methods to support usage tracking for instances managed by pools configured

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java Wed Jul 24 10:37:09 2013
@@ -19,6 +19,8 @@ package org.apache.commons.pool2.impl;
 
 import java.io.PrintWriter;
 
+import org.apache.commons.pool2.TrackedUse;
+
 /**
  * Configuration settings for abandoned object removal.
  *                                                                     

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java Wed Jul 24 10:37:09 2013
@@ -44,6 +44,8 @@ import javax.management.NotificationFilt
 import javax.management.NotificationListener;
 import javax.management.ObjectName;
 
+import org.apache.commons.pool2.PooledObject;
+
 /**
  * Base class that provides common functionality for {@link GenericObjectPool}
  * and {@link GenericKeyedObjectPool}. The primary reason this class exists is

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultEvictionPolicy.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultEvictionPolicy.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultEvictionPolicy.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultEvictionPolicy.java Wed Jul 24 10:37:09 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.pool2.impl;
 
+import org.apache.commons.pool2.PooledObject;
+
 /**
  * Provides the default implementation of {@link EvictionPolicy} used by the
  * pools. Objects will be evicted if the following conditions are met:

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/EvictionPolicy.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/EvictionPolicy.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/EvictionPolicy.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/EvictionPolicy.java Wed Jul 24 10:37:09 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.pool2.impl;
 
+import org.apache.commons.pool2.PooledObject;
+
 /**
  * To provide a custom eviction policy (i.e. something other than {@link
  * DefaultEvictionPolicy} for a pool, users must provide an implementation of

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java Wed Jul 24 10:37:09 2013
@@ -35,6 +35,8 @@ import java.util.concurrent.locks.Reentr
 import org.apache.commons.pool2.KeyedObjectPool;
 import org.apache.commons.pool2.KeyedPoolableObjectFactory;
 import org.apache.commons.pool2.PoolUtils;
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.PooledObjectState;
 
 /**
  * A configurable <code>KeyedObjectPool</code> implementation.
@@ -990,7 +992,7 @@ public class GenericKeyedObjectPool<K,T>
             throw e;
         }
 
-        PooledObject<T> p = new PooledObject<T>(t);
+        PooledObject<T> p = new PooledObjectImpl<T>(t);
         createdCount.incrementAndGet();
         objectDeque.getAllObjects().put(t, p);
         return p;

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java Wed Jul 24 10:37:09 2013
@@ -27,6 +27,9 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.commons.pool2.ObjectPool;
 import org.apache.commons.pool2.PoolUtils;
 import org.apache.commons.pool2.PoolableObjectFactory;
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.PooledObjectState;
+import org.apache.commons.pool2.TrackedUse;
 
 /**
  * A configurable {@link ObjectPool} implementation.
@@ -789,9 +792,9 @@ public class GenericObjectPool<T> extend
 
         final PooledObject<T> p;
         if (isAbandonedConfig() && abandonedConfig.getLogAbandoned()) {
-            p = new PooledObject<T>(t, abandonedConfig.getLogWriter());
+            p = new PooledObjectImpl<T>(t, abandonedConfig.getLogWriter());
         } else {
-            p = new PooledObject<T>(t);
+            p = new PooledObjectImpl<T>(t);
         }
         createdCount.incrementAndGet();
         allObjects.put(t, p);

Copied: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectImpl.java (from r1506481, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java)
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectImpl.java?p2=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectImpl.java&p1=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java&r1=1506481&r2=1506488&rev=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObject.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/PooledObjectImpl.java Wed Jul 24 10:37:09 2013
@@ -21,6 +21,10 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Deque;
 
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.PooledObjectState;
+import org.apache.commons.pool2.TrackedUse;
+
 /**
  * This wrapper is used to track the additional information, such as state, for
  * the pooled objects.
@@ -33,7 +37,7 @@ import java.util.Deque;
  *
  * @since 2.0
  */
-public class PooledObject<T> implements Comparable<PooledObject<T>> {
+public class PooledObjectImpl<T> implements PooledObject<T> {
 
     private final T object;
     private PooledObjectState state = PooledObjectState.IDLE; // @GuardedBy("this") to ensure transitions are valid
@@ -43,13 +47,13 @@ public class PooledObject<T> implements 
     private final Exception createdBy;
     private final PrintWriter logWriter;
 
-    public PooledObject(T object) {
+    public PooledObjectImpl(T object) {
         this.object = object;
         createdBy = null;
         logWriter = null;
     }
 
-    public PooledObject(T object, PrintWriter logWriter) {
+    public PooledObjectImpl(T object, PrintWriter logWriter) {
         this.object = object;
         this.logWriter = logWriter;
         createdBy = new AbandonedObjectException();
@@ -59,6 +63,7 @@ public class PooledObject<T> implements 
      * Obtain the underlying object that is wrapped by this instance of
      * {@link PooledObject}.
      */
+    @Override
     public T getObject() {
         return object;
     }
@@ -67,6 +72,7 @@ public class PooledObject<T> implements 
      * Obtain the time (using the same basis as
      * {@link System#currentTimeMillis()}) that this object was created.
      */
+    @Override
     public long getCreateTime() {
         return createTime;
     }
@@ -76,6 +82,7 @@ public class PooledObject<T> implements 
      * active state (it may still be active in which case subsequent calls will
      * return an increased value).
      */
+    @Override
     public long getActiveTimeMillis() {
         // Take copies to avoid threading issues
         long rTime = lastReturnTime;
@@ -93,14 +100,17 @@ public class PooledObject<T> implements 
      * idle state (it may still be idle in which case subsequent calls will
      * return an increased value).
      */
+    @Override
     public long getIdleTimeMillis() {
         return System.currentTimeMillis() - lastReturnTime;
     }
 
+    @Override
     public long getLastBorrowTime() {
         return lastBorrowTime;
     }
 
+    @Override
     public long getLastReturnTime() {
         return lastReturnTime;
     }
@@ -114,6 +124,7 @@ public class PooledObject<T> implements 
      *
      * @return the last time this object was used
      */
+    @Override
     public long getLastUsed() {
         if (object instanceof TrackedUse) {
             return Math.max(((TrackedUse) object).getLastUsed(), lastBorrowTime);
@@ -175,6 +186,7 @@ public class PooledObject<T> implements 
         // TODO add other attributes
     }
 
+    @Override
     public synchronized boolean startEvictionTest() {
         if (state == PooledObjectState.IDLE) {
             state = PooledObjectState.EVICTION;
@@ -184,6 +196,7 @@ public class PooledObject<T> implements 
         return false;
     }
 
+    @Override
     public synchronized boolean endEvictionTest(
             Deque<PooledObject<T>> idleQueue) {
         if (state == PooledObjectState.EVICTION) {
@@ -204,6 +217,7 @@ public class PooledObject<T> implements 
      *
      * @return {@code true} if the original state was {@link PooledObjectState#IDLE IDLE}
      */
+    @Override
     public synchronized boolean allocate() {
         if (state == PooledObjectState.IDLE) {
             state = PooledObjectState.ALLOCATED;
@@ -225,6 +239,7 @@ public class PooledObject<T> implements 
      *
      * @return {@code true} if the state was {@link PooledObjectState#ALLOCATED ALLOCATED}
      */
+    @Override
     public synchronized boolean deallocate() {
         if (state == PooledObjectState.ALLOCATED ||
                 state == PooledObjectState.RETURNING) {
@@ -239,6 +254,7 @@ public class PooledObject<T> implements 
     /**
      * Sets the state to {@link PooledObjectState#INVALID INVALID}
      */
+    @Override
     public synchronized void invalidate() {
         state = PooledObjectState.INVALID;
     }
@@ -248,6 +264,7 @@ public class PooledObject<T> implements 
      * the configured log writer.  Does nothing of no PrintWriter was supplied
      * to the constructor.
      */
+    @Override
     public void printStackTrace() {
         if (createdBy != null && logWriter != null) {
             createdBy.printStackTrace(logWriter);
@@ -258,6 +275,7 @@ public class PooledObject<T> implements 
      * Returns the state of this object.
      * @return state
      */
+    @Override
     public synchronized PooledObjectState getState() {
         return state;
     }
@@ -265,6 +283,7 @@ public class PooledObject<T> implements 
     /**
      * Marks the pooled object as abandoned.
      */
+    @Override
     public synchronized void markAbandoned() {
         state = PooledObjectState.ABANDONED;
     }
@@ -272,6 +291,7 @@ public class PooledObject<T> implements 
     /**
      * Marks the object as returning to the pool.
      */
+    @Override
     public synchronized void markReturning() {
         state = PooledObjectState.RETURNING;
     }

Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestAbandonedObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestAbandonedObjectPool.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestAbandonedObjectPool.java (original)
+++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestAbandonedObjectPool.java Wed Jul 24 10:37:09 2013
@@ -28,6 +28,7 @@ import javax.management.ObjectName;
 import junit.framework.TestCase;
 
 import org.apache.commons.pool2.PoolableObjectFactory;
+import org.apache.commons.pool2.TrackedUse;
 import org.junit.Assert;
 
 /**

Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java?rev=1506488&r1=1506487&r2=1506488&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java (original)
+++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java Wed Jul 24 10:37:09 2013
@@ -40,6 +40,7 @@ import org.apache.commons.pool2.BasePool
 import org.apache.commons.pool2.PoolableObjectFactory;
 import org.apache.commons.pool2.ObjectPool;
 import org.apache.commons.pool2.PoolUtils;
+import org.apache.commons.pool2.PooledObject;
 import org.apache.commons.pool2.TestBaseObjectPool;
 import org.apache.commons.pool2.VisitTracker;
 import org.apache.commons.pool2.VisitTrackerFactory;



Re: svn commit: r1506488 - in /commons/proper/pool/trunk/src: main/java/org/apache/commons/pool2/ main/java/org/apache/commons/pool2/impl/ test/java/org/apache/commons/pool2/impl/

Posted by Phil Steitz <ph...@gmail.com>.
On 7/24/13 3:41 AM, Mark Thomas wrote:
> On 24/07/2013 11:37, markt@apache.org wrote:
>> Author: markt
>> Date: Wed Jul 24 10:37:09 2013
>> New Revision: 1506488
>>
>> URL: http://svn.apache.org/r1506488
>> Log:
>> Make PooledObject an interface so it can be used in the Factory implementations.
> In case anyone is wondering where I am heading with this, this is a step
> towards fixing DBCP-156.
>
> By making the pooled object available to the factory, the factory can
> implement a validation rule along the lines of "no object older than x
> hours". That particular rule could be implemented by the factory keeping
> track of every object and its creation time but since the PooledObject
> already has the information I think it makes sense to re-use it and keep
> all the pooled object state information in one place. It also allows for
> more complex state based validation rules.

Big +1 here.   Thanks!

Phil
>
> Mark
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1506488 - in /commons/proper/pool/trunk/src: main/java/org/apache/commons/pool2/ main/java/org/apache/commons/pool2/impl/ test/java/org/apache/commons/pool2/impl/

Posted by Mark Thomas <ma...@apache.org>.
On 24/07/2013 11:37, markt@apache.org wrote:
> Author: markt
> Date: Wed Jul 24 10:37:09 2013
> New Revision: 1506488
> 
> URL: http://svn.apache.org/r1506488
> Log:
> Make PooledObject an interface so it can be used in the Factory implementations.

In case anyone is wondering where I am heading with this, this is a step
towards fixing DBCP-156.

By making the pooled object available to the factory, the factory can
implement a validation rule along the lines of "no object older than x
hours". That particular rule could be implemented by the factory keeping
track of every object and its creation time but since the PooledObject
already has the information I think it makes sense to re-use it and keep
all the pooled object state information in one place. It also allows for
more complex state based validation rules.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org