1 Reply Latest reply on Jun 16, 2009 9:01 AM by Steve Whatmore

    exception after server restart: javax.servlet.ServletExcepti

    infinity2heaven Novice

      This is a critical blocker for us since the last two months of development, and now that we're going into productionWe get this exception at random (one out of ten 10 times, after a server restart). We tried to search every forum we get, but couldn't get one satisfying answer. Is this a common problem with a4j?

      It occurs even if you close the browser and open it.

      Interestingly, the problem "goes away" after waiting for a period of time, and several tomcat restarts, no idea why. (Session timeout is set to 20 mins)

      The technology stack we use:
      Apache myfaces 1.2.6
      Richfaces 3.3
      Apache Orchestra 1.3.1
      hibernat 3.4
      Spring 2.5.6
      Tomahawk 1.1.8

      and we use JSF State saving method.

      Any help would be greatly appreciated!

      ACT_PRS_REBIJECT_DEVICE2009-06-11 10:02:37,600 ERROR [TP-Processor1:] org.ajax4jsf.webapp.BaseXMLFilter - Exception in the filter chain
      javax.servlet.ServletException: Undefined component type javax.faces.ViewRoot
       at javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:546)
       at javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:266)
       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:160)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
       at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
       at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
       at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:246)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at xxx.web.filter.RequestDumper.doFilter(RequestDumper.java:97)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at xxx.web.filter.ErrorLogger.doFilter(ErrorLogger.java:26)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:169)
       at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
       at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
       at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
       at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
       at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
       at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
       at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
       at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
       at java.lang.Thread.run(Thread.java:619)
      Caused by: javax.faces.FacesException: Undefined component type javax.faces.ViewRoot
       at org.apache.myfaces.application.ApplicationImpl.createComponent(ApplicationImpl.java:653)
       at org.apache.myfaces.application.jsp.JspViewHandlerImpl.createView(JspViewHandlerImpl.java:227)
       at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:99)
       at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
       at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:151)
       ... 38 more
      



      web.xml is here
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app
       xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       version="2.5"
       xsi:schemaLocation="
       http://java.sun.com/xml/ns/javaee
       http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
       <!-- -->
       <!-- Spring configuration -->
       <!-- -->
      
       <context-param>
       <description>
       Comma separated list of Spring context configuration files.
       </description>
       <param-name>contextConfigLocation</param-name>
       <param-value>
       /WEB-INF/spring/spring-core.xml,
       /WEB-INF/spring/spring-security.xml,
       /WEB-INF/spring/spring-data.xml,
       /WEB-INF/spring/spring-orchestra.xml,
       /WEB-INF/spring/spring-mail.xml,
       /WEB-INF/spring/spring-integration.xml
       </param-value>
       </context-param>
      
       <!-- -->
       <!-- JSF standard configuration -->
       <!-- -->
      
       <context-param>
       <description>
       Comma-delimited list of context-relative resource
       paths under which the JSF implementation will look for application configuration
       resources (see Section 10.4.3 "Application Configuration Resource Format" of
       JSF 1.2 specification ), before loading a configuration resource named
       "/WEB-INF/faces-config.xml" (if such a resource exists).
       </description>
       <param-name>javax.faces.CONFIG_FILES</param-name>
       <param-value>
       /WEB-INF/faces/faces-app.xml,
       /WEB-INF/faces/faces-web-nav.xml
       </param-value>
       </context-param>
       <context-param>
       <description>
       The default suffix for extension-mapped resources that contain JSF components.
       If not specified, the default value ".jsp" must be used.
       </description>
       <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
       <param-value>.jspx</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       Lifecycle identifier of the Lifecycle instance to be used when processing
       JSF requests for this web application. If not specified, the JSF default
       instance, identified by LifecycleFactory.DEFAULT_LIFECYCLE, must be used.
       </description>
       <param-name>javax.faces.LIFECYCLE_ID</param-name>
       <param-value></param-value>
       </context-param>
       -->
       <context-param>
       <description>
       The location where state information is saved. Valid values are "server"
       (typically saved in HttpSession) and "client" (typically saved as
       a hidden field in the subsequent form submit). If not specified,
       the default value "server" must be used.
       </description>
       <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
       <param-value>server</param-value>
       </context-param>
      
       <!-- -->
       <!-- Apache MyFaces configuration -->
       <!-- -->
      
       <context-param>
       <description>
       Enables error handling by the framework. This must be disabled (false)
       in order for the Servlet descriptor "error-page" tags (in this file)
       to function. Setting it to true will enable verbose error pages for
       development.
       </description>
       <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
       <param-value>false</param-value>
       </context-param>
       <context-param>
       <description>
       Only applicable if state saving method is "server" (= default).
       Defines the amount (default = 20) of the latest views are stored in session.
       </description>
       <param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>
       <param-value>20</param-value>
       </context-param>
       <context-param>
       <description>
       Only applicable if state saving method is "server" (= default).
       If true (default) the state will be serialized to a byte stream before it is
       written to the session. If false the state will not be serialized to
       a byte stream.
       </description>
       <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
       <param-value>true</param-value>
       </context-param>
       <context-param>
       <description>
       Only applicable if state saving method is "server" (= default) and if
       org.apache.myfaces.SERIALIZE_STATE_IN_SESSION is true (= default) If true (default)
       the serialized state will be compressed before it is written to the session.
       If false the state will not be compressed.
       </description>
       <param-name>org.apache.myfaces.COMPRESS_STATE_IN_SESSION</param-name>
       <param-value>true</param-value>
       </context-param>
       <context-param>
       <description>
       </description>
       <param-name>org.apache.myfaces.COMPRESS_STATE_IN_CLIENT</param-name>
       <param-value>false</param-value>
       </context-param>
       <context-param>
       <description>
       Enables encryption for MyFaces state saving mechanism (server or client). This is
       used by org.apache.myfaces.shared_impl.util.StateUtils and is referenced by the
       RichFaces state management framework.
       </description>
       <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
       <param-value>false</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       Private key for the DES algorithm used by the MyFaces encryption mechanism.
       </description>
       <param-name>org.apache.myfaces.SECRET</param-name>
       <param-value>Nz21NDYOMTA=</param-value>
       </context-param>
       -->
       <context-param>
       <description>
       This parameter tells MyFaces if javascript code should be allowed in the rendered
       HTML output. If javascript is allowed, command_link anchors will have javascript
       code that submits the corresponding form. If javascript is not allowed, the state
       saving info and nested parameters will be added as url parameters.
       Default: "true"
       </description>
       <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
       <param-value>true</param-value>
       </context-param>
       <context-param>
       <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
       <param-value>false</param-value>
       </context-param>
       <context-param>
       <description>
       If true, rendered HTML code will be formatted, so that it is "human readable". i.e.
       additional line separators and whitespace will be written, that do not influence
       the HTML code. Default: "true"
       </description>
       <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
       <param-value>true</param-value>
       </context-param>
       <context-param>
       <description>
       If true, a javascript function will be rendered that is able to restore the
       former vertical scroll on every request. Convenient feature if you have
       pages with long lists and you do not want the browser page to always jump
       to the top if you trigger a link or button action that stays on the same page.
       Default: "false"
       </description>
       <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
       <param-value>false</param-value>
       </context-param>
       <context-param>
       <description>
       Validate managed beans, navigation rules and ensure that forms are not nested.
       </description>
       <param-name>org.apache.myfaces.VALIDATE</param-name>
       <param-value>true</param-value>
       </context-param>
       <context-param>
       <description>
       A class implementing the org.apache.myfaces.shared.renderkit.html.util.AddResource
       interface. It is responsible to place scripts and css on the right position in your
       HTML document. Default: "org.apache.myfaces.shared.renderkit.html.util.DefaultAddResource"
       Follow the description on the MyFaces-Wiki-Performance page to enable StreamingAddResource
       instead of DefaultAddResource if you want to gain performance.
       </description>
       <param-name>org.apache.myfaces.ADD_RESOURCE_CLASS</param-name>
       <param-value>org.apache.myfaces.renderkit.html.util.DefaultAddResource</param-value>
       <!-- param-value>org.apache.myfaces.renderkit.html.util.NonBufferingAddResource</param-value-->
       <!-- param-value>org.apache.myfaces.component.html.util.StreamingAddResource</param-value-->
       </context-param>
       <context-param>
       <description>
       A very common problem in configuring MyFaces-web-applications is that the Extensions-Filter
       is not configured at all or improperly configured. This parameter will check for a properly
       configured Extensions-Filter if it is needed by the web-app. In most cases this check will
       work just fine, there might be cases where an internal forward will bypass the
       Extensions-Filter and the check will not work. If this is the case, you can disable the
       check by setting this parameter to false.
       </description>
       <param-name>org.apache.myfaces.CHECK_EXTENSIONS_FILTER</param-name>
       <param-value>true</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       Change the url-pattern from the ExtensionsFilter Default is "/faces/myFacesExtensionResource"
       Note: The filter-mapping for ExtensionsFilter, the url-pattern is this value + "/*",
       else there comes a exception
       </description>
       <param-name>org.apache.myfaces.RESOURCE_VIRTUAL_PATH</param-name>
       <param-value>/faces/extensionResource</param-value>
       </context-param>
       -->
      
       <!-- -->
       <!-- Apache MyFaces extensions validator configuration -->
       <!-- -->
      
       <context-param>
       <param-name>org.apache.myfaces.extensions.validator.CUSTOM_MESSAGE_BUNDLE</param-name>
       <param-value>xxx.resources.lang.validation</param-value>
       </context-param>
       <context-param>
       <param-name>org.apache.myfaces.extensions.validator.JPA_VALIDATION_ERROR_MESSAGES</param-name>
       <param-value>xxx.resources.lang.validation</param-value>
       </context-param>
      
       <!-- -->
       <!-- Apache MyFaces sandbox configuration -->
       <!-- -->
      
       <context-param>
       <description>
       The RedirectTrackerManager is a component from the MyFaces Sandbox
       project. It - allows redirect to be used in navigation rules without
       the normal limitations. - JSF apps often use the pattern that one bean
       handles a postback, then stores some - data in request scope and
       navigates via an internal forward to a new view which - then uses that
       data. However doing an internal forward does not update the web -
       browser's displayed url. Marking the nagivation as a redirect will
       update the - browser url, but all request-scoped data is lost. The
       RedirectTracker temporarily - stores request-scoped data in the
       session then reattaches it to the following - request, allowing
       redirects to be used with request-scoped data. JSF error messages -
       (FacesMessage objects) are also in request scope (attached to a
       request-scoped - FacesContext object), so redirecting also loses
       messages assigned by the previous - view. - - This examples app only
       needs to preserve messages, not request-scoped-data, across -
       redirects so just that functionality of the RedirectTrackerManager is
       enabled here.
      
       org.apache.myfaces.custom.redirectTracker.policy.FullRedirectTrackPolicy
       captures the locale, request scoped beans, messages
       org.apache.myfaces.custom.redirectTracker.policy.MessagesRedirectTrackPolicy
       captures messages only
       org.apache.myfaces.custom.redirectTracker.policy.NoopRedirectTrackPolicy
       captures nothing - default setting
       </description>
       <param-name>org.apache.myfaces.redirectTracker.POLICY</param-name>
       <param-value>org.apache.myfaces.custom.redirectTracker.policy.FullRedirectTrackPolicy</param-value>
       </context-param>
       <context-param>
       <param-name>org.apache.myfaces.redirectTracker.MAX_REDIRECTS</param-name>
       <param-value>20</param-value>
       </context-param>
      
       <!-- -->
       <!-- Facelets configuration -->
       <!-- -->
      
       <context-param>
       <description>
       A semicolon (;) delimitted list of paths to Facelet tag libraries, relative to
       your application's root. These libraries will be loaded when the first request
       hits the FaceletViewHandler for page compilation.
       Example: /WEB-INF/facelets/foo.taglib.xml; /WEB-INF/facelets/bar.taglib.xml
       </description>
       <param-name>facelets.LIBRARIES</param-name>
       <param-value>/tags/app.taglib.xml;</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       A semicolon (;) delimitted list of class names of type com.sun.facelets.tag.TagDecorator,
       with a no-argument constructor. These decorators will be loaded when the first request
       hits the FaceletViewHandler for page compilation.
       Example: com.sun.facelets.tag.jsf.html.HtmlDecorator
       </description>
       <param-name>facelets.DECORATORS</param-name>
       <param-value></param-value>
       </context-param>
       -->
       <context-param>
       <description>
       Setting this to true will cause the FaceletViewHandler to print out debug information
       in an easy to use screen when an error occurs during the rendering process.
       Example: true
       </description>
       <param-name>facelets.DEVELOPMENT</param-name>
       <param-value>false</param-value>
       </context-param>
       <context-param>
       <description>
       The buffer size to set on the response when the ResponseWriter is generated.
       By default the value is -1, which will not assign a buffer size on the response.
       This should be increased if you are using development mode in order to guarantee
       that the response isn't partially rendered when an error is generated.
       Example: 8192
       </description>
       <param-name>facelets.BUFFER_SIZE</param-name>
       <param-value>-1</param-value>
       </context-param>
       <context-param>
       <description>
       When a page is requested, what interval in seconds should the compiler check for changes.
       If you don't want the compiler to check for changes once the page is compiled, then use
       a value of -1. Setting a low refresh period helps during development to be able to edit
       pages in a running application.
       Example: -1
       </description>
       <param-name>facelets.REFRESH_PERIOD</param-name>
       <param-value>2</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       Optionally provide an alternate ResourceResolver that will replace the default logic
       of allowing the FacesContext resolve the resource URL.
       Example: my.company.IDEResourceResolver
       </description>
       <param-name>facelets.RESOURCE_RESOLVER</param-name>
       <param-value>com.sun.facelets.impl.DefaultResourceResolver</param-value>
       </context-param>
       -->
       <!--
       <context-param>
       <description>
       A semicolon (;) delimitted list of resources that Facelets should use. If no resource
       paths are specified, Facelets will handle all requests (DEFAULT). If one or more
       paths are specified, Facelets will only use the ones specified, otherwise fall back
       on the parent or default ViewHandler (JSP). Note, this requires the FacesServlet
       in your web.xml to be mapped with a prefix for capturing multiple file types ex: /faces/*.
       Example: /demos/*; *.xhtml
       </description>
       <param-name>facelets.VIEW_MAPPINGS</param-name>
       <param-value></param-value>
       </context-param>
       -->
       <context-param>
       <description>
       A boolean value that tells the compiler to skip comments (default is true). Even if you
       comment out code in your page, the tags will not be compiled but expressions (EL)
       will be treated as if they were inlined-- still compiled and evaluated for output in the
       document. Skipping comments will remove all comments completely from the document.
       Example: false
       </description>
       <param-name>facelets.SKIP_COMMENTS</param-name>
       <!-- This needs to be false in order for CSS includes to function correctly. -->
       <param-value>false</param-value>
       </context-param>
      
       <!-- -->
       <!-- RichFaces configuration -->
       <!-- -->
      
       <context-param>
       <description>
       Is a name of a skin used in an application. It can be a literal string with a skin name,
       or the EL expression (#{...}) pointed to a String property (skin name) or a
       property of a org.richfaces.framework.skin type. Skin in last case, this instance
       is used as a current skin.
       </description>
       <param-name>org.richfaces.SKIN</param-name>
       <param-value>DEFAULT</param-value>
       </context-param>
       <context-param>
       <description>
       Defines how the RichFaces script files are loaded to application. Possible values
       are: ALL, DEFAULT, NONE. For more information see "Scripts and Styles Load Strategy".
       </description>
       <param-name>org.richfaces.LoadScriptStrategy</param-name>
       <param-value>DEFAULT</param-value>
       </context-param>
       <context-param>
       <description>
       Defines how the RichFaces style files are loaded to application. Possible values
       are: ALL, DEFAULT, NONE. For more information see "Scripts and Styles Load Strategy".
       </description>
       <param-name>org.richfaces.LoadStyleStrategy</param-name>
       <param-value>DEFAULT</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       Is an URL to an application or a container log file (if possible). If this parameter
       is set, content from the given URL is shown on a Debug error page in the iframe window.
       </description>
       <param-name>org.ajax4jsf.LOGFILE</param-name>
       <param-value></param-value>
       </context-param>
       -->
       <context-param>
       <description>
       Is a comma-separated list of custom ViewHandler instances for inserting in chain.
       Handlers are inserted BEFORE RichFaces viewhandlers in the given order. For example,
       in facelets application this parameter must contain com.sun.facelets.FaceletViewHandler,
       instead of declaration in faces-config.xml
       </description>
       <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
       <param-value>com.sun.facelets.FaceletViewHandler</param-value>
       </context-param>
       <!--
       <context-param>
       <description>
       Is a comma-separated list of names for a component as a special control case,
       such as messages bundle loader, alias bean components, etc. Is a type of component
       got by a reflection from the static field COMPONENT_TYPE . For components with
       such types encode methods always are called in rendering Ajax responses, even
       if a component isn't in an updated part.
       </description>
       <param-name>org.ajax4jsf.CONTROL_COMPONENTS</param-name>
       <param-value></param-value>
       </context-param>
       -->
       <context-param>
       <description>
       For generated resources, such as encrypt generation data, it's encoded in
       the resource URL. For example, URL for an image generated from the mediaOutput
       component contains a name of a generation method, since for a hacker attack,
       it is possible to create a request for any JSF baked beans or other attributes.
       To prevent such attacks, set this parameter to "true" in critical applications
       (works with JRE > 1.4 )
       </description>
       <param-name>org.ajax4jsf.ENCRYPT_RESOURCE_DATA</param-name>
       <param-value>false</param-value>
       </context-param>
       <context-param>
       <description>
       Is a password for encryption of resources data. If isn't set,
       a random password is used.
       </description>
       <param-name>org.ajax4jsf.ENCRYPT_PASSWORD</param-name>
       <param-value>random</param-value>
       </context-param>
       <context-param>
       <description>
       It doesn't allow framework to reformat JavaScript files (makes it impossible to debug)
       </description>
       <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
       <param-value>true</param-value>
       </context-param>
       <context-param>
       <description>
       Defines prefix which is added to all URIs of generated resources. This prefix
       designed to handle RichFaces generated resources requests.
       </description>
       <param-name>org.ajax4jsf.RESOURCE_URI_PREFIX</param-name>
       <param-value>a4j</param-value>
       </context-param>
       <context-param>
       <description>
       Defines prefix which is added to URIs of global resources. This prefix designed
       to handle RichFaces generated resources requests.
       </description>
       <param-name>org.ajax4jsf.GLOBAL_RESOURCE_URI_PREFIX</param-name>
       <param-value>a4j/g</param-value>
       </context-param>
       <context-param>
       <description>
       Defines prefix which is used for session tracking for generated resources.
       This prefix designed to handle RichFaces generated resources requests.
       </description>
       <param-name>org.ajax4jsf.SESSION_RESOURCE_URI_PREFIX</param-name>
       <param-value>a4j/s</param-value>
       </context-param>
       <context-param>
       <description>
       Defines in seconds how long streamed back to browser resources can be cached.
       </description>
       <param-name>org.ajax4jsf.DEFAULT_EXPIRE</param-name>
       <param-value>86400</param-value>
       </context-param>
       <context-param>
       <description>
       If enabled the component state (not the tree) will be serialized before being
       stored in the session. This may be desirable for applications that may have
       issues with view state being sensitive to model changes. Instead of this
       parameter can use com.sun.faces.serializeServerState and
       org.apache.myfaces.SERIALIZE_STATE_IN_SESSION parameters for
       corresponding environments.
       </description>
       <param-name>org.ajax4jsf.SERIALIZE_SERVER_STATE</param-name>
       <param-value>false</param-value>
       </context-param>
      
       <!-- -->
       <!-- JSF servlets -->
       <!-- -->
      
       <servlet>
       <servlet-name>Faces Servlet</servlet-name>
       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
       </servlet>
       <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>*.htmlx</url-pattern>
       </servlet-mapping>
       <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>/faces/*</url-pattern>
       </servlet-mapping>
      
       <!-- -->
       <!-- JSF filters filters / listeners -->
       <!-- -->
      
       <filter>
       <filter-name>extensionsFilter</filter-name>
       <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
       <init-param>
       <description>
       Set the size limit for uploaded files.
       Format: 10 - 10 bytes
       10k - 10 KB
       10m - 10 MB
       1g - 1 GB
       </description>
       <param-name>uploadMaxFileSize</param-name>
       <param-value>5m</param-value>
       </init-param>
       <init-param>
       <description>
       Set the threshold size - files
       below this limit are stored in memory, files above
       this limit are stored on disk.
       Format: 10 - 10 bytes
       10k - 10 KB
       10m - 10 MB
       1g - 1 GB
       </description>
       <param-name>uploadThresholdSize</param-name>
       <param-value>100k</param-value>
       </init-param>
       </filter>
       <!-- mapping for adding <script/>, <link/>, and other resource tags to JSF-pages -->
       <filter-mapping>
       <filter-name>extensionsFilter</filter-name>
       <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet -->
       <servlet-name>Faces Servlet</servlet-name>
       </filter-mapping>
       <filter-mapping>
       <filter-name>extensionsFilter</filter-name>
       <url-pattern>*.htmlx</url-pattern>
       </filter-mapping>
       <filter-mapping>
       <filter-name>extensionsFilter</filter-name>
       <url-pattern>/faces/*</url-pattern>
       </filter-mapping>
      
       <!-- -->
       <!-- Richfaces filters / listeners -->
       <!-- -->
      
       <filter>
       <display-name>RichFaces Filter</display-name>
       <filter-name>richfaces</filter-name>
       <filter-class>org.ajax4jsf.Filter</filter-class>
       </filter>
       <filter-mapping>
       <filter-name>richfaces</filter-name>
       <servlet-name>Faces Servlet</servlet-name>
       <dispatcher>REQUEST</dispatcher>
       <dispatcher>FORWARD</dispatcher>
       <dispatcher>INCLUDE</dispatcher>
       </filter-mapping>
      
       <!-- -->
       <!-- Apache Orchestra filters / listeners -->
       <!-- -->
      
       <!--
       Orchestra feature needed to support-separate conversation-per-window.
       It ensures - that a query parameter "conversationId=NNN" is attached
       to each url within the - generated html page.
       -->
       <filter>
       <filter-name>requestParameterFilter</filter-name>
       <filter-class>
       org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServletFilter
       </filter-class>
       </filter>
      
       <!--
       The session listener tracks each user's session to manage the
       conversations that - are associated with that session. Some
       initialization is also done on webapp startup.
       -->
       <listener>
       <listener-class>
       org.apache.myfaces.orchestra.conversation.servlet.ConversationManagerSessionListener
       </listener-class>
       </listener>
      
       <!-- -->
       <!-- Spring filters / listeners -->
       <!-- -->
      
       <!-- Add support for Spring Security filters -->
       <filter>
       <filter-name>springSecurityFilterChain</filter-name>
       <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
       </filter>
       <filter-mapping>
       <filter-name>springSecurityFilterChain</filter-name>
       <url-pattern>/*</url-pattern>
       <dispatcher>FORWARD</dispatcher>
       <dispatcher>REQUEST</dispatcher>
       </filter-mapping>
      
       <!-- Place constraints on a single user's ability to log in -->
       <listener>
       <listener-class>
       org.springframework.security.ui.session.HttpSessionEventPublisher
       </listener-class>
       </listener>
      
       <!-- Handle Spring application context lifecycle -->
       <listener>
       <listener-class>
       org.springframework.web.context.ContextLoaderListener
       </listener-class>
       </listener>
      
       <!-- Add support for Spring beans with scope="request" -->
       <listener>
       <listener-class>
       org.springframework.web.context.request.RequestContextListener
       </listener-class>
       </listener>
      
       <!-- -->
       <!-- Application servlets -->
       <!-- -->
      
       <servlet>
       <description>
       Generic request redirector.
       Provides application specific vanity URLs.
       </description>
       <servlet-name>requestRedirectorServlet</servlet-name>
       <servlet-class>xxx.srf.process.RequestRedirector</servlet-class>
       <init-param>
       <param-name>/login(/)?</param-name>
       <param-value>/public/auth/login.htmlx</param-value>
       </init-param>
       <init-param>
       <param-name>/admin(/)?</param-name>
       <param-value>/public/auth/admlogin.htmlx</param-value>
       </init-param>
       </servlet>
       <servlet-mapping>
       <servlet-name>requestRedirectorServlet</servlet-name>
       <url-pattern>/login</url-pattern>
       <url-pattern>/admin</url-pattern>
       </servlet-mapping>
      
       <servlet>
       <description>
       Servlet to retrieve a signature image.
       </description>
       <servlet-name>imageServlet</servlet-name>
       <servlet-class>xxx.srf.util.ImageServlet</servlet-class>
       </servlet>
       <servlet-mapping>
       <servlet-name>imageServlet</servlet-name>
       <url-pattern>/ImageServlet</url-pattern>
       </servlet-mapping>
      
       <servlet>
       <description>
       Servlet to retrieve a PDF.
       </description>
       <servlet-name>pdfServlet</servlet-name>
       <servlet-class>xxx.srf.process.PdfServlet</servlet-class>
       </servlet>
       <servlet-mapping>
       <servlet-name>pdfServlet</servlet-name>
       <url-pattern>/PdfServlet</url-pattern>
       </servlet-mapping>
      
       <servlet>
       <description>
       Servlet to handle consent form.
       </description>
       <servlet-name>consentServlet</servlet-name>
       <servlet-class>xxx.srf.process.ConsentServlet</servlet-class>
       </servlet>
       <servlet-mapping>
       <servlet-name>consentServlet</servlet-name>
       <url-pattern>/consent/*</url-pattern>
       </servlet-mapping>
      
       <servlet>
       <description>
       Servlet Serves successful login response.
       </description>
       <servlet-name>loginSuccessServlet</servlet-name>
       <servlet-class>xxx.srf.process.LoginSuccessNavigatorServlet</servlet-class>
       <load-on-startup>4</load-on-startup>
       </servlet>
       <servlet-mapping>
       <servlet-name>loginSuccessServlet</servlet-name>
       <url-pattern>/LoginSuccess</url-pattern>
       </servlet-mapping>
      
       <servlet>
       <description>
       Servlet Serves login failure.
       </description>
       <servlet-name>loginFailServlet</servlet-name>
       <servlet-class>xxx.srf.process.LoginFailServlet</servlet-class>
       <load-on-startup>4</load-on-startup>
       </servlet>
       <servlet-mapping>
       <servlet-name>loginFailServlet</servlet-name>
       <url-pattern>/LoginFailed</url-pattern>
       </servlet-mapping>
      
       <!-- -->
       <!-- Application filters -->
       <!-- -->
      
       <!-- Error logger -->
       <filter>
       <filter-name>xxxErrorLogger</filter-name>
       <filter-class>xxx.srf.web.filter.ErrorLogger</filter-class>
       </filter>
       <filter-mapping>
       <filter-name>xxxErrorLogger</filter-name>
       <url-pattern>/*</url-pattern>
       </filter-mapping>
      
       <!-- Request dumper -->
       <filter>
       <filter-name>xxxRequestDumper</filter-name>
       <filter-class>xxx.srf.web.filter.RequestDumper</filter-class>
       <init-param>
       <param-name>showHeaders</param-name>
       <param-value>false</param-value>
       </init-param>
       </filter>
       <filter-mapping>
       <filter-name>xxxRequestDumper</filter-name>
       <url-pattern>*.htmlx</url-pattern>
       <url-pattern>*.jsp</url-pattern>
       </filter-mapping>
      
       <!-- -->
       <!-- Session configuration -->
       <!-- -->
      
       <session-config>
       <session-timeout>20</session-timeout>
       </session-config>
      
       <!-- -->
       <!-- Error Pages -->
       <!-- -->
      
       <error-page>
       <exception-type>
       javax.faces.application.ViewExpiredException
       </exception-type>
       <!-- JSP page used due to invalid JSF view state -->
       <location>/public/error/view-expired.jsp</location>
       </error-page>
       <error-page>
       <error-code>500</error-code>
       <!-- JSP page used due to unknown JSF state on error -->
       <location>/public/error/error.jsp</location>
       </error-page>
       <error-page>
       <error-code>503</error-code>
       <!-- JSP page used due to unknown JSF state on error -->
       <location>/public/error/error.jsp</location>
       </error-page>
       <error-page>
       <error-code>400</error-code>
       <!-- JSP page used due to unknown JSF state on error -->
       <location>/public/error/error.jsp</location>
       </error-page>
       <error-page>
       <error-code>401</error-code>
       <!-- JSP page used due to unknown JSF state on error -->
       <location>/public/error/error.jsp</location>
       </error-page>
       <error-page>
       <error-code>404</error-code>
       <!-- JSP page used due to unknown JSF state on error -->
       <location>/public/error/error.jsp</location>
       </error-page>
      
       <!-- -->
       <!-- Welcome files -->
       <!-- -->
      
       <welcome-file-list>
       <welcome-file>index.jsp</welcome-file>
       </welcome-file-list>
      
      </web-app>