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();
 }


Reply via email to