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);
 }