title: java.lang.IllegalArgumentException: javax.faces.lifecycle.ClientWindowFactory
body: <p>We've been running a web app on a development server and recently somebody built a production server for us (with supposedly) the exact same tomcat config including the JSF libraries in the /lib directory.  When I try to deploy my app the new server is throwing a rather confusing error message that I'd love some help understanding.</p>
  <h3>catalina.out</h3>
  <p>Both Production and Devel logs look similar up to this point:</p>
  <pre><code>24-Jun-2015 13:16:47.880 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /opt/fleetforecaster/ff-tomcat/webapps/ROOT.war
  24-Jun-2015 13:16:47.903 WARNING [localhost-startStop-1] org.apache.catalina.startup.SetContextPropertiesRule.begin [SetContextPropertiesRule]{Context} Setting property 'antiJARLocking' to 'true' did not find a matching property.
  24-Jun-2015 13:16:47.911 WARNING [localhost-startStop-1] org.apache.tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Context/Realm} Setting property 'debug' to '99' did not find a matching property.
  24-Jun-2015 13:16:52.059 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
  SLF4J: Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;.
  SLF4J: Defaulting to no-operation (NOP) logger implementation
  SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
  24-Jun-2015 13:16:52.180 INFO [localhost-startStop-1] null.null Initializing Mojarra 2.2.5 ( 20140108-1427 https://svn.java.net/svn/mojarra~svn/tags/2.2.5@12761) for context ''
  24-Jun-2015 13:16:52.401 INFO [localhost-startStop-1] null.null JSF1048: PostConstruct/PreDestroy annotations present.  ManagedBeans methods marked with these annotations will have said annotations processed.
  24-Jun-2015 13:16:52.429 SEVERE [localhost-startStop-1] null.null Unknow type constant pool 18 at position 20
  24-Jun-2015 13:16:52.430 SEVERE [localhost-startStop-1] null.null Unknow type constant pool 0 at position 21
  24-Jun-2015 13:16:52.431 SEVERE [localhost-startStop-1] null.null Unknow type constant pool 0 at position 22
  24-Jun-2015 13:16:52.435 SEVERE [localhost-startStop-1] null.null Unknow type constant pool 18 at position 63
  24-Jun-2015 13:16:52.436 SEVERE [localhost-startStop-1] null.null Unknow type constant pool 0 at position 64
  24-Jun-2015 13:16:52.437 SEVERE [localhost-startStop-1] null.null Unknow type constant pool 0 at position 65
  </code></pre>
  <p>At which point the prod server starts throwing errors:</p>
  <pre><code>24-Jun-2015 13:16:52.606 SEVERE [localhost-startStop-1] null.null Critical error during deployment:
   com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! javax.faces.lifecycle.ClientWindowFactory
      at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:449)
      at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:214)
      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)
  Caused by: java.lang.IllegalArgumentException: javax.faces.lifecycle.ClientWindowFactory
      at javax.faces.FactoryFinder.validateFactoryName(FactoryFinder.java:674)
      at javax.faces.FactoryFinder.setFactory(FactoryFinder.java:368)
      at com.sun.faces.config.processor.FactoryConfigProcessor.setFactory(FactoryConfigProcessor.java:317)
      at com.sun.faces.config.processor.FactoryConfigProcessor.processFactories(FactoryConfigProcessor.java:274)
      at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216)
      at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:435)
      ... 14 more
  </code></pre>
  <p>Followed by a second error block:</p>
  <pre><code>24-Jun-2015 13:16:52.609 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
  24-Jun-2015 13:16:52.621 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
  24-Jun-2015 13:16:52.628 SEVERE [localhost-startStop-1] null.null Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory. Attempting to find backup.
  24-Jun-2015 13:16:52.628 SEVERE [localhost-startStop-1] null.null Unexpected exception when attempting to tear down the Mojarra runtime
   java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory.
      at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1011)
      at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343)
      at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:142)
      at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:310)
      at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4774)
      at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5390)
      at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  <p>Both servers (as far as I can tell) are configured the same - they have 2 additional libs in the /lib directory for JSF and JSTL.</p>
  <p>Any idea what these error messages mean? I must assume its something related to the tomcat install as the exact same war runs fine on one sever but not the other.</p>
  <p>Also there is a line that says:</p>
  <pre><code>    24-Jun-2015 13:16:52.609 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
  </code></pre>
  <p>Where exactly do i find the &quot;appropriate container log file&quot;</p>
  <h3>Both servers - tomcat/lib</h3>
  <p><code>jsf-api-2.1.7.jar  jsf-impl-2.1.7.jar</code></p>
  <h3>Both servers - WEB-INF/lib</h3>
  <pre><code>atmosphere-runtime-2.3.0.jar
  commons-codec-1.5.jar
  commons-fileupload-1.3.1.jar
  commons-io-2.2.jar
  commons-lang-2.6.jar
  commons-logging-1.2.jar
  dom4j-1.6.1.jar
  javaee-web-api-7.0.jar
  javax.faces-2.2.5.jar
  javax.inject-1.jar
  javax.servlet-api-3.0.1.jar
  joda-time-2.3.jar
  jsf-api-2.1.13.jar
  jsf-impl-2.1.13.jar
  jstl-1.2.jar
  mysql-connector-java-5.1.30.jar
  poi-3.10-FINAL.jar
  poi-ooxml-3.9.jar
  poi-ooxml-schemas-3.9.jar
  primefaces-5.1.jar
  slf4j-api-1.7.7.jar
  stax-api-1.0.1.jar
  trove4j-3.0.3.jar
  xml-apis-1.0.b2.jar
  xmlbeans-2.3.0.jar
  </code></pre>