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 2014/08/11 07:28:04 UTC

svn commit: r1617204 - in /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb: config/FinderFactory.java testing/ApplicationComposers.java

Author: rmannibucau
Date: Mon Aug 11 05:28:03 2014
New Revision: 1617204

URL: http://svn.apache.org/r1617204
Log:
we need a finder test oriented

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java?rev=1617204&r1=1617203&r2=1617204&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java Mon Aug 11 05:28:03 2014
@@ -18,6 +18,8 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.jee.Beans;
+import org.apache.openejb.jee.EnterpriseBean;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.xbean.finder.Annotated;
 import org.apache.xbean.finder.AnnotationFinder;
@@ -37,9 +39,12 @@ import java.lang.reflect.Method;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 
+import static org.apache.openejb.util.Classes.ancestors;
+
 public class FinderFactory {
 
     private static final FinderFactory factory = new FinderFactory();
@@ -94,13 +99,72 @@ public class FinderFactory {
             }
             finder.link();
         } else {
-            // TODO: error. Here it means we'll not find anything
-            finder = new AnnotationFinder(new ClassesArchive());
+            // TODO: error. Here it means we'll not find anything so helping a bit (if you hit it outside a test fix it)
+            finder = new AnnotationFinder(new ClassesArchive(ensureMinimalClasses(module)));
         }
 
         return MODULE_LIMITED ? new ModuleLimitedFinder(finder) : finder;
     }
 
+    private Class<?>[] ensureMinimalClasses(final DeploymentModule module) {
+        if (EjbModule.class.isInstance(module)) {
+            final Collection<Class<?>> finderClasses = new HashSet<>();
+
+            final EjbModule ejb = EjbModule.class.cast(module);
+            final EnterpriseBean[] enterpriseBeans = ejb.getEjbJar().getEnterpriseBeans();
+
+            ClassLoader classLoader = ejb.getClassLoader();
+            if (classLoader == null) {
+                classLoader = Thread.currentThread().getContextClassLoader();
+            }
+
+            for (final EnterpriseBean bean : enterpriseBeans) {
+                try {
+                    finderClasses.addAll(ancestors(classLoader.loadClass(bean.getEjbClass())));
+                } catch (final ClassNotFoundException e) {
+                    // no-op
+                }
+            }
+
+            final Beans beans = ejb.getBeans();
+            if (beans != null && ejb.getEjbJar() != null) {
+                for (final List<String> managedClasses : beans.getManagedClasses().values()) {
+                    for (final String name : managedClasses) {
+                        try {
+                            finderClasses.addAll(ancestors(classLoader.loadClass(name)));
+                        } catch (final ClassNotFoundException e) {
+                            // no-op
+                        }
+                    }
+                }
+                for (final String name : beans.getInterceptors()) {
+                    try {
+                        finderClasses.addAll(ancestors(classLoader.loadClass(name)));
+                    } catch (final ClassNotFoundException e) {
+                        // no-op
+                    }
+                }
+                for (final String name : beans.getAlternativeClasses()) {
+                    try {
+                        finderClasses.addAll(ancestors(classLoader.loadClass(name)));
+                    } catch (final ClassNotFoundException e) {
+                        // no-op
+                    }
+                }
+                for (final String name : beans.getDecorators()) {
+                    try {
+                        finderClasses.addAll(ancestors(classLoader.loadClass(name)));
+                    } catch (final ClassNotFoundException e) {
+                        // no-op
+                    }
+                }
+            }
+
+            return finderClasses.toArray(new Class<?>[finderClasses.size()]);
+        }
+        return new Class<?>[0];
+    }
+
     private static AnnotationFinder newFinder(final Archive archive) {
         return new OpenEJBAnnotationFinder(archive);
     }

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1617204&r1=1617203&r2=1617204&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Mon Aug 11 05:28:03 2014
@@ -98,7 +98,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -637,17 +636,8 @@ public final class ApplicationComposers 
 
         // copy ejb into beans if cdi is activated and init finder
         for (final EjbModule ejb : appModule.getEjbModules()) {
-            final Collection<Class<?>> finderClasses = new HashSet<>();
-
             final EnterpriseBean[] enterpriseBeans = ejb.getEjbJar().getEnterpriseBeans();
 
-            final boolean noFinder= ejb.getFinder() == null;
-            if (noFinder) {
-                for (final EnterpriseBean bean : enterpriseBeans) {
-                    finderClasses.add(loader.loadClass(bean.getEjbClass()));
-                }
-            }
-
             final Beans beans = ejb.getBeans();
             if (beans != null && ejb.getEjbJar() != null) {
                 for (final EnterpriseBean bean : enterpriseBeans) {
@@ -663,18 +653,6 @@ public final class ApplicationComposers 
                         beans.addManagedClass(bean.getEjbClass());
                     }
                 }
-
-                if (noFinder) {
-                    for (final List<String> managedClasses : beans.getManagedClasses().values()) {
-                        for (final String name : managedClasses) {
-                            finderClasses.add(loader.loadClass(name));
-                        }
-                    }
-                }
-            }
-
-            if (noFinder) {
-                ejb.setFinder(new FinderFactory.OpenEJBAnnotationFinder(new ClassesArchive(finderClasses.toArray(new Class<?>[finderClasses.size()]))));
             }
         }