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 15:34:24 UTC
svn commit: r1531293 - in
/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2: ./ proxy/
Author: markt
Date: Fri Oct 11 13:34:23 2013
New Revision: 1531293
URL: http://svn.apache.org/r1531293
Log:
Add the hooks necessary for the proxy to tell the pool that an object has been used.
Added:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/UsageTracking.java (with props)
Modified:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxyHandler.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxySource.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedObjectPool.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxySource.java
Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java?rev=1531293&r1=1531292&r2=1531293&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/TrackedUse.java Fri Oct 11 13:34:23 2013
@@ -14,14 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.commons.pool2;
/**
- * Methods to support usage tracking for instances managed by pools configured
- * to remove abandoned objects.
- *
+ * This interface allows pooled objects to make information available about when
+ * and how they were used available to the object pool. The object pool may, but
+ * is not required, to use this information to make more informed decisions when
+ * determining the state of a pooled object - for instance whether or not the
+ * object has been abandoned.
+ *
* @version $Revision:$
+ *
+ * @since 2.0
*/
public interface TrackedUse {
Added: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/UsageTracking.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/UsageTracking.java?rev=1531293&view=auto
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/UsageTracking.java (added)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/UsageTracking.java Fri Oct 11 13:34:23 2013
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.pool2;
+
+/**
+ * This interface may be implemented by an object pool to enable clients
+ * (primarily those clients that wrap pools to provide pools with extended
+ * features) to provide additional information to the pool relating to object
+ * using allowing more informed decisions and reporting to be made regarding
+ * abandoned objects.
+ *
+ * @version $Revision:$
+ *
+ * @since 2.0
+ */
+public interface UsageTracking<T> {
+ void use(T pooledObject);
+}
Propchange: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/UsageTracking.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxyHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxyHandler.java?rev=1531293&r1=1531292&r2=1531293&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxyHandler.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxyHandler.java Fri Oct 11 13:34:23 2013
@@ -19,12 +19,17 @@ package org.apache.commons.pool2.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
+import org.apache.commons.pool2.UsageTracking;
+
class JdkProxyHandler<T> extends BaseProxyHandler<T>
implements InvocationHandler {
+ private final UsageTracking<T> usageTracking;
+
- JdkProxyHandler(T pooledObject) {
+ JdkProxyHandler(T pooledObject, UsageTracking<T> usageTracking) {
super(pooledObject);
+ this.usageTracking = usageTracking;
}
@@ -32,7 +37,11 @@ class JdkProxyHandler<T> extends BasePro
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
validateProxiedObject();
- return method.invoke(getPooledObject(), args);
+ T pooledObject = getPooledObject();
+ if (usageTracking != null) {
+ usageTracking.use(pooledObject);
+ }
+ return method.invoke(pooledObject, args);
}
}
Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxySource.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxySource.java?rev=1531293&r1=1531292&r2=1531293&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxySource.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/JdkProxySource.java Fri Oct 11 13:34:23 2013
@@ -18,6 +18,8 @@ package org.apache.commons.pool2.proxy;
import java.lang.reflect.Proxy;
+import org.apache.commons.pool2.UsageTracking;
+
class JdkProxySource<T> implements ProxySource<T> {
private final ClassLoader classLoader;
@@ -31,10 +33,10 @@ class JdkProxySource<T> implements Proxy
@Override
- public T createProxy(T pooledObject) {
+ public T createProxy(T pooledObject, UsageTracking<T> usageTracking) {
@SuppressWarnings("unchecked")
- T proxy = (T) Proxy.newProxyInstance(
- classLoader, interfaces, new JdkProxyHandler<T>(pooledObject));
+ T proxy = (T) Proxy.newProxyInstance(classLoader, interfaces,
+ new JdkProxyHandler<T>(pooledObject, usageTracking));
return proxy;
}
Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java?rev=1531293&r1=1531292&r2=1531293&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java Fri Oct 11 13:34:23 2013
@@ -19,6 +19,7 @@ package org.apache.commons.pool2.proxy;
import java.util.NoSuchElementException;
import org.apache.commons.pool2.KeyedObjectPool;
+import org.apache.commons.pool2.UsageTracking;
public class ProxiedKeyedObjectPool<K,V> implements KeyedObjectPool<K,V> {
@@ -33,11 +34,16 @@ public class ProxiedKeyedObjectPool<K,V>
}
+ @SuppressWarnings("unchecked")
@Override
public V borrowObject(K key) throws Exception, NoSuchElementException,
IllegalStateException {
+ UsageTracking<V> usageTracking = null;
+ if (pool instanceof UsageTracking) {
+ usageTracking = (UsageTracking<V>) pool;
+ }
V pooledObject = pool.borrowObject(key);
- V proxy = proxySource.createProxy(pooledObject);
+ V proxy = proxySource.createProxy(pooledObject, usageTracking);
return proxy;
}
Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedObjectPool.java?rev=1531293&r1=1531292&r2=1531293&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedObjectPool.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxiedObjectPool.java Fri Oct 11 13:34:23 2013
@@ -19,6 +19,7 @@ package org.apache.commons.pool2.proxy;
import java.util.NoSuchElementException;
import org.apache.commons.pool2.ObjectPool;
+import org.apache.commons.pool2.UsageTracking;
public class ProxiedObjectPool<T> implements ObjectPool<T> {
@@ -34,11 +35,16 @@ public class ProxiedObjectPool<T> implem
// --------------------------------------------------- ObjectPool<T> methods
+ @SuppressWarnings("unchecked")
@Override
public T borrowObject() throws Exception, NoSuchElementException,
IllegalStateException {
+ UsageTracking<T> usageTracking = null;
+ if (pool instanceof UsageTracking) {
+ usageTracking = (UsageTracking<T>) pool;
+ }
T pooledObject = pool.borrowObject();
- T proxy = proxySource.createProxy(pooledObject);
+ T proxy = proxySource.createProxy(pooledObject, usageTracking);
return proxy;
}
Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxySource.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxySource.java?rev=1531293&r1=1531292&r2=1531293&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxySource.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/ProxySource.java Fri Oct 11 13:34:23 2013
@@ -16,7 +16,9 @@
*/
package org.apache.commons.pool2.proxy;
+import org.apache.commons.pool2.UsageTracking;
+
interface ProxySource<T> {
- T createProxy(T pooledObject);
+ T createProxy(T pooledObject, UsageTracking<T> usageTracking);
T resolveProxy(T proxy);
}