Repository: tomee Updated Branches: refs/heads/tomee-1.7.x 7a8c8aa8d -> 0f4e4d45d
TOMEE-1448 keep container classes in CDI context Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/0f4e4d45 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/0f4e4d45 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/0f4e4d45 Branch: refs/heads/tomee-1.7.x Commit: 0f4e4d45dc891d4797888e410f3a6c8cc8d86187 Parents: 7a8c8aa Author: Romain Manni-Bucau <[email protected]> Authored: Tue Nov 18 15:14:48 2014 +0100 Committer: Romain Manni-Bucau <[email protected]> Committed: Tue Nov 18 15:14:48 2014 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/openejb/cdi/CdiScanner.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/0f4e4d45/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java index e5705d6..ca2970d 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java @@ -22,6 +22,7 @@ import org.apache.openejb.BeanContext; import org.apache.openejb.assembler.classic.AppInfo; import org.apache.openejb.assembler.classic.BeansInfo; import org.apache.openejb.assembler.classic.EjbJarInfo; +import org.apache.openejb.core.ParentClassLoaderFinder; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.util.PropertyPlaceHolderHelper; import org.apache.openejb.util.classloader.ClassLoaderComparator; @@ -69,6 +70,7 @@ public class CdiScanner implements ScannerService { } // TODO add all annotated class + private ClassLoader containerLoader; private final Set<Class<?>> classes = new HashSet<Class<?>>(); @Override @@ -76,6 +78,7 @@ public class CdiScanner implements ScannerService { if (!StartupObject.class.isInstance (object)) { return; } + containerLoader = ParentClassLoaderFinder.Helper.get(); final StartupObject startupObject = StartupObject.class.cast(object); final AppInfo appInfo = startupObject.getAppInfo(); @@ -245,11 +248,18 @@ public class CdiScanner implements ScannerService { return; } + final boolean isNotEarWebApp = startupObject.getWebContext() == null; final ClassLoader cl = clazz.getClassLoader(); + // 1. this classloader is the good one // 2. the classloader is the appclassloader one and we are in the ear parent + // 3. it is a container class so if it is here it is designed + // + // main case it tries to filter is ear one ie lib classes shouldn't be in webapp classes + // but embedded other cases should still work if (!filterByClassLoader - || comparator.isSame(cl) || cl.equals(scl) && startupObject.getWebContext() == null) { + || comparator.isSame(cl) + || ((cl.equals(scl) || cl == containerLoader) && isNotEarWebApp)) { classes.add(clazz); } else { it.remove();
