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 2011/05/13 00:48:23 UTC

svn commit: r1102498 - /commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/PooledObject.java

Author: markt
Date: Thu May 12 22:48:22 2011
New Revision: 1102498

URL: http://svn.apache.org/viewvc?rev=1102498&view=rev
Log:
Remove '_'
Implement Comparable (GKOP needs it)
Reset last active time on deallocate
Expose last active time (for GKOP)

Modified:
    commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/PooledObject.java

Modified: commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/PooledObject.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/PooledObject.java?rev=1102498&r1=1102497&r2=1102498&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/PooledObject.java (original)
+++ commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/PooledObject.java Thu May 12 22:48:22 2011
@@ -16,18 +16,19 @@
  */
 package org.apache.commons.pool2.impl;
 
+
 /**
  * This wrapper is used to track the additional information, such as state, for
  * the pooled objects.
  */
-public class PooledObject<T> {
+public class PooledObject<T> implements Comparable<PooledObject<T>> {
 
-    private T _object = null;
-    private volatile PooledObjectState _state = PooledObjectState.IDLE;
-    private long _lastActiveTime = System.currentTimeMillis();
+    private T object = null;
+    private volatile PooledObjectState state = PooledObjectState.IDLE;
+    private long lastActiveTime = System.currentTimeMillis();
 
     public PooledObject(T object) {
-        _object = object;
+        this.object = object;
     }
     
     /**
@@ -35,14 +36,30 @@ public class PooledObject<T> {
      * {@link PooledObject}.
      */
     public T getObject() {
-        return _object;
+        return object;
     }
 
     /**
      * Obtain the time in milliseconds since this object was last active.
      */
     public long getIdleTimeMillis() {
-        return System.currentTimeMillis() - _lastActiveTime;
+        return System.currentTimeMillis() - lastActiveTime;
+    }
+    
+    public long getLastActiveTime() {
+        return lastActiveTime;
+    }
+
+    public int compareTo(PooledObject<T> other) {
+        final long lastActiveDiff =
+                this.getLastActiveTime() - other.getLastActiveTime();
+        if (lastActiveDiff == 0) {
+            // make sure the natural ordering is consistent with equals
+            // 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);
     }
 
     /**
@@ -53,15 +70,16 @@ public class PooledObject<T> {
     public String toString() {
         StringBuilder result = new StringBuilder();
         result.append("Object: ");
-        result.append(_object.toString());
+        result.append(object.toString());
         result.append(", State: ");
-        result.append(_state.toString());
+        result.append(state.toString());
         return result.toString();
+        // TODO add other attributes
     }
 
     public synchronized boolean startEvictionTest() {
-        if (_state == PooledObjectState.IDLE) {
-            _state = PooledObjectState.MAINTAIN_EVICTION;
+        if (state == PooledObjectState.IDLE) {
+            state = PooledObjectState.MAINTAIN_EVICTION;
             return true;
         }
         
@@ -70,11 +88,11 @@ public class PooledObject<T> {
 
     public synchronized boolean endEvictionTest(
             LinkedBlockingDeque<PooledObject<T>> idleQueue) {
-        if (_state == PooledObjectState.MAINTAIN_EVICTION) {
-            _state = PooledObjectState.IDLE;
+        if (state == PooledObjectState.MAINTAIN_EVICTION) {
+            state = PooledObjectState.IDLE;
             return true;
-        } else if (_state == PooledObjectState.MAINTAIN_EVICTION_RETURN_TO_HEAD) {
-            _state = PooledObjectState.IDLE;
+        } else if (state == PooledObjectState.MAINTAIN_EVICTION_RETURN_TO_HEAD) {
+            state = PooledObjectState.IDLE;
             if (!idleQueue.offerFirst(this)) {
                 // TODO - Should never happen
             }
@@ -84,12 +102,12 @@ public class PooledObject<T> {
     }
 
     public synchronized boolean allocate() {
-        if (_state == PooledObjectState.IDLE) {
-            _state = PooledObjectState.ALLOCATED;
+        if (state == PooledObjectState.IDLE) {
+            state = PooledObjectState.ALLOCATED;
             return true;
-        } else if (_state == PooledObjectState.MAINTAIN_EVICTION) {
+        } else if (state == PooledObjectState.MAINTAIN_EVICTION) {
             // TODO Allocate anyway and ignore eviction test
-            _state = PooledObjectState.MAINTAIN_EVICTION_RETURN_TO_HEAD;
+            state = PooledObjectState.MAINTAIN_EVICTION_RETURN_TO_HEAD;
             return false;
         }
         // TODO if validating and testOnBorrow == true then pre-allocate for
@@ -98,8 +116,9 @@ public class PooledObject<T> {
     }
 
     public synchronized boolean deallocate() {
-        if (_state == PooledObjectState.ALLOCATED) {
-            _state = PooledObjectState.IDLE;
+        if (state == PooledObjectState.ALLOCATED) {
+            state = PooledObjectState.IDLE;
+            lastActiveTime = System.currentTimeMillis();
             return true;
         }