You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "John Schneider (JIRA)" <my...@incubator.apache.org> on 2005/08/03 20:52:45 UTC

[jira] Created: (MYFACES-384) Allow Pre-compiling web application for Tomcat

Allow Pre-compiling web application for Tomcat
----------------------------------------------

         Key: MYFACES-384
         URL: http://issues.apache.org/jira/browse/MYFACES-384
     Project: MyFaces
        Type: Improvement
  Components: General  
    Versions: 1.0.9 beta    
 Environment: Tomcat -- Jasper2
    Reporter: John Schneider
    Priority: Minor


Pre-compiling web applications for Tomcat is not supported "out of the box" as it should be.  I have written a filter that performs essentially the same function as FacesServlet, so that each individual JSP servlet can be defined and mapped in web.xml.  However, limitations in myfaces.webapp.webxml.WebXml.getFacesServletMappings() prevents these mapped servlets from rendering the view. 
The code in question is: if (FacesServlet.class.isAssignableFrom(servletClass)) {

This will prevent any pre-compiled page from being added as a faces servlet mapping, as these servlets extend org.apache.jasper.runtime.HttpJspBase.


The applicable stack trace is as follows:

14:02:45,443 DEBUG LifecycleImpl:118 - entering restoreView in org.apache.myfaces
.lifecycle.LifecycleImpl
14:02:45,637 DEBUG JspStateManagerImpl:196 - No serialized view found in server s
ession!
14:02:45,779 DEBUG JspViewHandlerImpl:191 - Created view /success.jsp
14:02:45,914 DEBUG DebugUtils:158 - Newly created view
========================================
<UIViewRoot id="NULL" family="javax.faces.ViewRoot" locale="en" renderKitId="HTML
_BASIC" rendered="true" rendererType="NULL" rendersChildren="false" transient="fa
lse" viewId="/success.jsp"/>
========================================

14:02:45,960 DEBUG LifecycleImpl:157 - exiting restoreView in org.apache.myfaces.
lifecycle.LifecycleImpl (--> render response)
14:02:45,963 DEBUG LifecycleImpl:288 - entering renderResponse in org.apache.myfa
ces.lifecycle.LifecycleImpl
14:02:45,981 DEBUG WebXmlParser:117 - ignoring servlet + org.apache.jsp.success_j
sp class org.apache.jsp.success_jsp (no FacesServlet)
14:02:45,985 ERROR JspViewHandlerImpl:424 - no faces servlet mappings found
14:02:46,012 ERROR success_jsp]:253 - Servlet.service() for servlet org.apache.js
p.success_jsp threw exception
java.lang.IllegalArgumentException: could not find pathMapping for servletPath =
/success.jsf requestPathInfo = null
        at org.apache.myfaces.application.jsp.JspViewHandlerImpl.getServletMappin
g(JspViewHandlerImpl.java:425)
        at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspVi
ewHandlerImpl.java:246)
        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:3
00)
        at com.urban4life.web.util.FacesFilter.doFilter(FacesFilter.java:63)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
cationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
lterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
lve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
lve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
va:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
va:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
e.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
856)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
sConnection(Http11Protocol.java:744)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoi
nt.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFoll
owerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPo
ol.java:684)
        at java.lang.Thread.run(Thread.java:595)

-------------------------

FacesFilter:

import java.io.IOException;

import javax.faces.FactoryFinder;
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.lifecycle.LifecycleFactory;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author <a href="mailto:js@jschneider.com">John Schneider</a>
 */
public class FacesFilter implements Filter {

	private Log logger = LogFactory.getLog(FacesFilter.class);
	
	public static final String LIFECYCLE_ID_ATTR = "javax.faces.LIFECYCLE_ID";
	
	private FilterConfig filterConfig;
        private FacesContextFactory facesContextFactory;
        private Lifecycle lifecycle;

        private String getLifecycleId() {
            String lifecycleId = filterConfig.getServletContext().getInitParameter(LIFECYCLE_ID_ATTR);
            return lifecycleId != null ? lifecycleId : LifecycleFactory.DEFAULT_LIFECYCLE;
        }

	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		this.facesContextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
		LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
                this.lifecycle = lifecycleFactory.getLifecycle(getLifecycleId());
                logger.debug("Faces Filter Initialized");
	}
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
		throws IOException, ServletException {
		
		FacesContext facesContext = facesContextFactory.getFacesContext(
				filterConfig.getServletContext(), request, response, lifecycle);

		try {
			lifecycle.execute(facesContext);
			lifecycle.render(facesContext);
		}
		catch (Throwable e) {
			logger.error(e);
			if (e instanceof IOException) {
				throw (IOException)e;
			}
			else if (e instanceof ServletException) {
				throw (ServletException)e;
			}
			else if (e.getMessage() != null) {
				throw new ServletException(e.getMessage(), e);
			}
			else {
				throw new ServletException(e);
			}
		}
		finally {
			facesContext.release();
		}
	}
	
	public void destroy() {
            filterConfig = null;
            facesContextFactory = null;
            lifecycle = null;
	}

}


-------------------------

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <servlet>
        <servlet-name>org.apache.jsp.success_jsp</servlet-name>
        <servlet-class>org.apache.jsp.success_jsp</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>org.apache.jsp.success_jsp</servlet-name>
        <url-pattern>/success.jsf</url-pattern>
    </servlet-mapping>
    <!-- Faces Parameters -->
    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml,/WEB-INF/faces-managed-beans.xml,/WEB-INF/faces-navigation.xml</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <!-- Listener, that does all the startup work (configuration, init). -->
    <listener>
        <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
    </listener>
    <!-- Faces Filter -->
    <filter>
        <filter-name>FacesFilter</filter-name>
        <filter-class>com.mycompany.web.util.FacesFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FacesFilter</filter-name>
        <url-pattern>*.jsf</url-pattern>
    </filter-mapping>
</web-app>




-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (MYFACES-384) Allow Pre-compiling web application for Tomcat

Posted by "John Schneider (JIRA)" <my...@incubator.apache.org>.
    [ http://issues.apache.org/jira/browse/MYFACES-384?page=comments#action_12320078 ] 

John Schneider commented on MYFACES-384:
----------------------------------------

I've finally had some time to work on this issue, and have come up with a possible solution.

I have tested the patch below on Tomcat 5.5 in a very simple web app.  You can recreate the environment with the FacesFilter and web.xml above. 
 The only difference is in web.xml, change:
<servlet-mapping> 
         <servlet-name>org.apache.jsp.success_jsp</servlet-name> 
         <url-pattern>/success.jsp</url-pattern> 
</servlet-mapping> 

(changed /success.jsf to success.jsp)

I would appreciate it if others could test this in other environments.  It would be nice to add support for precompilation for the next MyFaces release.


--- WebXml~.java        Thu Aug 25 19:59:30 2005
+++ WebXml.java Thu Aug 25 21:16:00 2005
@@ -30,7 +30,7 @@
  */
 public class WebXml
 {
-    private static final Log log = LogFactory.getLog(WebXmlParser.class);
+    private static final Log log = LogFactory.getLog(WebXml.class);

     private Map _servlets = new HashMap();
     private Map _servletMappings = new HashMap();
@@ -84,7 +84,20 @@
                 continue;
             }
             Class servletClass = ClassUtils.simpleClassForName((String)entry.getValue());
-            if (FacesServlet.class.isAssignableFrom(servletClass))
+            boolean tomcatPrecompiledFacesServlet;
+
+            try
+            {
+               servletClass.getDeclaredField("_jspx_tagPool_f_view");
+               tomcatPrecompiledFacesServlet = true;
+            }
+            catch (NoSuchFieldException e)
+            {
+               tomcatPrecompiledFacesServlet = false;
+            }
+
+
+            if (FacesServlet.class.isAssignableFrom(servletClass) || tomcatPrecompiledFacesServlet)
             {
                 List urlPatterns = (List)_servletMappings.get(servletName);
                 for (Iterator it2 = urlPatterns.iterator(); it2.hasNext(); )


> Allow Pre-compiling web application for Tomcat
> ----------------------------------------------
>
>          Key: MYFACES-384
>          URL: http://issues.apache.org/jira/browse/MYFACES-384
>      Project: MyFaces
>         Type: Improvement
>   Components: General
>     Versions: 1.0.9 beta
>  Environment: Tomcat -- Jasper2
>     Reporter: John Schneider
>     Assignee: Manfred Geiler
>     Priority: Minor

>
> Pre-compiling web applications for Tomcat is not supported "out of the box" as it should be.  I have written a filter that performs essentially the same function as FacesServlet, so that each individual JSP servlet can be defined and mapped in web.xml.  However, limitations in myfaces.webapp.webxml.WebXml.getFacesServletMappings() prevents these mapped servlets from rendering the view. 
> The code in question is: if (FacesServlet.class.isAssignableFrom(servletClass)) {
> This will prevent any pre-compiled page from being added as a faces servlet mapping, as these servlets extend org.apache.jasper.runtime.HttpJspBase.
> The applicable stack trace is as follows:
> 14:02:45,443 DEBUG LifecycleImpl:118 - entering restoreView in org.apache.myfaces
> .lifecycle.LifecycleImpl
> 14:02:45,637 DEBUG JspStateManagerImpl:196 - No serialized view found in server s
> ession!
> 14:02:45,779 DEBUG JspViewHandlerImpl:191 - Created view /success.jsp
> 14:02:45,914 DEBUG DebugUtils:158 - Newly created view
> ========================================
> <UIViewRoot id="NULL" family="javax.faces.ViewRoot" locale="en" renderKitId="HTML
> _BASIC" rendered="true" rendererType="NULL" rendersChildren="false" transient="fa
> lse" viewId="/success.jsp"/>
> ========================================
> 14:02:45,960 DEBUG LifecycleImpl:157 - exiting restoreView in org.apache.myfaces.
> lifecycle.LifecycleImpl (--> render response)
> 14:02:45,963 DEBUG LifecycleImpl:288 - entering renderResponse in org.apache.myfa
> ces.lifecycle.LifecycleImpl
> 14:02:45,981 DEBUG WebXmlParser:117 - ignoring servlet + org.apache.jsp.success_j
> sp class org.apache.jsp.success_jsp (no FacesServlet)
> 14:02:45,985 ERROR JspViewHandlerImpl:424 - no faces servlet mappings found
> 14:02:46,012 ERROR success_jsp]:253 - Servlet.service() for servlet org.apache.js
> p.success_jsp threw exception
> java.lang.IllegalArgumentException: could not find pathMapping for servletPath =
> /success.jsf requestPathInfo = null
>         at org.apache.myfaces.application.jsp.JspViewHandlerImpl.getServletMappin
> g(JspViewHandlerImpl.java:425)
>         at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspVi
> ewHandlerImpl.java:246)
>         at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:3
> 00)
>         at com.urban4life.web.util.FacesFilter.doFilter(FacesFilter.java:63)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> cationFilterChain.java:202)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lterChain.java:173)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> lve.java:213)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> lve.java:178)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> va:126)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> va:105)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
> e.java:107)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> :148)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 856)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> sConnection(Http11Protocol.java:744)
>         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoi
> nt.java:527)
>         at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFoll
> owerWorkerThread.java:80)
>         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPo
> ol.java:684)
>         at java.lang.Thread.run(Thread.java:595)
> -------------------------
> FacesFilter:
> import java.io.IOException;
> import javax.faces.FactoryFinder;
> import javax.faces.context.FacesContext;
> import javax.faces.context.FacesContextFactory;
> import javax.faces.lifecycle.Lifecycle;
> import javax.faces.lifecycle.LifecycleFactory;
> import javax.servlet.Filter;
> import javax.servlet.FilterChain;
> import javax.servlet.FilterConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> /**
>  * @author <a href="mailto:js@jschneider.com">John Schneider</a>
>  */
> public class FacesFilter implements Filter {
> 	private Log logger = LogFactory.getLog(FacesFilter.class);
> 	
> 	public static final String LIFECYCLE_ID_ATTR = "javax.faces.LIFECYCLE_ID";
> 	
> 	private FilterConfig filterConfig;
>         private FacesContextFactory facesContextFactory;
>         private Lifecycle lifecycle;
>         private String getLifecycleId() {
>             String lifecycleId = filterConfig.getServletContext().getInitParameter(LIFECYCLE_ID_ATTR);
>             return lifecycleId != null ? lifecycleId : LifecycleFactory.DEFAULT_LIFECYCLE;
>         }
> 	public void init(FilterConfig filterConfig) throws ServletException {
> 		this.filterConfig = filterConfig;
> 		this.facesContextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
> 		LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
>                 this.lifecycle = lifecycleFactory.getLifecycle(getLifecycleId());
>                 logger.debug("Faces Filter Initialized");
> 	}
> 	
> 	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
> 		throws IOException, ServletException {
> 		
> 		FacesContext facesContext = facesContextFactory.getFacesContext(
> 				filterConfig.getServletContext(), request, response, lifecycle);
> 		try {
> 			lifecycle.execute(facesContext);
> 			lifecycle.render(facesContext);
> 		}
> 		catch (Throwable e) {
> 			logger.error(e);
> 			if (e instanceof IOException) {
> 				throw (IOException)e;
> 			}
> 			else if (e instanceof ServletException) {
> 				throw (ServletException)e;
> 			}
> 			else if (e.getMessage() != null) {
> 				throw new ServletException(e.getMessage(), e);
> 			}
> 			else {
> 				throw new ServletException(e);
> 			}
> 		}
> 		finally {
> 			facesContext.release();
> 		}
> 	}
> 	
> 	public void destroy() {
>             filterConfig = null;
>             facesContextFactory = null;
>             lifecycle = null;
> 	}
> }
> -------------------------
> web.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app version="2.4"
>     xmlns="http://java.sun.com/xml/ns/j2ee"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
>     <servlet>
>         <servlet-name>org.apache.jsp.success_jsp</servlet-name>
>         <servlet-class>org.apache.jsp.success_jsp</servlet-class>
>     </servlet>
>     <servlet-mapping>
>         <servlet-name>org.apache.jsp.success_jsp</servlet-name>
>         <url-pattern>/success.jsf</url-pattern>
>     </servlet-mapping>
>     <!-- Faces Parameters -->
>     <context-param>
>         <param-name>javax.faces.CONFIG_FILES</param-name>
>         <param-value>/WEB-INF/faces-config.xml,/WEB-INF/faces-managed-beans.xml,/WEB-INF/faces-navigation.xml</param-value>
>     </context-param>
>     <context-param>
>         <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
>         <param-value>server</param-value>
>     </context-param>
>     <!-- Listener, that does all the startup work (configuration, init). -->
>     <listener>
>         <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
>     </listener>
>     <!-- Faces Filter -->
>     <filter>
>         <filter-name>FacesFilter</filter-name>
>         <filter-class>com.mycompany.web.util.FacesFilter</filter-class>
>     </filter>
>     <filter-mapping>
>         <filter-name>FacesFilter</filter-name>
>         <url-pattern>*.jsf</url-pattern>
>     </filter-mapping>
> </web-app>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (MYFACES-384) Allow Pre-compiling web application for Tomcat

Posted by "Adam Jenkins (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-384?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12544890 ] 

Adam Jenkins commented on MYFACES-384:
--------------------------------------

What's the status of this issue.  It seems there was a solution supplied quite some time ago, did it ever make it into any builds?

Cheers
Adam

> Allow Pre-compiling web application for Tomcat
> ----------------------------------------------
>
>                 Key: MYFACES-384
>                 URL: https://issues.apache.org/jira/browse/MYFACES-384
>             Project: MyFaces Core
>          Issue Type: Improvement
>          Components: General
>    Affects Versions: 1.0.9m9
>         Environment: Tomcat -- Jasper2
>            Reporter: John Schneider
>            Assignee: Manfred Geiler
>            Priority: Minor
>
> Pre-compiling web applications for Tomcat is not supported "out of the box" as it should be.  I have written a filter that performs essentially the same function as FacesServlet, so that each individual JSP servlet can be defined and mapped in web.xml.  However, limitations in myfaces.webapp.webxml.WebXml.getFacesServletMappings() prevents these mapped servlets from rendering the view. 
> The code in question is: if (FacesServlet.class.isAssignableFrom(servletClass)) {
> This will prevent any pre-compiled page from being added as a faces servlet mapping, as these servlets extend org.apache.jasper.runtime.HttpJspBase.
> The applicable stack trace is as follows:
> 14:02:45,443 DEBUG LifecycleImpl:118 - entering restoreView in org.apache.myfaces
> .lifecycle.LifecycleImpl
> 14:02:45,637 DEBUG JspStateManagerImpl:196 - No serialized view found in server s
> ession!
> 14:02:45,779 DEBUG JspViewHandlerImpl:191 - Created view /success.jsp
> 14:02:45,914 DEBUG DebugUtils:158 - Newly created view
> ========================================
> <UIViewRoot id="NULL" family="javax.faces.ViewRoot" locale="en" renderKitId="HTML
> _BASIC" rendered="true" rendererType="NULL" rendersChildren="false" transient="fa
> lse" viewId="/success.jsp"/>
> ========================================
> 14:02:45,960 DEBUG LifecycleImpl:157 - exiting restoreView in org.apache.myfaces.
> lifecycle.LifecycleImpl (--> render response)
> 14:02:45,963 DEBUG LifecycleImpl:288 - entering renderResponse in org.apache.myfa
> ces.lifecycle.LifecycleImpl
> 14:02:45,981 DEBUG WebXmlParser:117 - ignoring servlet + org.apache.jsp.success_j
> sp class org.apache.jsp.success_jsp (no FacesServlet)
> 14:02:45,985 ERROR JspViewHandlerImpl:424 - no faces servlet mappings found
> 14:02:46,012 ERROR success_jsp]:253 - Servlet.service() for servlet org.apache.js
> p.success_jsp threw exception
> java.lang.IllegalArgumentException: could not find pathMapping for servletPath =
> /success.jsf requestPathInfo = null
>         at org.apache.myfaces.application.jsp.JspViewHandlerImpl.getServletMappin
> g(JspViewHandlerImpl.java:425)
>         at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspVi
> ewHandlerImpl.java:246)
>         at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:3
> 00)
>         at com.urban4life.web.util.FacesFilter.doFilter(FacesFilter.java:63)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> cationFilterChain.java:202)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lterChain.java:173)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> lve.java:213)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> lve.java:178)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> va:126)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> va:105)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
> e.java:107)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> :148)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 856)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> sConnection(Http11Protocol.java:744)
>         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoi
> nt.java:527)
>         at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFoll
> owerWorkerThread.java:80)
>         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPo
> ol.java:684)
>         at java.lang.Thread.run(Thread.java:595)
> -------------------------
> FacesFilter:
> import java.io.IOException;
> import javax.faces.FactoryFinder;
> import javax.faces.context.FacesContext;
> import javax.faces.context.FacesContextFactory;
> import javax.faces.lifecycle.Lifecycle;
> import javax.faces.lifecycle.LifecycleFactory;
> import javax.servlet.Filter;
> import javax.servlet.FilterChain;
> import javax.servlet.FilterConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> /**
>  * @author <a href="mailto:js@jschneider.com">John Schneider</a>
>  */
> public class FacesFilter implements Filter {
> 	private Log logger = LogFactory.getLog(FacesFilter.class);
> 	
> 	public static final String LIFECYCLE_ID_ATTR = "javax.faces.LIFECYCLE_ID";
> 	
> 	private FilterConfig filterConfig;
>         private FacesContextFactory facesContextFactory;
>         private Lifecycle lifecycle;
>         private String getLifecycleId() {
>             String lifecycleId = filterConfig.getServletContext().getInitParameter(LIFECYCLE_ID_ATTR);
>             return lifecycleId != null ? lifecycleId : LifecycleFactory.DEFAULT_LIFECYCLE;
>         }
> 	public void init(FilterConfig filterConfig) throws ServletException {
> 		this.filterConfig = filterConfig;
> 		this.facesContextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
> 		LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
>                 this.lifecycle = lifecycleFactory.getLifecycle(getLifecycleId());
>                 logger.debug("Faces Filter Initialized");
> 	}
> 	
> 	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
> 		throws IOException, ServletException {
> 		
> 		FacesContext facesContext = facesContextFactory.getFacesContext(
> 				filterConfig.getServletContext(), request, response, lifecycle);
> 		try {
> 			lifecycle.execute(facesContext);
> 			lifecycle.render(facesContext);
> 		}
> 		catch (Throwable e) {
> 			logger.error(e);
> 			if (e instanceof IOException) {
> 				throw (IOException)e;
> 			}
> 			else if (e instanceof ServletException) {
> 				throw (ServletException)e;
> 			}
> 			else if (e.getMessage() != null) {
> 				throw new ServletException(e.getMessage(), e);
> 			}
> 			else {
> 				throw new ServletException(e);
> 			}
> 		}
> 		finally {
> 			facesContext.release();
> 		}
> 	}
> 	
> 	public void destroy() {
>             filterConfig = null;
>             facesContextFactory = null;
>             lifecycle = null;
> 	}
> }
> -------------------------
> web.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app version="2.4"
>     xmlns="http://java.sun.com/xml/ns/j2ee"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
>     <servlet>
>         <servlet-name>org.apache.jsp.success_jsp</servlet-name>
>         <servlet-class>org.apache.jsp.success_jsp</servlet-class>
>     </servlet>
>     <servlet-mapping>
>         <servlet-name>org.apache.jsp.success_jsp</servlet-name>
>         <url-pattern>/success.jsf</url-pattern>
>     </servlet-mapping>
>     <!-- Faces Parameters -->
>     <context-param>
>         <param-name>javax.faces.CONFIG_FILES</param-name>
>         <param-value>/WEB-INF/faces-config.xml,/WEB-INF/faces-managed-beans.xml,/WEB-INF/faces-navigation.xml</param-value>
>     </context-param>
>     <context-param>
>         <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
>         <param-value>server</param-value>
>     </context-param>
>     <!-- Listener, that does all the startup work (configuration, init). -->
>     <listener>
>         <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
>     </listener>
>     <!-- Faces Filter -->
>     <filter>
>         <filter-name>FacesFilter</filter-name>
>         <filter-class>com.mycompany.web.util.FacesFilter</filter-class>
>     </filter>
>     <filter-mapping>
>         <filter-name>FacesFilter</filter-name>
>         <url-pattern>*.jsf</url-pattern>
>     </filter-mapping>
> </web-app>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.