You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by al...@apache.org on 2007/06/18 12:25:26 UTC

svn commit: r548280 - /incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java

Author: almaw
Date: Mon Jun 18 03:25:17 2007
New Revision: 548280

URL: http://svn.apache.org/viewvc?view=rev&rev=548280
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/application/DefaultClassResolver.java

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java?view=diff&rev=548280&r1=548279&r2=548280
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java Mon Jun 18 03:25:17 2007
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.application;
 
+import java.lang.ref.WeakReference;
+
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.util.concurrent.ConcurrentReaderHashMap;
 
@@ -49,8 +51,14 @@
 	{
 		try
 		{
-			Class clz = (Class)classes.get(classname);
-			if (clz == null)
+			Class clazz = null;
+			WeakReference ref = (WeakReference)classes.get(classname);
+			// Might be garbage-collected between getting the WeakRef and retrieving the Class from it.
+			if (ref != null)
+			{
+				clazz = (Class)ref.get();
+			}
+			if (clazz == null)
 			{
 				synchronized (classes)
 				{
@@ -59,11 +67,11 @@
 					{
 						loader = DefaultClassResolver.class.getClassLoader();
 					}
-					clz = loader.loadClass(classname);
-					classes.put(classname, clz);
+					clazz = loader.loadClass(classname);
+					classes.put(classname, new WeakReference(clazz));
 				}
 			}
-			return clz;
+			return clazz;
 		}
 		catch (ClassNotFoundException ex)
 		{