You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sa...@apache.org on 2006/03/25 08:00:42 UTC
svn commit: r388715 - in
/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite:
EvictorLender.java InvalidEvictorLender.java Lender.java SoftLender.java
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 {@link Reference} api.
* The only reason a {@link 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 {@link Reference} but allows a "strong reference".
+ */
+ interface LenderReference {
+ /**
+ * Like {@link 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 {@link SoftReference} implement {@link 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: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org