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/26 11:03:01 UTC

svn commit: r1507227 - in /commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl: GenericKeyedObjectPool.java GenericKeyedObjectPoolMBean.java GenericKeyedObjectPoolMXBean.java

Author: markt
Date: Fri Jul 26 09:03:00 2013
New Revision: 1507227

URL: http://svn.apache.org/r1507227
Log:
Switch GKOP to using an MXBean so the pooled objects can be exposed without having to register each of the individually in JMX.
Remove the list of keys from the interface as a) the key class almost certainly won't be available to the JMX client and b) other attributes include key lists in their results.
Add a method to expose all the objects currently in the pool.

Added:
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMXBean.java
      - copied, changed from r1506497, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMBean.java
Removed:
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMBean.java
Modified:
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java

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=1507227&r1=1507226&r2=1507227&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 Fri Jul 26 09:03:00 2013
@@ -74,7 +74,7 @@ import org.apache.commons.pool2.PooledOb
  * @since 2.0
  */
 public class GenericKeyedObjectPool<K,T> extends BaseGenericObjectPool<T>
-        implements KeyedObjectPool<K,T>, GenericKeyedObjectPoolMBean<K> {
+        implements KeyedObjectPool<K,T>, GenericKeyedObjectPoolMXBean<K> {
 
     /**
      * Create a new <code>GenericKeyedObjectPool</code> using defaults from
@@ -1257,34 +1257,53 @@ public class GenericKeyedObjectPool<K,T>
 
     /**
      * Return an estimate of the number of threads currently blocked waiting for
-     * an object from the pool for the given key. This is intended for
+     * an object from the pool for each key. This is intended for
      * monitoring only, not for synchronization control.
      */
     @Override
-    public int getNumWaiters(K key) {
-        if (getBlockWhenExhausted()) {
-            final ObjectDeque<T> objectDeque = poolMap.get(key);
-            if (objectDeque == null) {
-                return 0;
-            } else {
-                return objectDeque.getIdleObjects().getTakeQueueLength();
+    public Map<String,Integer> getNumWaitersByKey() {
+        Map<String,Integer> result = new HashMap<String,Integer>();
+
+        for (K key : poolMap.keySet()) {
+            ObjectDeque<T> queue = poolMap.get(key);
+            if (queue != null) {
+                if (getBlockWhenExhausted()) {
+                    result.put(key.toString(), Integer.valueOf(
+                            queue.getIdleObjects().getTakeQueueLength()));
+                } else {
+                    result.put(key.toString(), Integer.valueOf(0));
+                }
             }
-        } else {
-            return 0;
         }
+        return result;
     }
 
+    /**
+     * Provides information on all the objects in the pool, both idle (waiting
+     * to be borrowed) and active (currently borrowed).
+     * <p>
+     * Note: This is named listAllObjects so it is presented as an operation via
+     * JMX. That means it won't be invoked unless the explicitly requested
+     * whereas all attributes will be automatically requested when viewing the
+     * attributes for an object in a tool like JConsole.
+     */
     @Override
-    public List<K> getKeys() {
-        List<K> keyCopy = new ArrayList<K>();
-        Lock readLock = keyLock.readLock();
-        readLock.lock();
-        try {
-            keyCopy.addAll(poolKeyList);
-        } finally {
-            readLock.unlock();
+    public Map<String,List<DefaultPooledObjectInfo>> listAllObjects() {
+        Map<String,List<DefaultPooledObjectInfo>> result =
+                new HashMap<String,List<DefaultPooledObjectInfo>>();
+
+        for (K key : poolMap.keySet()) {
+            List<DefaultPooledObjectInfo> list =
+                    new ArrayList<DefaultPooledObjectInfo>();
+            ObjectDeque<T> queue = poolMap.get(key);
+            if (queue != null) {
+                result.put(key.toString(), list);
+                for (PooledObject<T> p : queue.getAllObjects().values()) {
+                    list.add(new DefaultPooledObjectInfo(p));
+                }
+            }
         }
-        return keyCopy;
+        return result;
     }
 
 

Copied: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMXBean.java (from r1506497, commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMBean.java)
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMXBean.java?p2=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMXBean.java&p1=commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMBean.java&r1=1506497&r2=1507227&rev=1507227&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMBean.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPoolMXBean.java Fri Jul 26 09:03:00 2013
@@ -26,7 +26,7 @@ import java.util.Map;
  *
  * @since 2.0
  */
-public interface GenericKeyedObjectPoolMBean<K> {
+public interface GenericKeyedObjectPoolMXBean<K> {
     // Expose getters for configuration settings
     /**
      * See {@link GenericKeyedObjectPool#getBlockWhenExhausted()}
@@ -152,9 +152,9 @@ public interface GenericKeyedObjectPoolM
     /**
      * See {@link GenericKeyedObjectPool#getNumWaiters(Object)}
      */
-    int getNumWaiters(K key);
+    Map<String,Integer> getNumWaitersByKey();
     /**
-     * See {@link GenericKeyedObjectPool#getKeys()}
+     * See {@link GenericKeyedObjectPool#listAllObjects()}
      */
-    List<K> getKeys();
+    Map<String,List<DefaultPooledObjectInfo>> listAllObjects();
 }