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]