【问题标题】:JSF with facelets in Tomcat7Tomcat7 中带有 facelets 的 JSF
【发布时间】:2011-08-03 09:45:59
【问题描述】:

我正在尝试将带有 Facelets 1.1.14 的 JSF 2.0 应用程序部署到 Tomcat7。我收到以下异常:

INFO: Initializing Mojarra 2.0.0 (FCS b23) for context '/AdminUI'

3 Aug, 2011 7:44:32 PM com.sun.faces.spi.InjectionProviderFactory createInstance

INFO: JSF1048: PostConstruct/PreDestroy annotations present.  ManagedBeans methods marked with these annotations will have said annotations processed.
3 Aug, 2011 7:44:33 PM com.sun.faces.config.ConfigManager initialized
INFO: Unsanitized stacktrace from failed start...
java.lang.NullPointerException
        at com.sun.faces.util.Util.loadClass(Util.java:200)
        at com.sun.faces.config.processor.AbstractConfigProcessor.loadClass(AbstractConfigProcessor.java:312)
        at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.processHandlerClass(FaceletTaglibConfigProcessor.java:416)
        at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.processTags(FaceletTaglibConfigProcessor.java:370)
        at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.processTagLibrary(FaceletTaglibConfigProcessor.java:313)
        at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.process(FaceletTaglibConfigProcessor.java:262)
        at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:337)
        at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:219)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
        at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
        at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
3 Aug, 2011 7:44:33 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
3 Aug, 2011 7:44:33 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/AdminUI] startup failed due to previous errors
3 Aug, 2011 7:44:33 PM com.sun.faces.config.ConfigureListener contextDestroyed
SEVERE: Unexpected exception when attempting to tear down the Mojarra runtime
java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory
        at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:804)
        at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:306)
        at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:104)
        at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:305)
        at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4763)
        at org.apache.catalina.core.StandardContext$4.run(StandardContext.java:5472)
        at java.lang.Thread.run(Thread.java:662)
        at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5481)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:225)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)    
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932)    
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1363)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:294)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1233)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1391)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1401)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1380)
        at java.lang.Thread.run(Thread.java:662)
3 Aug, 2011 7:44:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/AdminUI] appears to have started a thread named [Mojarra-ResourceCache-1-thread-1] but has failed to stop it. This is very likely to create a memory leak.

我在 /WEB-INF/lib/ 下有以下 jars

activation-1.1.jar
antlr-2.7.6.jar
asm-3.1.jar
cglib-2.2.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.final.jar
hibernate-core-3.6.5.final.jar
hibernate-entitymanager-3.6.5.final.jar
hibernate-jpa-2.0-api-1.0.0.final.jar
hibernate-validator-4.0.2.GA.jar
javassist-3.12.0.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.3.jar
jsf-api-2.0.jar
jsf-impl-2.0.0.jar
jta-1.1.jar
slf4j-api-1.6.1.jar
stax-api-1.0-2.jar

如何解决?

【问题讨论】:

    标签: jsf-2 facelets tomcat7


    【解决方案1】:

    JSF 2.0 附带了 Facelets 2.0。 Facelets 1.x JAR 文件只会与此冲突。您应该删除 Facelets 1.x JAR 文件。

    在 Tomcat 上使用 Facelets 开发 JSF 2.0 所需的所有 JAR 文件是 jsf-api.jarjsf-impl.jar

    【讨论】:

    • 我从我的应用程序中删除了 facelets jar,但在部署时仍然发现相同的错误
    • 那么你的classpath还是被污染了。 /WEB-INF/lib 现在有哪些 JAR?您是否曾经操作过 JDK/JRE 和 Tomcat 自己的库和/或类路径管理?如果是这样,请撤消这一切。 JDK/JRE 和 Tomcat7 应保持默认修剪。
    • 我通过在我的库中添加罐子来编辑我的帖子。配置是否正确?我从不在 tomcat、JDK/JRE 上操作任何类路径。
    • 我看到您使用的是旧的 Mojarra 2.0.0。请先尝试使用最新的 2.1.2。你可以在这里得到它:javaserverfaces.java.net
    • @Pere:仅当您使用非 JEE 服务器(例如 Tomcat)时,它最终必须在 WAR 的 /WEB-INF/lib 中结束,否则您不应该提供它(如一个普通的 JEE 服务器已经提供了它)。
    猜你喜欢
    • 2012-04-19
    • 2012-07-19
    • 1970-01-01
    • 2011-02-10
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多