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 2012/07/23 10:05:55 UTC

[2/2] git commit: WICKET-4663 LazyInitProxyFactory uses wrong ClassLoader in OSGi environment

WICKET-4663 LazyInitProxyFactory uses wrong ClassLoader in OSGi environment


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9dda5dce
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9dda5dce
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9dda5dce

Branch: refs/heads/master
Commit: 9dda5dce7889de626b5c44ea22390451828879a2
Parents: 325049d
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Jul 23 11:03:35 2012 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Jul 23 11:03:35 2012 +0300

----------------------------------------------------------------------
 .../wicket/application/AbstractClassResolver.java  |    7 -----
 .../wicket/application/CompoundClassResolver.java  |   19 +++++++++++++
 .../wicket/application/DefaultClassResolver.java   |    2 +-
 .../apache/wicket/application/IClassResolver.java  |    6 ++++
 .../apache/wicket/proxy/LazyInitProxyFactory.java  |   21 ++++++++++++--
 5 files changed, 44 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/9dda5dce/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java b/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java
index dbd4fe2..e2a4997 100644
--- a/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java
+++ b/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java
@@ -117,13 +117,6 @@ public abstract class AbstractClassResolver implements IClassResolver
 		return clazz;
 	}
 
-	/**
-	 * Returns the {@link ClassLoader} to be used for resolving classes
-	 * 
-	 * @return the {@link ClassLoader} to be used for resolving classes
-	 */
-	protected abstract ClassLoader getClassLoader();
-
 	@Override
 	public Iterator<URL> getResources(final String name)
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/9dda5dce/wicket-core/src/main/java/org/apache/wicket/application/CompoundClassResolver.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/application/CompoundClassResolver.java b/wicket-core/src/main/java/org/apache/wicket/application/CompoundClassResolver.java
index 8a39a9c..f73bae3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/application/CompoundClassResolver.java
+++ b/wicket-core/src/main/java/org/apache/wicket/application/CompoundClassResolver.java
@@ -109,6 +109,25 @@ public class CompoundClassResolver implements IClassResolver
 	}
 
 	/**
+	 * @return the class loader returned by the first registered IClassResolver. If there is no
+	 *  registered IClassResolver then the current thread's context class loader will be returned.
+	 */
+	@Override
+	public ClassLoader getClassLoader()
+	{
+		final ClassLoader classLoader;
+		if (resolvers.isEmpty() == false)
+		{
+			classLoader = resolvers.iterator().next().getClassLoader();
+		}
+		else
+		{
+			classLoader = Thread.currentThread().getContextClassLoader();
+		}
+		return classLoader;
+	}
+
+	/**
 	 * Adds a resolver
 	 * 
 	 * @param resolver

http://git-wip-us.apache.org/repos/asf/wicket/blob/9dda5dce/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java b/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
index e83e417..eb9fe7d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
+++ b/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
@@ -34,7 +34,7 @@ public final class DefaultClassResolver extends AbstractClassResolver
 	 *         {@link ClassLoader} that was used to load this class.
 	 */
 	@Override
-	protected ClassLoader getClassLoader()
+	public ClassLoader getClassLoader()
 	{
 		ClassLoader loader = Thread.currentThread().getContextClassLoader();
 		if (loader == null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/9dda5dce/wicket-core/src/main/java/org/apache/wicket/application/IClassResolver.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/application/IClassResolver.java b/wicket-core/src/main/java/org/apache/wicket/application/IClassResolver.java
index c7e9cf9..6fcfe04 100644
--- a/wicket-core/src/main/java/org/apache/wicket/application/IClassResolver.java
+++ b/wicket-core/src/main/java/org/apache/wicket/application/IClassResolver.java
@@ -47,4 +47,10 @@ public interface IClassResolver
 	 */
 	Iterator<URL> getResources(String name);
 
+	/**
+	 * Returns the {@link ClassLoader} to be used for resolving classes
+	 *
+	 * @return the {@link ClassLoader} to be used for resolving classes
+	 */
+	ClassLoader getClassLoader();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/9dda5dce/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java
----------------------------------------------------------------------
diff --git a/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java b/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java
index c23ddfd..94a2875 100644
--- a/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java
+++ b/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java
@@ -30,10 +30,12 @@ import net.sf.cglib.core.Predicate;
 import net.sf.cglib.proxy.Enhancer;
 import net.sf.cglib.proxy.MethodInterceptor;
 import net.sf.cglib.proxy.MethodProxy;
-import org.apache.wicket.util.io.IClusterable;
+import org.apache.wicket.Application;
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.model.IModel;
+import org.apache.wicket.application.IClassResolver;
 import org.apache.wicket.core.util.lang.WicketObjects;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.io.IClusterable;
 
 /**
  * A factory class that creates lazy init proxies given a type and a {@link IProxyTargetLocator}
@@ -135,7 +137,20 @@ public class LazyInitProxyFactory
 
 			try
 			{
-				return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+				ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+				if (Application.exists())
+				{
+					IClassResolver classResolver = (IClassResolver) Application.get()
+							.getApplicationSettings()
+							.getClassResolver();
+
+					if (classResolver != null)
+					{
+						classLoader = classResolver.getClassLoader();
+					}
+				}
+
+				return Proxy.newProxyInstance(classLoader,
 					new Class[] { type, Serializable.class, ILazyInitProxy.class,
 							IWriteReplace.class }, handler);
 			}