我们已经在开发服务器上运行了一个Web应用程序,最近有人(为我们)构建了一个生产服务器(据称),该服务器完全相同的tomcat配置,包括/ lib目录中的JSF库。当我尝试部署我的应用程序时,新服务器会抛出一个令人困惑的错误消息,希望您能有所帮助。
到目前为止,Production和Devel日志看起来都很相似:
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 "org.slf4j.impl.StaticLoggerBinder". 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
此时prod服务器开始引发错误:
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
接下来是第二个错误块:
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)
两台服务器(据我所知)配置相同-它们在/ lib目录中有两个用于JSF和JSTL的附加库。
知道这些错误消息是什么意思吗?我必须假设它与tomcat安装有关,因为在同一台服务器上完全相同的战争运行正常,但在另一台服务器上却没有。
还有一行显示:
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
我在哪里可以找到“适当的容器日志文件”
jsf-api-2.1.7.jar jsf-impl-2.1.7.jar
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
Webapp的运行时类路径一团糟。
摆脱/ WEB-INF / lib中的那些JAR
javaee-web-api-7.0.jar
javax.faces-2.2.5.jar
javax.servlet-api-3.0.1.jar
第一个旨在用于编译针对Java EE 7容器的WAR / EAR。它不打算沿着针对像Tomcat这样的准JSP / Servlet容器的WAR安装。会感到困惑,并认为它实际上是Java EE 7容器(哦,高兴)。
第二个是Mojarra 2.2.5(API和impl捆绑在单一JAR风格中),它是您看到的最初麻烦的原因。您基本上是在针对先前已通过Tomcat加载的JSF 2.1 API加载JSF 2.2实现/lib。该javax.faces.lifecycle.ClientWindowFactory自JSF 2.2(也看到的是新@since的Javadoc中),而不是由JSF 2.1 API的认可。
/lib
javax.faces.lifecycle.ClientWindowFactory
@since
第三个应该由Tomcat本身提供。请注意,Java EE 7 JAR还包含JSF 2.2和Servlet 3.1 API。因此,这毕竟是JSF和Servlet API的三重冲突(一个来自Tomcat的/libAPI,一个来自WAR的/WEB- INF/libAPI和一个来自Java EE 7 JAR捆绑包的API;这不好)。
/WEB- INF/lib
无论如何,我建议也清理Tomcat的/ lib并将其保留为默认值。只需坚持WAR的/ WEB-INF / lib中的JAR。而且,如果你 确实 打算建立一个JSF 2.2的目标Web应用程序(第一双检version中faces- config.xml,如果它匹配),然后继续在javax.faces-2.2.5.jar和摆脱那些jsf-api-2.1.13.jar和jsf- impl-2.1.13.jar文件。
version
faces- config.xml
jsf-api-2.1.13.jar
jsf- impl-2.1.13.jar