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/08/10 19:21:31 UTC

svn commit: r1371773 - in /openejb/trunk/openejb/tomee: tomee-catalina/src/main/java/org/apache/tomee/catalina/ tomee-myfaces/src/main/java/org/apache/tomee/myfaces/

Author: rmannibucau
Date: Fri Aug 10 17:21:31 2012
New Revision: 1371773

URL: http://svn.apache.org/viewvc?rev=1371773&view=rev
Log:
caching MyFaces faces-config.xml resources to avoid to scan multiple times the same app

Added:
    openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContextListener.java
Modified:
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
    openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEFacesConfigResourceProvider.java

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1371773&r1=1371772&r2=1371773&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java Fri Aug 10 17:21:31 2012
@@ -44,6 +44,7 @@ public class OpenEJBContextConfig extend
 
     private static final String MYFACES_STARTUP_SERVLET_CONTEXT_LISTENER = "org.apache.myfaces.webapp.StartupServletContextListener";
     private static final String MYFACES_TOMEEM_CONTAINER_INITIALIZER = "org.apache.tomee.myfaces.TomEEMyFacesContainerInitializer";
+    private static final String TOMEE_MYFACES_CONTEXT_LISTENER = "org.apache.tomee.myfaces.TomEEMyFacesContextListener";
 
     private TomcatWebAppBuilder.StandardContextInfo info;
 
@@ -93,6 +94,7 @@ public class OpenEJBContextConfig extend
             if (!Arrays.asList(context.findApplicationListeners()).contains(MYFACES_STARTUP_SERVLET_CONTEXT_LISTENER)) {
                 context.addApplicationListener(MYFACES_STARTUP_SERVLET_CONTEXT_LISTENER);
             }
+            context.addApplicationListener(TOMEE_MYFACES_CONTEXT_LISTENER); // cleanup listener
         } catch (Exception ignored) {
             // no-op
         }

Modified: openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEFacesConfigResourceProvider.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEFacesConfigResourceProvider.java?rev=1371773&r1=1371772&r2=1371773&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEFacesConfigResourceProvider.java (original)
+++ openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEFacesConfigResourceProvider.java Fri Aug 10 17:21:31 2012
@@ -27,10 +27,11 @@ import javax.faces.context.ExternalConte
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
-import java.util.List;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.regex.Pattern;
@@ -40,12 +41,19 @@ public class TomEEFacesConfigResourcePro
     private static final String FACES_CONFIG_SUFFIX = ".faces-config.xml";
     private static final String FACES_CONFIG_IMPLICIT = "META-INF/faces-config.xml";
     private static final Pattern FILE_PATTERN = Pattern.compile("^.*" + Pattern.quote(FACES_CONFIG_SUFFIX) + "$");
+    private static final Map<ClassLoader, Collection<URL>> CACHED_RESOURCES = new HashMap<ClassLoader, Collection<URL>>();
 
     @Override
     public Collection<URL> getMetaInfConfigurationResources(final ExternalContext context) throws IOException {
-        final List<URL> urlSet = new ArrayList<URL>();
         final ClassLoader loader = getClassLoader();
 
+        Collection<URL> urlSet = CACHED_RESOURCES.get(loader);
+        if (urlSet != null) {
+            return urlSet;
+        }
+
+        urlSet  = new HashSet<URL>();
+
         final Enumeration<URL> resources = loader.getResources(FACES_CONFIG_IMPLICIT);
         while (resources.hasMoreElements()) {
             urlSet.add(resources.nextElement());
@@ -83,6 +91,7 @@ public class TomEEFacesConfigResourcePro
             }
         }
 
+        CACHED_RESOURCES.put(loader, urlSet);
         return urlSet;
     }
 
@@ -93,4 +102,8 @@ public class TomEEFacesConfigResourcePro
         }
         return loader;
     }
+
+    public static void clear(final ClassLoader loader) {
+        CACHED_RESOURCES.remove(loader);
+    }
 }

Added: openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContextListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContextListener.java?rev=1371773&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContextListener.java (added)
+++ openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContextListener.java Fri Aug 10 17:21:31 2012
@@ -0,0 +1,16 @@
+package org.apache.tomee.myfaces;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class TomEEMyFacesContextListener implements ServletContextListener {
+    @Override
+    public void contextInitialized(final ServletContextEvent sce) {
+        // no-op
+    }
+
+    @Override
+    public void contextDestroyed(final ServletContextEvent sce) {
+        TomEEFacesConfigResourceProvider.clear(sce.getServletContext().getClassLoader());
+    }
+}