Author: sandymac
Date: Fri Mar 24 23:00:41 2006
New Revision: 388715

URL: http://svn.apache.org/viewcvs?rev=388715&view=rev
Log:
Fixed a bug where the InvalidEvictorLender didn't properly unwrap
objects before passing them to the PoolableObjectFactory.

Modified:
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/InvalidEvictorLender.java
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Lender.java
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java?rev=388715&r1=388714&r2=388715&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
 Fri Mar 24 23:00:41 2006
@@ -130,7 +130,7 @@
      * This is designed to mimick the [EMAIL PROTECTED] Reference} api.
      * The only reason a [EMAIL PROTECTED] Reference} subclass isn't used is 
there is no "StrongReference" implementation.
      */
-    protected interface EvictorReference {
+    protected interface EvictorReference extends LenderReference {
         /**
          * Returns this evictor reference's referent.
          *

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/InvalidEvictorLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/InvalidEvictorLender.java?rev=388715&r1=388714&r2=388715&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/InvalidEvictorLender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/InvalidEvictorLender.java
 Fri Mar 24 23:00:41 2006
@@ -144,16 +144,23 @@
 
                 final PoolableObjectFactory factory = 
getObjectPool().getFactory();
                 synchronized(getObjectPool().getPool()) {
-                    if (referant == null) {
+                    // Unwrap any LenderReferences
+                    Object r = referant;
+                    while (r instanceof LenderReference) {
+                        r = ((LenderReference)r).get();
+                    }
+
+                    if (r == null) {
                         cancel();
                         return;
                     }
+
                     try {
-                        factory.activateObject(referant);
-                        if (factory.validateObject(referant)) {
-                            factory.passivateObject(referant);
+                        factory.activateObject(r);
+                        if (factory.validateObject(r)) {
+                            factory.passivateObject(r);
                         } else {
-                            factory.destroyObject(referant);
+                            factory.destroyObject(r);
                             clear();
                         }
                     } catch (Exception e) {

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Lender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Lender.java?rev=388715&r1=388714&r2=388715&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Lender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Lender.java
 Fri Mar 24 23:00:41 2006
@@ -17,6 +17,7 @@
 package org.apache.commons.pool.composite;
 
 import java.util.ListIterator;
+import java.lang.ref.Reference;
 
 /**
  * Handles how idle objects are added and removed from the idle object pool.
@@ -75,4 +76,14 @@
      * @return the size of the idle object pool the lender is accessing.
      */
     public int size();
+
+    /**
+     * Like a [EMAIL PROTECTED] Reference} but allows a "strong reference".
+     */
+    interface LenderReference {
+        /**
+         * Like [EMAIL PROTECTED] Reference#get}.
+         */
+        public Object get();
+    }
 }

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java?rev=388715&r1=388714&r2=388715&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
 Fri Mar 24 23:00:41 2006
@@ -21,6 +21,7 @@
 import java.io.Serializable;
 import java.lang.ref.Reference;
 import java.lang.ref.SoftReference;
+import java.lang.ref.ReferenceQueue;
 import java.util.Iterator;
 import java.util.ListIterator;
 
@@ -54,7 +55,7 @@
      * @return a previously idle object.
      */
     public Object borrow() {
-        return ((Reference)super.borrow()).get();
+        return ((LenderReference)super.borrow()).get();
     }
 
     /**
@@ -64,7 +65,7 @@
      * @param obj the object to return to the idle object pool.
      */
     public void repay(final Object obj) {
-        super.repay(new SoftReference(obj));
+        super.repay(new SoftLenderReference(obj));
     }
 
     /**
@@ -99,6 +100,18 @@
 
     public String toString() {
         return "Soft{" + super.toString() + "}";
+    }
+
+    /**
+     * Make a [EMAIL PROTECTED] SoftReference} implement [EMAIL PROTECTED] 
LenderReference}.
+     */
+    private static class SoftLenderReference extends SoftReference implements 
LenderReference {
+        public SoftLenderReference(Object referent) {
+            super(referent);
+        }
+        public SoftLenderReference(Object referent, ReferenceQueue q) {
+            super(referent, q);
+        }
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to