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 2013/10/09 10:37:44 UTC

svn commit: r1530527 - /tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java

Author: rmannibucau
Date: Wed Oct  9 08:37:43 2013
New Revision: 1530527

URL: http://svn.apache.org/r1530527
Log:
TOMEE-1053 @HandlesTypes support - no more linking but enableFindImplementations/enableFindSubclasses

Modified:
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1530527&r1=1530526&r2=1530527&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java Wed Oct  9 08:37:43 2013
@@ -416,11 +416,8 @@ public class OpenEJBContextConfig extend
 
             if (typeInitializerMap.size() > 0 && finder != null) {
                 final ClassLoader loader = context.getLoader().getClassLoader();
-                if (handlesTypesNonAnnotations) {
-                    if (AnnotationFinder.class.isInstance(finder)) {
-                        AnnotationFinder.class.cast(finder).link();
-                    }
-                }
+                boolean foundSubClasses = false;
+                boolean foundImplementations = false;
 
                 for (final Map.Entry<Class<?>, Set<ServletContainerInitializer>> entry : typeInitializerMap.entrySet()) {
                     final Class<?> annotation = entry.getKey();
@@ -435,6 +432,19 @@ public class OpenEJBContextConfig extend
                         } else {
                             try { // we need to load the class (entry.getKey()) with the finder classloader = tempClassLoader otherwise isAssignable is false in almost all cases
                                 logger.info("Using @HandlesTypes on a parent class (and not an annotation) is a performance killer. See " + annotation.getName() + " on " + sci.getClass().getName());
+                                if (AnnotationFinder.class.isInstance(finder)) {
+                                    if (annotation.isInterface()) {
+                                        if (!foundImplementations) {
+                                            AnnotationFinder.class.cast(finder).enableFindImplementations();
+                                            foundImplementations = true;
+                                        }
+                                    } else {
+                                        if (!foundSubClasses) {
+                                            AnnotationFinder.class.cast(finder).enableFindSubclasses();
+                                            foundSubClasses = true;
+                                        }
+                                    }
+                                }
 
                                 final Class<?> reloadedClass = tempLoader.loadClass(annotation.getName());
                                 final List<Class<?>> implementations = List.class.cast(finder.findImplementations(reloadedClass));