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