Author: almaw Date: Mon Jun 18 04:05:10 2007 New Revision: 548314 URL: http://svn.apache.org/viewvc?view=rev&rev=548314 Log: WICKET-625 - Wicket doesn't clean up properly when hot-deploying; hangs onto Class references. (partial fix, work in progress)
Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java?view=diff&rev=548314&r1=548313&r2=548314 ============================================================================== --- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java (original) +++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/BookmarkablePageRequestTargetUrlCodingStrategy.java Mon Jun 18 04:05:10 2007 @@ -16,6 +16,8 @@ */ package org.apache.wicket.request.target.coding; +import java.lang.ref.WeakReference; + import org.apache.wicket.IRequestTarget; import org.apache.wicket.PageParameters; import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; @@ -35,7 +37,7 @@ AbstractRequestTargetUrlCodingStrategy { /** bookmarkable page class. */ - protected final Class bookmarkablePageClass; + protected final WeakReference/*<Class>*/ bookmarkablePageClassRef; /** page map name. */ private final String pageMapName; @@ -60,7 +62,7 @@ throw new IllegalArgumentException("Argument bookmarkablePageClass must be not null"); } - this.bookmarkablePageClass = bookmarkablePageClass; + this.bookmarkablePageClassRef = new WeakReference(bookmarkablePageClass); this.pageMapName = pageMapName; } @@ -93,12 +95,12 @@ { WebRequestCodingStrategy.addInterfaceParameters(interfaceParameter, requestParameters); return new BookmarkableListenerInterfaceRequestTarget(pageMapName, - bookmarkablePageClass, parameters, requestParameters.getComponentPath(), + (Class)bookmarkablePageClassRef.get(), parameters, requestParameters.getComponentPath(), requestParameters.getInterfaceName()); } else { - return new BookmarkablePageRequestTarget(pageMapName, bookmarkablePageClass, parameters); + return new BookmarkablePageRequestTarget(pageMapName, (Class)bookmarkablePageClassRef.get(), parameters); } } @@ -138,7 +140,7 @@ if (requestTarget instanceof IBookmarkablePageRequestTarget) { IBookmarkablePageRequestTarget target = (IBookmarkablePageRequestTarget)requestTarget; - if (bookmarkablePageClass.equals(target.getPageClass())) + if (((Class)bookmarkablePageClassRef.get()).equals(target.getPageClass())) { if (this.pageMapName == null) { @@ -158,6 +160,6 @@ */ public String toString() { - return "BookmarkablePageEncoder[page=" + bookmarkablePageClass + "]"; + return "BookmarkablePageEncoder[page=" + (Class)bookmarkablePageClassRef.get() + "]"; } } Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java?view=diff&rev=548314&r1=548313&r2=548314 ============================================================================== --- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java (original) +++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/QueryStringUrlCodingStrategy.java Mon Jun 18 04:05:10 2007 @@ -153,12 +153,12 @@ // This might be a request to a stateless page, so check for an interface name. if (requestParameters.getInterfaceName() != null) { return new BookmarkableListenerInterfaceRequestTarget(pageMapName, - bookmarkablePageClass, parameters, requestParameters.getComponentPath(), + (Class)bookmarkablePageClassRef.get(), parameters, requestParameters.getComponentPath(), requestParameters.getInterfaceName()); } else { - return new BookmarkablePageRequestTarget(pageMapName, bookmarkablePageClass, parameters); + return new BookmarkablePageRequestTarget(pageMapName, (Class)bookmarkablePageClassRef.get(), parameters); } } Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java?view=diff&rev=548314&r1=548313&r2=548314 ============================================================================== --- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java (original) +++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java Mon Jun 18 04:05:10 2007 @@ -16,6 +16,8 @@ */ package org.apache.wicket.request.target.component; +import java.lang.ref.WeakReference; + import org.apache.wicket.IPageFactory; import org.apache.wicket.Page; import org.apache.wicket.PageParameters; @@ -36,7 +38,7 @@ private Page page; /** the class of the page. */ - private final Class pageClass; + private final WeakReference/*<Class>*/ pageClassRef; /** optional page map name. */ private final String pageMapName; @@ -105,7 +107,7 @@ throw new IllegalArgumentException("Argument pageClass must be an instance of " + Page.class.getName()); } - this.pageClass = pageClass; + this.pageClassRef = new WeakReference(pageClass); this.pageParameters = (pageParameters == null) ? new PageParameters() : pageParameters; this.pageMapName = pageMapName; } @@ -130,7 +132,7 @@ if (obj != null && (obj instanceof BookmarkablePageRequestTarget)) { BookmarkablePageRequestTarget that = (BookmarkablePageRequestTarget)obj; - if (pageClass.equals(that.pageClass)) + if (getPageClass().equals(that.getPageClass())) { boolean mapMatch = false; @@ -163,7 +165,7 @@ */ public final Class getPageClass() { - return pageClass; + return (Class)pageClassRef.get(); } /** @@ -188,7 +190,7 @@ public int hashCode() { int result = "BookmarkablePageRequestTarget".hashCode(); - result += pageClass.hashCode(); + result += getPageClass().hashCode(); result += pageMapName != null ? pageMapName.hashCode() : 0; return 17 * result; } @@ -209,7 +211,7 @@ */ public void respond(RequestCycle requestCycle) { - if (pageClass != null) + if (pageClassRef != null && pageClassRef.get() != null) { if (requestCycle.isRedirect()) { @@ -230,7 +232,7 @@ */ public String toString() { - return "[BookmarkablePageRequestTarget@" + hashCode() + " pageClass=" + pageClass.getName() + return "[BookmarkablePageRequestTarget@" + hashCode() + " pageClass=" + getPageClass().getName() + "]"; } @@ -270,9 +272,9 @@ */ protected final Page getPage(RequestCycle requestCycle) { - if (page == null && pageClass != null && !requestCycle.isRedirect()) + if (page == null && !requestCycle.isRedirect()) { - page = newPage(pageClass, requestCycle); + page = newPage(getPageClass(), requestCycle); } return page; }