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();

Reply via email to