You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/02/02 10:05:45 UTC
tomee git commit: restoring our old ear behavior (ie load from parent
if existing) which was broken with recent changes
Repository: tomee
Updated Branches:
refs/heads/tomee-1.7.x 1968f9b33 -> d0962bcfc
restoring our old ear behavior (ie load from parent if existing) which was broken with recent changes
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/d0962bcf
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/d0962bcf
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/d0962bcf
Branch: refs/heads/tomee-1.7.x
Commit: d0962bcfcdf6fd2ae3718131466ed1f544548479
Parents: 1968f9b
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon Feb 2 10:05:10 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Mon Feb 2 10:05:10 2015 +0100
----------------------------------------------------------------------
.../catalina/LazyStopWebappClassLoader.java | 47 ++++++++++++--------
1 file changed, 28 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/d0962bcf/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
index 672cd66..acae088 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
@@ -150,13 +150,11 @@ public class LazyStopWebappClassLoader extends WebappClassLoader {
if (isEar) {
final boolean filter = filter(name);
filterTempCache.put(name, filter); // will be called again by super.loadClass() so cache it
- if (!filter && wouldBeLoadedFromContainer(name)) {
- setDelegate(false);
- try {
- return super.loadClass(name);
- } finally {
- filterTempCache.remove(name); // no more needed since class is loaded, avoid to waste mem
- setDelegate(originalDelegate);
+ if (!filter) {
+ if (isTheSame(name, getParent(), containerClassLoader, false, false)) {
+ return loadWithDelegate(false, name);
+ } else if (isTheSame(name, getParent(), this, true, originalDelegate)) {
+ return loadWithDelegate(true, name);
}
}
}
@@ -166,27 +164,38 @@ public class LazyStopWebappClassLoader extends WebappClassLoader {
}
}
- private boolean wouldBeLoadedFromContainer(final String name) {
+ private Class<?> loadWithDelegate(final boolean delegate, final String name) throws ClassNotFoundException {
+ setDelegate(delegate);
+ try {
+ return super.loadClass(name);
+ } finally {
+ filterTempCache.remove(name); // no more needed since class is loaded, avoid to waste mem
+ setDelegate(originalDelegate);
+ }
+ }
+
+ // NOTE: valueIfExistingInBoth should be removed but we need to work really more to make it a reality
+ private boolean isTheSame(final String name, final ClassLoader c1, final ClassLoader c2, final Boolean valueIfExistingInBoth, final boolean defaultValue) {
final String resource = name.replace('.', '/') + CLASS_EXTENSION;
- final URL containerUrl = containerClassLoader.getResource(resource);
- if (containerUrl == null) {
- return false;
+ final URL u1 = c1.getResource(resource);
+ if (u1 == null) {
+ return defaultValue;
}
-
- final URL parentUrl = getParent().getResource(resource);
- if (parentUrl == null) {
- return false;
+ final URL u2 = c2.getResource(resource);
+ if (u2 == null) {
+ return defaultValue;
+ }
+ if (valueIfExistingInBoth != null) {
+ return valueIfExistingInBoth;
}
try {
- return URLs.toFile(parentUrl).getCanonicalPath().equalsIgnoreCase(URLs.toFile(containerUrl).getCanonicalPath());
+ return URLs.toFile(u2).getCanonicalPath().equalsIgnoreCase(URLs.toFile(u1).getCanonicalPath());
} catch (final IOException e) {
- return false;
+ return defaultValue;
}
}
-
-
@Override
protected boolean filter(final String name) {
if ("org.apache.tomee.mojarra.TomEEInjectionProvider".equals(name)) {