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 20:27:31 UTC
svn commit: r1531382 - in /commons/proper/pool/trunk/src:
main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
test/java/org/apache/commons/pool2/proxy/TestProxiedObjectPoolWithJdkProxy.java
Author: markt
Date: Fri Oct 11 18:27:31 2013
New Revision: 1531382
URL: http://svn.apache.org/r1531382
Log:
POOL-211
Add a test case for logging the last used stack trace and fix a bug it highlighted.
Modified:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/proxy/TestProxiedObjectPoolWithJdkProxy.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=1531382&r1=1531381&r2=1531382&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 18:27:31 2013
@@ -318,6 +318,7 @@ public class GenericObjectPool<T> extend
this.abandonedConfig.setRemoveAbandonedOnBorrow(abandonedConfig.getRemoveAbandonedOnBorrow());
this.abandonedConfig.setRemoveAbandonedOnMaintenance(abandonedConfig.getRemoveAbandonedOnMaintenance());
this.abandonedConfig.setRemoveAbandonedTimeout(abandonedConfig.getRemoveAbandonedTimeout());
+ this.abandonedConfig.setUseUsageTracking(abandonedConfig.getUseUsageTracking());
}
}
Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/proxy/TestProxiedObjectPoolWithJdkProxy.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/proxy/TestProxiedObjectPoolWithJdkProxy.java?rev=1531382&r1=1531381&r2=1531382&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/proxy/TestProxiedObjectPoolWithJdkProxy.java (original)
+++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/proxy/TestProxiedObjectPoolWithJdkProxy.java Fri Oct 11 18:27:31 2013
@@ -18,11 +18,17 @@ package org.apache.commons.pool2.proxy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.PooledObjectFactory;
+import org.apache.commons.pool2.impl.AbandonedConfig;
import org.apache.commons.pool2.impl.GenericObjectPool;
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Before;
import org.junit.Test;
@@ -30,13 +36,30 @@ import org.junit.Test;
public class TestProxiedObjectPoolWithJdkProxy {
private static final String DATA1 = "data1";
+ private static final int ABANDONED_TIMEOUT_SECS = 3;
private ObjectPool<TestObject> pool;
+ private StringWriter log;
@Before
public void setup() {
+ log = new StringWriter();
+
+ PrintWriter pw = new PrintWriter(log);
+ AbandonedConfig abandonedConfig = new AbandonedConfig();
+ abandonedConfig.setLogAbandoned(true);
+ abandonedConfig.setRemoveAbandonedOnBorrow(true);
+ abandonedConfig.setUseUsageTracking(true);
+ abandonedConfig.setRemoveAbandonedTimeout(ABANDONED_TIMEOUT_SECS);
+ abandonedConfig.setLogWriter(pw);
+
+ GenericObjectPoolConfig config = new GenericObjectPoolConfig();
+ config.setMaxTotal(3);
+
PooledObjectFactory<TestObject> factory = new TestObjectFactory();
- ObjectPool<TestObject> innerPool = new GenericObjectPool<TestObject>(factory);
+
+ ObjectPool<TestObject> innerPool =
+ new GenericObjectPool<TestObject>(factory, config, abandonedConfig);
ProxySource<TestObject> proxySource = new JdkProxySource<TestObject>(
this.getClass().getClassLoader(), new Class<?>[] { TestObject.class });
@@ -74,6 +97,26 @@ public class TestProxiedObjectPoolWithJd
}
+ @Test
+ public void testUsageTracking() throws Exception {
+ TestObject obj = pool.borrowObject();
+ assertNotNull(obj);
+
+ // Use the object to trigger collection of last used stack trace
+ obj.setData(DATA1);
+
+ // Sleep long enough for the object to be considered abandoned
+ Thread.sleep((ABANDONED_TIMEOUT_SECS + 2) * 1000);
+
+ // Borrow another object to trigger the abandoned object processing
+ pool.borrowObject();
+
+ String logOutput = log.getBuffer().toString();
+
+ assertTrue(logOutput.contains("Pooled object created"));
+ assertTrue(logOutput.contains("The last code to use this object was"));
+ }
+
private static class TestObjectFactory extends
BasePooledObjectFactory<TestObject> {