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/10/11 16:09:57 UTC
svn commit: r1531299 -
/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
Author: markt
Date: Fri Oct 11 14:09:57 2013
New Revision: 1531299
URL: http://svn.apache.org/r1531299
Log:
Allow the AbandonedConfig to be disabled as well as changed while the pool is running.
Make changes to AbandonedConfig thread safe.
Modified:
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/GenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java?rev=1531299&r1=1531298&r2=1531299&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 Fri Oct 11 14:09:57 2013
@@ -33,6 +33,7 @@ import org.apache.commons.pool2.PooledOb
import org.apache.commons.pool2.PooledObjectState;
import org.apache.commons.pool2.SwallowedExceptionListener;
import org.apache.commons.pool2.TrackedUse;
+import org.apache.commons.pool2.UsageTracking;
/**
* A configurable {@link ObjectPool} implementation.
@@ -76,7 +77,7 @@ import org.apache.commons.pool2.TrackedU
* @since 2.0
*/
public class GenericObjectPool<T> extends BaseGenericObjectPool<T>
- implements ObjectPool<T>, GenericObjectPoolMXBean {
+ implements ObjectPool<T>, GenericObjectPoolMXBean, UsageTracking<T> {
/**
* Create a new <code>GenericObjectPool</code> using defaults from
@@ -233,7 +234,8 @@ public class GenericObjectPool<T> extend
*/
@Override
public boolean getLogAbandoned() {
- return isAbandonedConfig() && abandonedConfig.getLogAbandoned();
+ AbandonedConfig ac = this.abandonedConfig;
+ return ac != null && ac.getLogAbandoned();
}
/**
@@ -244,8 +246,8 @@ public class GenericObjectPool<T> extend
*/
@Override
public boolean getRemoveAbandonedOnBorrow() {
- return isAbandonedConfig() &&
- abandonedConfig.getRemoveAbandonedOnBorrow();
+ AbandonedConfig ac = this.abandonedConfig;
+ return ac != null && ac.getRemoveAbandonedOnBorrow();
}
/**
@@ -256,8 +258,8 @@ public class GenericObjectPool<T> extend
*/
@Override
public boolean getRemoveAbandonedOnMaintenance() {
- return isAbandonedConfig() &&
- abandonedConfig.getRemoveAbandonedOnMaintenance();
+ AbandonedConfig ac = this.abandonedConfig;
+ return ac != null && ac.getRemoveAbandonedOnMaintenance();
}
/**
@@ -268,9 +270,8 @@ public class GenericObjectPool<T> extend
*/
@Override
public int getRemoveAbandonedTimeout() {
- return isAbandonedConfig() ?
- abandonedConfig.getRemoveAbandonedTimeout() :
- Integer.MAX_VALUE;
+ AbandonedConfig ac = this.abandonedConfig;
+ return ac != null ? ac.getRemoveAbandonedTimeout() : Integer.MAX_VALUE;
}
@@ -308,12 +309,16 @@ public class GenericObjectPool<T> extend
* @see AbandonedConfig
*/
public void setAbandonedConfig(AbandonedConfig abandonedConfig) throws IllegalArgumentException {
- this.abandonedConfig = new AbandonedConfig();
- this.abandonedConfig.setLogAbandoned(abandonedConfig.getLogAbandoned());
- this.abandonedConfig.setLogWriter(abandonedConfig.getLogWriter());
- this.abandonedConfig.setRemoveAbandonedOnBorrow(abandonedConfig.getRemoveAbandonedOnBorrow());
- this.abandonedConfig.setRemoveAbandonedOnMaintenance(abandonedConfig.getRemoveAbandonedOnMaintenance());
- this.abandonedConfig.setRemoveAbandonedTimeout(abandonedConfig.getRemoveAbandonedTimeout());
+ if (abandonedConfig == null) {
+ this.abandonedConfig = null;
+ } else {
+ this.abandonedConfig = new AbandonedConfig();
+ this.abandonedConfig.setLogAbandoned(abandonedConfig.getLogAbandoned());
+ this.abandonedConfig.setLogWriter(abandonedConfig.getLogWriter());
+ this.abandonedConfig.setRemoveAbandonedOnBorrow(abandonedConfig.getRemoveAbandonedOnBorrow());
+ this.abandonedConfig.setRemoveAbandonedOnMaintenance(abandonedConfig.getRemoveAbandonedOnMaintenance());
+ this.abandonedConfig.setRemoveAbandonedTimeout(abandonedConfig.getRemoveAbandonedTimeout());
+ }
}
/**
@@ -379,11 +384,11 @@ public class GenericObjectPool<T> extend
public T borrowObject(long borrowMaxWaitMillis) throws Exception {
assertOpen();
- if (isAbandonedConfig() &&
- abandonedConfig.getRemoveAbandonedOnBorrow() &&
+ AbandonedConfig ac = this.abandonedConfig;
+ if (ac != null && ac.getRemoveAbandonedOnBorrow() &&
(getNumIdle() < 2) &&
(getNumActive() > getMaxTotal() - 3) ) {
- removeAbandoned();
+ removeAbandoned(ac);
}
PooledObject<T> p = null;
@@ -771,8 +776,9 @@ public class GenericObjectPool<T> extend
}
}
}
- if (isAbandonedConfig() && abandonedConfig.getRemoveAbandonedOnMaintenance()) {
- removeAbandoned();
+ AbandonedConfig ac = this.abandonedConfig;
+ if (ac != null && ac.getRemoveAbandonedOnMaintenance()) {
+ removeAbandoned(ac);
}
}
@@ -793,7 +799,8 @@ public class GenericObjectPool<T> extend
throw e;
}
- if (isAbandonedConfig() && abandonedConfig.getLogAbandoned()) {
+ AbandonedConfig ac = this.abandonedConfig;
+ if (ac != null && ac.getLogAbandoned()) {
p.setLogAbandoned(true);
}
@@ -876,11 +883,11 @@ public class GenericObjectPool<T> extend
* Recover abandoned objects which have been checked out but
* not used since longer than the removeAbandonedTimeout.
*/
- private void removeAbandoned() {
+ private void removeAbandoned(AbandonedConfig ac) {
// Generate a list of abandoned objects to remove
final long now = System.currentTimeMillis();
final long timeout =
- now - (abandonedConfig.getRemoveAbandonedTimeout() * 1000L);
+ now - (ac.getRemoveAbandonedTimeout() * 1000L);
ArrayList<PooledObject<T>> remove = new ArrayList<PooledObject<T>>();
Iterator<PooledObject<T>> it = allObjects.values().iterator();
while (it.hasNext()) {
@@ -898,8 +905,8 @@ public class GenericObjectPool<T> extend
Iterator<PooledObject<T>> itr = remove.iterator();
while (itr.hasNext()) {
PooledObject<T> pooledObject = itr.next();
- if (abandonedConfig.getLogAbandoned()) {
- pooledObject.printStackTrace(abandonedConfig.getLogWriter());
+ if (ac.getLogAbandoned()) {
+ pooledObject.printStackTrace(ac.getLogWriter());
}
try {
invalidateObject(pooledObject.getObject());
@@ -909,6 +916,15 @@ public class GenericObjectPool<T> extend
}
}
+
+ //--- Usage tracking support -----------------------------------------------
+
+ @Override
+ public void use(T pooledObject) {
+ // TODO Auto-generated method stub
+ }
+
+
//--- JMX support ----------------------------------------------------------
private volatile String factoryType = null;