[prev in list] [next in list] [prev in thread] [next in thread]
List: jakarta-commons-dev
Subject: svn commit: r1332415 - in /commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl:
From: markt () apache ! org
Date: 2012-04-30 21:44:11
Message-ID: 20120430214411.8649023889FD () eris ! apache ! org
[Download RAW message or body]
Author: markt
Date: Mon Apr 30 21:44:10 2012
New Revision: 1332415
URL: http://svn.apache.org/viewvc?rev=1332415&view=rev
Log:
Pull up the JMX stats.
protected -> package private
Modified:
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/GenericKeyedObjectPool.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
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/c \
ommons/pool2/impl/BaseGenericObjectPool.java?rev=1332415&r1=1332414&r2=1332415&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 \
Mon Apr 30 21:44:10 2012 @@ -26,6 +26,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanNotificationInfo;
@@ -81,9 +82,9 @@ public abstract class BaseGenericObjectP
// Internal (primarily state) attributes
volatile boolean closed = false;
+ final Object evictionLock = new Object();
private Evictor evictor = null; // @GuardedBy("evictionLock")
- protected final Object evictionLock = new Object();
- protected Iterator<PooledObject<T>> evictionIterator = null; // \
@GuardedBy("evictionLock") + Iterator<PooledObject<T>> evictionIterator = null; // \
@GuardedBy("evictionLock") /*
* Class loader for evictor thread to use since in a J2EE or similar
* environment the context class loader for the evictor thread may have
@@ -97,6 +98,18 @@ public abstract class BaseGenericObjectP
private final String creationStackTrace;
private final Deque<String> swallowedExceptions = new LinkedList<String>();
private final AtomicInteger swallowedExcpetionCount = new AtomicInteger(0);
+ public static final int MEAN_TIMING_STATS_CACHE_SIZE = 100;
+ private final AtomicLong borrowedCount = new AtomicLong(0);
+ private final AtomicLong returnedCount = new AtomicLong(0);
+ final AtomicLong createdCount = new AtomicLong(0);
+ final AtomicLong destroyedCount = new AtomicLong(0);
+ final AtomicLong destroyedByEvictorCount = new AtomicLong(0);
+ final AtomicLong destroyedByBorrowValidationCount = new AtomicLong(0);
+ private final LinkedList<Long> activeTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats() + private final LinkedList<Long> \
idleTimes = new LinkedList<Long>(); // @GuardedBy("activeTimes") - except in \
initStats() + private final LinkedList<Long> waitTimes = new LinkedList<Long>(); \
// @GuardedBy("activeTimes") - except in initStats() + private final Object \
maxBorrowWaitTimeMillisLock = new Object(); + private volatile long \
maxBorrowWaitTimeMillis = 0; // @GuardedBy("maxBorrowWaitTimeMillisLock")
public BaseGenericObjectPool(BaseObjectPoolConfig config) {
@@ -116,6 +129,9 @@ public abstract class BaseGenericObjectP
// save the current CCL to be used later by the evictor Thread
factoryClassLoader = Thread.currentThread().getContextClassLoader();
+
+ // Initialise the attributes used to record rolling averages
+ initStats();
}
@@ -569,7 +585,7 @@ public abstract class BaseGenericObjectP
* @throws IllegalStateException if this pool has been closed.
* @see #isClosed()
*/
- protected final void assertOpen() throws IllegalStateException {
+ final void assertOpen() throws IllegalStateException {
if (isClosed()) {
throw new IllegalStateException("Pool not open");
}
@@ -582,9 +598,9 @@ public abstract class BaseGenericObjectP
* @param delay
* milliseconds between evictor runs.
*/
- // Needs to be final; see POOL-195. Make protected method final as it is
+ // Needs to be final; see POOL-195. Make method final as it is
// called from a constructor.
- protected final void startEvictor(long delay) {
+ final void startEvictor(long delay) {
synchronized (evictionLock) {
if (null != evictor) {
EvictionTimer.cancel(evictor);
@@ -598,7 +614,7 @@ public abstract class BaseGenericObjectP
}
}
- protected abstract void ensureMinIdle() throws Exception;
+ abstract void ensureMinIdle() throws Exception;
// Monitoring (primarily JMX) related methods
@@ -635,21 +651,92 @@ public abstract class BaseGenericObjectP
return temp.toArray(new String[SWALLOWED_EXCEPTION_QUEUE_SIZE]);
}
- protected final NotificationBroadcasterSupport getJmxNotificationSupport() {
- return jmxNotificationSupport;
+ /**
+ * The total number of objects successfully borrowed from this pool over the
+ * lifetime of the pool.
+ */
+ public long getBorrowedCount() {
+ return borrowedCount.get();
}
- protected String getStackTrace(Exception e) {
- // Need the exception in string form to prevent the retention of
- // references to classes in the stack trace that could trigger a memory
- // leak in a container environment
- Writer w = new StringWriter();
- PrintWriter pw = new PrintWriter(w);
- e.printStackTrace(pw);
- return w.toString();
+ /**
+ * The total number of objects returned to this pool over the lifetime of
+ * the pool. This excludes attempts to return the same object multiple
+ * times.
+ */
+ public long getReturnedCount() {
+ return returnedCount.get();
+ }
+
+ /**
+ * The total number of objects created for this pool over the lifetime of
+ * the pool.
+ */
+ public long getCreatedCount() {
+ return createdCount.get();
+ }
+
+ /**
+ * The total number of objects destroyed by this pool over the lifetime of
+ * the pool.
+ */
+ public long getDestroyedCount() {
+ return destroyedCount.get();
+ }
+
+ /**
+ * The total number of objects destroyed by the evictor associated with this
+ * pool over the lifetime of the pool.
+ */
+ public long getDestroyedByEvictorCount() {
+ return destroyedByEvictorCount.get();
+ }
+
+ /**
+ * The total number of objects destroyed by this pool as a result of failing
+ * validation during <code>borrowObject()</code> over the lifetime of the
+ * pool.
+ */
+ public long getDestroyedByBorrowValidationCount() {
+ return destroyedByBorrowValidationCount.get();
}
- protected void swallowException(Exception e) {
+ /**
+ * The mean time objects are active for based on the last {@link
+ * #MEAN_TIMING_STATS_CACHE_SIZE} objects returned to the pool.
+ */
+ public long getMeanActiveTimeMillis() {
+ return getMeanFromStatsCache(activeTimes);
+ }
+
+ /**
+ * The mean time objects are idle for based on the last {@link
+ * #MEAN_TIMING_STATS_CACHE_SIZE} objects borrowed from the pool.
+ */
+ public long getMeanIdleTimeMillis() {
+ return getMeanFromStatsCache(idleTimes);
+ }
+
+ /**
+ * The mean time threads wait to borrow an object based on the last {@link
+ * #MEAN_TIMING_STATS_CACHE_SIZE} objects borrowed from the pool.
+ */
+ public long getMeanBorrowWaitTimeMillis() {
+ return getMeanFromStatsCache(waitTimes);
+ }
+
+ /**
+ * The maximum time a thread has waited to borrow objects from the pool.
+ */
+ public long getMaxBorrowWaitTimeMillis() {
+ return maxBorrowWaitTimeMillis;
+ }
+
+ final NotificationBroadcasterSupport getJmxNotificationSupport() {
+ return jmxNotificationSupport;
+ }
+
+ void swallowException(Exception e) {
String msg = getStackTrace(e);
ObjectName oname = getJmxName();
@@ -666,6 +753,68 @@ public abstract class BaseGenericObjectP
}
}
+ void updateStatsBorrow(PooledObject<T> p, long waitTime) {
+ borrowedCount.incrementAndGet();
+ synchronized (idleTimes) {
+ idleTimes.add(Long.valueOf(p.getIdleTimeMillis()));
+ idleTimes.poll();
+ }
+ synchronized (waitTimes) {
+ waitTimes.add(Long.valueOf(waitTime));
+ waitTimes.poll();
+ }
+ synchronized (maxBorrowWaitTimeMillisLock) {
+ if (waitTime > maxBorrowWaitTimeMillis) {
+ maxBorrowWaitTimeMillis = waitTime;
+ }
+ }
+ }
+
+ void updateStatsReturn(long activeTime) {
+ returnedCount.incrementAndGet();
+ synchronized (activeTimes) {
+ activeTimes.add(Long.valueOf(activeTime));
+ activeTimes.poll();
+ }
+ }
+
+ private String getStackTrace(Exception e) {
+ // Need the exception in string form to prevent the retention of
+ // references to classes in the stack trace that could trigger a memory
+ // leak in a container environment
+ Writer w = new StringWriter();
+ PrintWriter pw = new PrintWriter(w);
+ e.printStackTrace(pw);
+ return w.toString();
+ }
+
+ private long getMeanFromStatsCache(LinkedList<Long> cache) {
+ List<Long> times = new ArrayList<Long>(MEAN_TIMING_STATS_CACHE_SIZE);
+ synchronized (cache) {
+ times.addAll(cache);
+ }
+ double result = 0;
+ int counter = 0;
+ Iterator<Long> iter = times.iterator();
+ while (iter.hasNext()) {
+ Long time = iter.next();
+ if (time != null) {
+ counter++;
+ result = result * ((counter - 1) / (double) counter) +
+ time.longValue()/(double) counter;
+ }
+ }
+ return (long) result;
+ }
+
+ private void initStats() {
+ for (int i = 0; i < MEAN_TIMING_STATS_CACHE_SIZE; i++) {
+ activeTimes.add(null);
+ idleTimes.add(null);
+ waitTimes.add(null);
+ }
+ }
+
// Implement NotificationEmitter interface
@@ -720,7 +869,7 @@ public abstract class BaseGenericObjectP
*
* @see GenericKeyedObjectPool#setTimeBetweenEvictionRunsMillis
*/
- protected class Evictor extends TimerTask {
+ class Evictor extends TimerTask {
/**
* Run pool maintenance. Evict objects qualifying for eviction and then
* ensure that the minimum number of idle instances are available.
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/c \
ommons/pool2/impl/GenericKeyedObjectPool.java?rev=1332415&r1=1332414&r2=1332415&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 \
Mon Apr 30 21:44:10 2012 @@ -20,7 +20,6 @@ import java.lang.management.ManagementFa
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -224,8 +223,6 @@ public class GenericKeyedObjectPool<K,T>
startEvictor(getMinEvictableIdleTimeMillis());
- initStats();
-
ObjectName onameTemp = null;
// JMX Registration
if (config.getJmxEnabled()) {
@@ -558,20 +555,8 @@ public class GenericKeyedObjectPool<K,T>
deregister(key);
}
- borrowedCount.incrementAndGet();
- synchronized (idleTimes) {
- idleTimes.add(Long.valueOf(p.getIdleTimeMillis()));
- idleTimes.poll();
- }
- synchronized (waitTimes) {
- waitTimes.add(Long.valueOf(waitTime));
- waitTimes.poll();
- }
- synchronized (maxBorrowWaitTimeMillisLock) {
- if (waitTime > maxBorrowWaitTimeMillis) {
- maxBorrowWaitTimeMillis = waitTime;
- }
- }
+ updateStatsBorrow(p, waitTime);
+
return p.getObject();
}
@@ -666,14 +651,6 @@ public class GenericKeyedObjectPool<K,T>
updateStatsReturn(activeTime);
}
- private void updateStatsReturn(long activeTime) {
- returnedCount.incrementAndGet();
- synchronized (activeTimes) {
- activeTimes.add(Long.valueOf(activeTime));
- activeTimes.poll();
- }
- }
-
/**
* {@inheritDoc}
@@ -1472,33 +1449,6 @@ public class GenericKeyedObjectPool<K,T>
//--- JMX support ----------------------------------------------------------
- private void initStats() {
- for (int i = 0; i < AVERAGE_TIMING_STATS_CACHE_SIZE; i++) {
- activeTimes.add(null);
- idleTimes.add(null);
- waitTimes.add(null);
- }
- }
-
- private long getMeanFromStatsCache(LinkedList<Long> cache) {
- List<Long> times = new ArrayList<Long>(AVERAGE_TIMING_STATS_CACHE_SIZE);
- synchronized (cache) {
- times.addAll(cache);
- }
- double result = 0;
- int counter = 0;
- Iterator<Long> iter = times.iterator();
- while (iter.hasNext()) {
- Long time = iter.next();
- if (time != null) {
- counter++;
- result = result * ((counter - 1) / (double) counter) +
- time.longValue()/(double) counter;
- }
- }
- return (long) result;
- }
-
@Override
public Map<String,Integer> getNumActivePerKey() {
HashMap<String,Integer> result = new HashMap<String,Integer>();
@@ -1519,56 +1469,6 @@ public class GenericKeyedObjectPool<K,T>
return result;
}
- @Override
- public long getBorrowedCount() {
- return borrowedCount.get();
- }
-
- @Override
- public long getReturnedCount() {
- return returnedCount.get();
- }
-
- @Override
- public long getCreatedCount() {
- return createdCount.get();
- }
-
- @Override
- public long getDestroyedCount() {
- return destroyedCount.get();
- }
-
- @Override
- public long getDestroyedByEvictorCount() {
- return destroyedByEvictorCount.get();
- }
-
- @Override
- public long getDestroyedByBorrowValidationCount() {
- return destroyedByBorrowValidationCount.get();
- }
-
- @Override
- public long getMeanActiveTimeMillis() {
- return getMeanFromStatsCache(activeTimes);
- }
-
- @Override
- public long getMeanIdleTimeMillis() {
- return getMeanFromStatsCache(idleTimes);
- }
-
- @Override
- public long getMeanBorrowWaitTimeMillis() {
- return getMeanFromStatsCache(waitTimes);
- }
-
- @Override
- public long getMaxBorrowWaitTimeMillis() {
- return maxBorrowWaitTimeMillis;
- }
-
/**
* Return an estimate of the number of threads currently blocked waiting for
* an object from the pool. This is intended for monitoring only, not for
@@ -1762,20 +1662,6 @@ public class GenericKeyedObjectPool<K,T>
private final Object closeLock = new Object();
// JMX specific attributes
- private static final int AVERAGE_TIMING_STATS_CACHE_SIZE = 100;
- private final AtomicLong borrowedCount = new AtomicLong(0);
- private final AtomicLong returnedCount = new AtomicLong(0);
- private final AtomicLong createdCount = new AtomicLong(0);
- private final AtomicLong destroyedCount = new AtomicLong(0);
- private final AtomicLong destroyedByEvictorCount = new AtomicLong(0);
- private final AtomicLong destroyedByBorrowValidationCount = new AtomicLong(0);
- private final LinkedList<Long> activeTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats()
- private final LinkedList<Long> idleTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats()
- private final LinkedList<Long> waitTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats()
-
- private final Object maxBorrowWaitTimeMillisLock = new Object();
- private volatile long maxBorrowWaitTimeMillis = 0; // \
@GuardedBy("maxBorrowWaitTimeMillisLock")
-
private final ObjectName oname;
private static final String ONAME_BASE =
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/c \
ommons/pool2/impl/GenericObjectPool.java?rev=1332415&r1=1332414&r2=1332415&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 \
Mon Apr 30 21:44:10 2012 @@ -17,10 +17,6 @@
package org.apache.commons.pool2.impl;
import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.concurrent.ConcurrentHashMap;
@@ -189,8 +185,6 @@ public class GenericObjectPool<T> extend
startEvictor(getTimeBetweenEvictionRunsMillis());
- initStats();
-
ObjectName onameTemp = null;
// JMX Registration
if (config.getJmxEnabled()) {
@@ -489,20 +483,8 @@ public class GenericObjectPool<T> extend
}
}
- borrowedCount.incrementAndGet();
- synchronized (idleTimes) {
- idleTimes.add(Long.valueOf(p.getIdleTimeMillis()));
- idleTimes.poll();
- }
- synchronized (waitTimes) {
- waitTimes.add(Long.valueOf(waitTime));
- waitTimes.poll();
- }
- synchronized (maxBorrowWaitTimeMillisLock) {
- if (waitTime > maxBorrowWaitTimeMillis) {
- maxBorrowWaitTimeMillis = waitTime;
- }
- }
+ updateStatsBorrow(p, waitTime);
+
return p.getObject();
}
@@ -585,14 +567,6 @@ public class GenericObjectPool<T> extend
updateStatsReturn(activeTime);
}
- private void updateStatsReturn(long activeTime) {
- returnedCount.incrementAndGet();
- synchronized (activeTimes) {
- activeTimes.add(Long.valueOf(activeTime));
- activeTimes.poll();
- }
- }
-
/**
* {@inheritDoc}
* <p>
@@ -935,83 +909,6 @@ public class GenericObjectPool<T> extend
//--- JMX support ----------------------------------------------------------
- private void initStats() {
- for (int i = 0; i < AVERAGE_TIMING_STATS_CACHE_SIZE; i++) {
- activeTimes.add(null);
- idleTimes.add(null);
- waitTimes.add(null);
- }
- }
-
- private long getMeanFromStatsCache(LinkedList<Long> cache) {
- List<Long> times = new ArrayList<Long>(AVERAGE_TIMING_STATS_CACHE_SIZE);
- synchronized (cache) {
- times.addAll(cache);
- }
- double result = 0;
- int counter = 0;
- Iterator<Long> iter = times.iterator();
- while (iter.hasNext()) {
- Long time = iter.next();
- if (time != null) {
- counter++;
- result = result * ((counter - 1) / (double) counter) +
- time.longValue()/(double) counter;
- }
- }
- return (long) result;
- }
-
- @Override
- public long getBorrowedCount() {
- return borrowedCount.get();
- }
-
- @Override
- public long getReturnedCount() {
- return returnedCount.get();
- }
-
- @Override
- public long getCreatedCount() {
- return createdCount.get();
- }
-
- @Override
- public long getDestroyedCount() {
- return destroyedCount.get();
- }
-
- @Override
- public long getDestroyedByEvictorCount() {
- return destroyedByEvictorCount.get();
- }
-
- @Override
- public long getDestroyedByBorrowValidationCount() {
- return destroyedByBorrowValidationCount.get();
- }
-
- @Override
- public long getMeanActiveTimeMillis() {
- return getMeanFromStatsCache(activeTimes);
- }
-
- @Override
- public long getMeanIdleTimeMillis() {
- return getMeanFromStatsCache(idleTimes);
- }
-
- @Override
- public long getMeanBorrowWaitTimeMillis() {
- return getMeanFromStatsCache(waitTimes);
- }
-
- @Override
- public long getMaxBorrowWaitTimeMillis() {
- return maxBorrowWaitTimeMillis;
- }
-
/**
* Return an estimate of the number of threads currently blocked waiting for
* an object from the pool. This is intended for monitoring only, not for
@@ -1083,20 +980,6 @@ public class GenericObjectPool<T> extend
private final Object closeLock = new Object();
// JMX specific attributes
- private static final int AVERAGE_TIMING_STATS_CACHE_SIZE = 100;
- private final AtomicLong borrowedCount = new AtomicLong(0);
- private final AtomicLong returnedCount = new AtomicLong(0);
- private final AtomicLong createdCount = new AtomicLong(0);
- private final AtomicLong destroyedCount = new AtomicLong(0);
- private final AtomicLong destroyedByEvictorCount = new AtomicLong(0);
- private final AtomicLong destroyedByBorrowValidationCount = new AtomicLong(0);
- private final LinkedList<Long> activeTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats()
- private final LinkedList<Long> idleTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats()
- private final LinkedList<Long> waitTimes = new LinkedList<Long>(); // \
@GuardedBy("activeTimes") - except in initStats()
-
- private final Object maxBorrowWaitTimeMillisLock = new Object();
- private volatile long maxBorrowWaitTimeMillis = 0; // \
@GuardedBy("maxBorrowWaitTimeMillisLock")
-
private final ObjectName oname;
private static final String ONAME_BASE =
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic