You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/03/13 21:45:41 UTC
[25/50] wicket git commit: WICKET-5850 Fix class loading issue in
LazyInitProxyFactory in case of multimodule deployment
WICKET-5850 Fix class loading issue in LazyInitProxyFactory in case of multimodule deployment
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/73b8ebf8
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/73b8ebf8
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/73b8ebf8
Branch: refs/heads/pr-86-media_tags
Commit: 73b8ebf87d6d21a72bfd9cd21a961e2b260f6591
Parents: 12d98aa
Author: Alexander Morozov <al...@gmail.com>
Authored: Fri Mar 6 00:16:59 2015 +0600
Committer: Sven Meier <sv...@apache.org>
Committed: Thu Mar 5 22:20:20 2015 +0100
----------------------------------------------------------------------
.../wicket/proxy/LazyInitProxyFactory.java | 65 ++++++++++++--------
1 file changed, 40 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/73b8ebf8/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 b4e821b..3df433b 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,9 +30,9 @@ 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.Application;
import org.apache.wicket.WicketRuntimeException;
-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;
@@ -137,20 +137,7 @@ public class LazyInitProxyFactory
try
{
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- if (Application.exists())
- {
- IClassResolver classResolver = Application.get()
- .getApplicationSettings()
- .getClassResolver();
-
- if (classResolver != null)
- {
- classLoader = classResolver.getClassLoader();
- }
- }
-
- return Proxy.newProxyInstance(classLoader,
+ return Proxy.newProxyInstance(resolveClassLoader(),
new Class[] { type, Serializable.class, ILazyInitProxy.class,
IWriteReplace.class }, handler);
}
@@ -173,25 +160,34 @@ public class LazyInitProxyFactory
CGLibInterceptor handler = new CGLibInterceptor(type, locator);
Enhancer e = new Enhancer();
+ e.setClassLoader(resolveClassLoader());
e.setInterfaces(new Class[] { Serializable.class, ILazyInitProxy.class,
IWriteReplace.class });
e.setSuperclass(type);
e.setCallback(handler);
- e.setNamingPolicy(new DefaultNamingPolicy()
- {
- @Override
- public String getClassName(final String prefix, final String source,
- final Object key, final Predicate names)
- {
- return super.getClassName("WICKET_" + prefix, source, key, names);
- }
- });
+ e.setNamingPolicy(WicketNamingPolicy.INSTANCE);
return e.create();
}
}
- /**
+ private static ClassLoader resolveClassLoader()
+ {
+ ClassLoader classLoader = null;
+ if (Application.exists())
+ {
+ classLoader = Application.get().getApplicationSettings()
+ .getClassResolver().getClassLoader();
+ }
+
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ }
+
+ return classLoader;
+ }
+
+ /**
* This interface is used to make the proxy forward writeReplace() call to the handler instead
* of invoking it on itself. This allows us to serialize the replacement object instead of the
* proxy itself in case the proxy subclass is deserialized on a VM that does not have it
@@ -524,4 +520,23 @@ public class LazyInitProxyFactory
return (method.getReturnType() == Object.class) &&
(method.getParameterTypes().length == 0) && method.getName().equals("writeReplace");
}
+
+ private static final class WicketNamingPolicy extends DefaultNamingPolicy
+ {
+
+ private static final WicketNamingPolicy INSTANCE = new WicketNamingPolicy();
+
+ private WicketNamingPolicy()
+ {
+ super();
+ }
+
+ @Override
+ public String getClassName(final String prefix, final String source, final Object key,
+ final Predicate names)
+ {
+ return super.getClassName("WICKET_" + prefix, source, key, names);
+ }
+ }
+
}