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