Author: markt Date: Wed Dec 11 10:55:34 2013 New Revision: 1550101 URL: http://svn.apache.org/r1550101 Log: Expose some additional information via JMX.
Modified: commons/proper/pool/trunk/src/changes/changes.xml commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObject.java commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfo.java commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfoMBean.java Modified: commons/proper/pool/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/changes/changes.xml?rev=1550101&r1=1550100&r2=1550101&view=diff ============================================================================== --- commons/proper/pool/trunk/src/changes/changes.xml (original) +++ commons/proper/pool/trunk/src/changes/changes.xml Wed Dec 11 10:55:34 2013 @@ -59,6 +59,10 @@ The <action> type attribute can be add,u JMX so components using the pools can register the pools they use under a related name. </action> + <action dev="markt" type="add"> + Include the number of times an object has been borrowed from the Pool when + the DefaultPooledObject wrapper is used. + </action> </release> <release version="2.0" date="2013-11-11" description= "This is a major new release that provides significant performance improvements Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java?rev=1550101&r1=1550100&r2=1550101&view=diff ============================================================================== --- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java (original) +++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/PooledObject.java Wed Dec 11 10:55:34 2013 @@ -198,4 +198,11 @@ public interface PooledObject<T> extends * Marks the object as returning to the pool. */ void markReturning(); + + // TODO: Uncomment this for version 3 (can't add it to 2.x as it will break + // API compatibility) + ///** + // * Get the number of times this object has been borrowed. + // */ + //long getBorrowedCount(); } Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObject.java URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObject.java?rev=1550101&r1=1550100&r2=1550101&view=diff ============================================================================== --- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObject.java (original) +++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObject.java Wed Dec 11 10:55:34 2013 @@ -48,6 +48,7 @@ public class DefaultPooledObject<T> impl private volatile boolean logAbandoned = false; private volatile Exception borrowedBy = null; private volatile Exception usedBy = null; + private volatile long borrowedCount = 0; /** * Create a new instance that wraps the provided object so that the pool can @@ -98,6 +99,14 @@ public class DefaultPooledObject<T> impl } /** + * Get the number of times this object has been borrowed. + * @return The number of times this object has been borrowed. + */ + public long getBorrowedCount() { + return borrowedCount; + } + + /** * Return an estimate of the last time this object was used. If the class * of the pooled object implements {@link TrackedUse}, what is returned is * the maximum of {@link TrackedUse#getLastUsed()} and @@ -179,6 +188,7 @@ public class DefaultPooledObject<T> impl state = PooledObjectState.ALLOCATED; lastBorrowTime = System.currentTimeMillis(); lastUseTime = lastBorrowTime; + borrowedCount++; if (logAbandoned) { borrowedBy = new AbandonedObjectCreatedException(); } Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfo.java URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfo.java?rev=1550101&r1=1550100&r2=1550101&view=diff ============================================================================== --- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfo.java (original) +++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfo.java Wed Dec 11 10:55:34 2013 @@ -90,4 +90,14 @@ public class DefaultPooledObjectInfo imp public String getPooledObjectToString() { return pooledObject.getObject().toString(); } + + @Override + public long getBorrowedCount() { + // TODO Simplify this once getBorrowedCount has been added to PooledObject + if (pooledObject instanceof DefaultPooledObject) { + return ((DefaultPooledObject<?>) pooledObject).getBorrowedCount(); + } else { + return -1; + } + } } Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfoMBean.java URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfoMBean.java?rev=1550101&r1=1550100&r2=1550101&view=diff ============================================================================== --- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfoMBean.java (original) +++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/DefaultPooledObjectInfoMBean.java Wed Dec 11 10:55:34 2013 @@ -98,4 +98,10 @@ public interface DefaultPooledObjectInfo * @see Object#toString() */ String getPooledObjectToString(); + + /** + * Get the number of times this object has been borrowed. + * @return The number of times this object has been borrowed. + */ + long getBorrowedCount(); }