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/08 23:02:38 UTC

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

Author: rmannibucau
Date: Wed Aug  8 21:02:37 2012
New Revision: 1370967

URL: http://svn.apache.org/viewvc?rev=1370967&view=rev
Log:
TOMEE-361 enhancing servletcontainerinitializer for myfaces startup

Added:
    openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java
Modified:
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
    openejb/trunk/openejb/tomee/tomee-myfaces/pom.xml
    openejb/trunk/openejb/tomee/tomee-webapp/pom.xml

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=1370967&r1=1370966&r2=1370967&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 Wed Aug  8 21:02:37 2012
@@ -83,7 +83,7 @@ public class OpenEJBContextConfig extend
 
         // add myfaces auto-initializer
         try {
-            final Class<?> myfacesInitializer = Class.forName("org.apache.myfaces.ee6.MyFacesContainerInitializer", true, context.getLoader().getClassLoader());
+            final Class<?> myfacesInitializer = Class.forName("org.apache.tomee.myfaces.TomEEMyFacesContainerInitializer", true, context.getLoader().getClassLoader());
             final ServletContainerInitializer instance = (ServletContainerInitializer) myfacesInitializer.newInstance();
             context.addServletContainerInitializer(instance, getJsfClasses(context));
             context.addApplicationListener("org.apache.myfaces.webapp.StartupServletContextListener");

Modified: openejb/trunk/openejb/tomee/tomee-myfaces/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/pom.xml?rev=1370967&r1=1370966&r2=1370967&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-myfaces/pom.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-myfaces/pom.xml Wed Aug  8 21:02:37 2012
@@ -31,6 +31,12 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>${javaee-api.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
       <groupId>org.apache.myfaces.core</groupId>
       <artifactId>myfaces-impl</artifactId>
       <version>${myfaces.version}</version>

Added: openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java?rev=1370967&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java (added)
+++ openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java Wed Aug  8 21:02:37 2012
@@ -0,0 +1,76 @@
+package org.apache.tomee.myfaces;
+
+import org.apache.myfaces.context.servlet.StartupServletExternalContextImpl;
+import org.apache.myfaces.ee6.MyFacesContainerInitializer;
+import org.apache.myfaces.spi.FacesConfigResourceProvider;
+import org.apache.myfaces.spi.FacesConfigResourceProviderFactory;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.webapp.FacesServlet;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.io.File;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+public class TomEEMyFacesContainerInitializer implements ServletContainerInitializer {
+    private final MyFacesContainerInitializer delegate;
+
+    public TomEEMyFacesContainerInitializer() {
+        delegate = new MyFacesContainerInitializer();
+    }
+
+    @Override
+    public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException {
+        // try to skip first
+        if ("true".equalsIgnoreCase(ctx.getInitParameter("org.apache.myfaces.INITIALIZE_ALWAYS_STANDALONE"))) {
+            return;
+        }
+        if ((classes != null && !classes.isEmpty()) || isFacesConfigPresent(ctx)) {
+            // we found a faces-config.xml or some classes so let's delegate to myfaces
+            delegate.onStartup(classes, ctx);
+        }
+    }
+
+    // that's the reason why we fork: we don't want to consider our internal faces-config.xml
+    // see delegate for details
+    private boolean isFacesConfigPresent(ServletContext servletContext) {
+        try {
+            if (servletContext.getResource("/WEB-INF/faces-config.xml") != null) {
+                return true;
+            }
+
+            final String configFilesAttrValue = servletContext.getInitParameter(FacesServlet.CONFIG_FILES_ATTR);
+            if (configFilesAttrValue != null) {
+                String[] configFiles = configFilesAttrValue.split(",");
+                for (String file : configFiles) {
+                    if (servletContext.getResource(file.trim()) != null) {
+                        return true;
+                    }
+                }
+            }
+
+            final ExternalContext externalContext = new StartupServletExternalContextImpl(servletContext, true);
+            final FacesConfigResourceProviderFactory factory = FacesConfigResourceProviderFactory.
+                    getFacesConfigResourceProviderFactory(externalContext);
+            final FacesConfigResourceProvider provider = factory.createFacesConfigResourceProvider(externalContext);
+            final Collection<URL> metaInfFacesConfigUrls =  provider.getMetaInfConfigurationResources(externalContext);
+
+            // remove our internal faces-config.xml
+            final Iterator<URL> it = metaInfFacesConfigUrls.iterator();
+            while (it.hasNext()) {
+                if (it.next().toExternalForm().replace(File.separator, "/").contains("lib/openwebbeans-jsf-")) {
+                    it.remove();
+                }
+            }
+
+            return metaInfFacesConfigUrls != null && !metaInfFacesConfigUrls.isEmpty();
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/pom.xml?rev=1370967&r1=1370966&r2=1370967&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/pom.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/pom.xml Wed Aug  8 21:02:37 2012
@@ -189,6 +189,12 @@
       <artifactId>tomee-myfaces</artifactId>
       <version>${tomee.version}</version>
       <scope>runtime</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.openejb</groupId>
+          <artifactId>javaee-api</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.openejb</groupId>