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>