You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2010/10/24 10:53:18 UTC

svn commit: r1026749 - /wicket/trunk/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java

Author: mgrigorov
Date: Sun Oct 24 08:53:18 2010
New Revision: 1026749

URL: http://svn.apache.org/viewvc?rev=1026749&view=rev
Log:
Rollback the synchronization on DefaultClassResolver#classes. It seems it is needed to load only one class at a time, not to synchronize the map access.

See http://apache-wicket.1842946.n4.nabble.com/Re-svn-commit-r1026650-wicket-trunk-wicket-src-main-java-org-apache-wicket-application-DefaultClassRa-td3008647.html#a3008647

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java?rev=1026749&r1=1026748&r2=1026749&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/application/DefaultClassResolver.java Sun Oct 24 08:53:18 2010
@@ -101,19 +101,23 @@ public final class DefaultClassResolver 
 			}
 			else
 			{
-				ClassLoader loader = Thread.currentThread().getContextClassLoader();
-				if (loader == null)
+				// synchronize on the only class member to load only one class at a time and
+				// prevent LinkageError. See above for more info
+				synchronized (classes)
 				{
-					loader = DefaultClassResolver.class.getClassLoader();
+					ClassLoader loader = Thread.currentThread().getContextClassLoader();
+					if (loader == null)
+					{
+						loader = DefaultClassResolver.class.getClassLoader();
+					}
+					// see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6500212
+					// clazz = loader.loadClass(classname);
+					clazz = Class.forName(classname, false, loader);
+					if (clazz == null)
+					{
+						throw new ClassNotFoundException(classname);
+					}
 				}
-				// see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6500212
-				// clazz = loader.loadClass(classname);
-				clazz = Class.forName(classname, false, loader);
-				if (clazz == null)
-				{
-					throw new ClassNotFoundException(classname);
-				}
-
 				classes.put(classname, new WeakReference<Class<?>>(clazz));
 			}
 		}