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


Reply via email to