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 2012/03/23 09:54:27 UTC

svn commit: r1304236 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/config/ tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ t...

Author: rmannibucau
Date: Fri Mar 23 08:54:26 2012
New Revision: 1304236

URL: http://svn.apache.org/viewvc?rev=1304236&view=rev
Log:
skipping myfaces scanning

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java Fri Mar 23 08:54:26 2012
@@ -16,7 +16,11 @@
  */
 package org.apache.openejb.assembler.classic;
 
+import java.util.Map;
+import java.util.Set;
+
 public interface WebAppBuilder {
     void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws Exception;
     void undeployWebApps(AppInfo appInfo) throws Exception;
+    public Map<ClassLoader, Map<String, Set<String>>> getJsfClasses();
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java Fri Mar 23 08:54:26 2012
@@ -16,6 +16,8 @@
  */
 package org.apache.openejb.assembler.classic;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.List;
@@ -38,4 +40,5 @@ public class WebAppInfo extends CommonIn
     public final List<PortInfo> portInfos = new ArrayList<PortInfo>();
     public final JndiEncInfo jndiEnc = new JndiEncInfo();
     public final List<ServletInfo> servlets = new ArrayList<ServletInfo>();
+    public final Map<String, Set<String>> jsfAnnotatedClasses = new HashMap<String, Set<String>>();
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Fri Mar 23 08:54:26 2012
@@ -237,6 +237,16 @@ public class AnnotationDeployer implemen
     public static final Logger startupLogger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, "org.apache.openejb.util.resources");
     private static final ThreadLocal<DeploymentModule> currentModule = new ThreadLocal<DeploymentModule>();
     private static final Set<String> lookupMissing = new HashSet<String>(2);
+    private static final String[] JSF_CLASSES = new String[] {
+            "javax.faces.bean.ManagedBean",
+            "javax.faces.component.FacesComponent",
+            "javax.faces.component.behavior.FacesBehavior",
+            "javax.faces.convert.FacesConverter",
+            "javax.faces.event.NamedEvent",
+            "javax.faces.render.FacesBehaviorRenderer",
+            "javax.faces.render.FacesRenderer",
+            "javax.faces.validator.FacesValidator"
+    };
 
     public static final Set<String> knownResourceEnvTypes = new TreeSet<String>(asList(
             "javax.ejb.EJBContext",
@@ -1035,6 +1045,26 @@ public class AnnotationDeployer implemen
                 }
             }
 
+            /*
+             * JSF
+             */
+            final ClassLoader classLoader = webModule.getClassLoader();
+            for (String jsfClass : JSF_CLASSES) {
+                final Class<? extends Annotation> clazz;
+                try {
+                    clazz = (Class<? extends Annotation>) classLoader.loadClass(jsfClass);
+                } catch (ClassNotFoundException e) {
+                    continue;
+                }
+
+                final List<Annotated<Class<?>>> found = finder.findMetaAnnotatedClasses(clazz);
+                final Set<String> convertedClasses = new HashSet<String>(found.size());
+                for (Annotated<Class<?>> annotated : found) {
+                    convertedClasses.add(annotated.get().getName());
+                }
+                webModule.getJsfAnnotatedClasses().put(jsfClass, convertedClasses);
+            }
+
             return webModule;
         }
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java Fri Mar 23 08:54:26 2012
@@ -318,6 +318,7 @@ class AppInfoBuilder {
             webAppInfo.restClass.addAll(webModule.getRestClasses());
             webAppInfo.ejbWebServices.addAll(webModule.getEjbWebServices());
             webAppInfo.ejbRestServices.addAll(webModule.getEjbRestServices());
+            webAppInfo.jsfAnnotatedClasses.putAll(webModule.getJsfAnnotatedClasses());
 
             webAppInfo.host = webModule.getHost();
             webAppInfo.contextRoot = webModule.getContextRoot();

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java Fri Mar 23 08:54:26 2012
@@ -23,9 +23,7 @@ import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.xbean.finder.Annotated;
 import org.apache.xbean.finder.AnnotationFinder;
@@ -36,7 +34,6 @@ import org.apache.xbean.finder.archive.C
 public class FinderFactory {
 
     private static final FinderFactory factory = new FinderFactory();
-    private static final Map<ClassLoader, IAnnotationFinder> FINDERS = new HashMap<ClassLoader, IAnnotationFinder>();
 
     private static FinderFactory get() {
         FinderFactory factory = SystemInstance.get().getComponent(FinderFactory.class);
@@ -51,13 +48,6 @@ public class FinderFactory {
         return new AnnotationFinder(ClasspathArchive.archive(classLoader, url));
     }
 
-    public static IAnnotationFinder getFinder(final ClassLoader classLoader) {
-        if (FINDERS.containsKey(classLoader)) {
-            return FINDERS.get(classLoader);
-        }
-        return null; // means not found, another method should be called to built it
-    }
-
     public IAnnotationFinder create(DeploymentModule module) throws Exception {
         IAnnotationFinder finder;
         if (module instanceof WebModule) {
@@ -91,7 +81,6 @@ public class FinderFactory {
             finder = new AnnotationFinder(new ClassesArchive()).link();
         }
 
-        FINDERS.put(module.getClassLoader(), finder);
         return new ModuleLimitedFinder(finder);
     }
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java Fri Mar 23 08:54:26 2012
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
-
 import org.apache.openejb.jee.FacesConfig;
 import org.apache.openejb.jee.TldTaglib;
 import org.apache.openejb.jee.WebApp;
@@ -51,6 +50,7 @@ public class WebModule extends Module im
     private final Set<String> ejbWebServices = new TreeSet<String>();
     private final Set<String> ejbRestServices = new TreeSet<String>();
     private final Set<String> restApplications = new TreeSet<String>();
+    private final Map<String, Set<String>> jsfAnnotatedClasses = new HashMap<String, Set<String>>();
 
     private ID id;
     
@@ -195,4 +195,8 @@ public class WebModule extends Module im
     public void setScannableUrls(List<URL> scannableUrls) {
         this.scannableUrls = scannableUrls;
     }
+
+    public Map<String, Set<String>> getJsfAnnotatedClasses() {
+        return jsfAnnotatedClasses;
+    }
 }

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Fri Mar 23 08:54:26 2012
@@ -168,6 +168,8 @@ public class TomcatWebAppBuilder impleme
      */
     private CoreContainerSystem containerSystem;
 
+    private Map<ClassLoader, Map<String, Set<String>>> jsfClasses = new HashMap<ClassLoader, Map<String, Set<String>>>();
+
     /**
      * Creates a new web application builder
      * instance.
@@ -622,6 +624,9 @@ public class TomcatWebAppBuilder impleme
                 appContext = getContainerSystem().getAppContext(contextInfo.appInfo.appId);
             }
 
+            // save jsf stuff
+            jsfClasses.put(standardContext.getLoader().getClassLoader(), webAppInfo.jsfAnnotatedClasses);
+
             try {
 
                 // determine the injections
@@ -1296,4 +1301,8 @@ public class TomcatWebAppBuilder impleme
             return false;
         }
     }
+
+    public Map<ClassLoader, Map<String, Set<String>>> getJsfClasses() {
+        return jsfClasses;
+    }
 }

Modified: openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java (original)
+++ openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java Fri Mar 23 08:54:26 2012
@@ -1,55 +1,53 @@
 package org.apache.tomee.myfaces;
 
 import java.lang.annotation.Annotation;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import javax.faces.bean.ManagedBean;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.behavior.FacesBehavior;
 import javax.faces.context.ExternalContext;
-import javax.faces.convert.FacesConverter;
-import javax.faces.event.NamedEvent;
-import javax.faces.render.FacesBehaviorRenderer;
-import javax.faces.render.FacesRenderer;
-import javax.faces.validator.FacesValidator;
 import org.apache.myfaces.config.annotation.DefaultAnnotationProvider;
 import org.apache.myfaces.shared.util.ClassUtils;
-import org.apache.openejb.config.FinderFactory;
-import org.apache.xbean.finder.Annotated;
-import org.apache.xbean.finder.IAnnotationFinder;
+import org.apache.openejb.assembler.classic.WebAppBuilder;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 
 public class TomEEAnnotationProvider extends DefaultAnnotationProvider {
-    private static final Class<?>[] JSF_CLASSES = new Class<?>[] {
-            FacesComponent.class, FacesBehavior.class, FacesConverter.class,
-            FacesValidator.class, FacesRenderer.class, ManagedBean.class,
-            NamedEvent.class, FacesBehaviorRenderer.class
-    };
+    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, TomEEAnnotationProvider.class);
 
     @Override
     public Map<Class<? extends Annotation>, Set<Class<?>>> getAnnotatedClasses(final ExternalContext ctx) {
         final ClassLoader cl = getClassLoader();
-        final IAnnotationFinder finder = FinderFactory.getFinder(cl);
-        if (finder == null) { // our scanning is probably too slow compared to myfaces one
-            return super.getAnnotatedClasses(ctx);
-        }
-
+        final WebAppBuilder builder = SystemInstance.get().getComponent(WebAppBuilder.class);
         final Map<Class<? extends Annotation>,Set<Class<?>>> map = new HashMap<Class<? extends Annotation>, Set<Class<?>>>();
-        for (Class<?> clazz : JSF_CLASSES) {
-            map.put((Class<? extends Annotation>) clazz, scannedClasses(finder, clazz));
+        final Map<String, Set<String>> scanned = builder.getJsfClasses().get(cl);
+        if (scanned == null) {
+            return Collections.emptyMap();
         }
-        return map;
-    }
 
-    private Set<Class<?>> scannedClasses(final IAnnotationFinder finder, final Class<?> clazz) {
-        final Set<Class<?>> classes = new HashSet<Class<?>>();
-        final List<Annotated<Class<?>>> found = finder.findMetaAnnotatedClasses((Class<? extends Annotation>) clazz);
-        for (Annotated<Class<?>> foundClass : found) {
-            classes.add(foundClass.get());
+        for (Map.Entry<String, Set<String>> entry : scanned.entrySet()) {
+            final Class<? extends Annotation> annotation;
+            try {
+                annotation = (Class<? extends Annotation>) cl.loadClass(entry.getKey());
+            } catch (ClassNotFoundException e) {
+                continue;
+            }
+
+            final Set<String> list = entry.getValue();
+            final Set<Class<?>> annotated = new HashSet<Class<?>>(list.size());
+            for (String name : list) {
+                try {
+                    annotated.add(cl.loadClass(name));
+                } catch (ClassNotFoundException ignored) {
+                    LOGGER.warning("class '" + name + "' was found but can't be loaded as a JSF class");
+                }
+            }
+
+            map.put(annotation, annotated);
         }
-        return classes;
+        return map;
     }
 
     private ClassLoader getClassLoader() {