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