【问题标题】:Websphere 8.5 - JSF webapp context init error: cleanupInitMapsWebsphere 8.5 - JSF webapp 上下文初始化错误:cleanupInitMaps
【发布时间】:2013-09-23 07:08:45
【问题描述】:

我有一个使用 mojarra 2.1.17 发行版开发的 JSF 2.1 Web 应用程序,它在 JBoss 6.1 容器上运行时遇到任何问题:现在我必须更改应用程序服务器,并且我必须使用与 MyFaces JSF 2 一起诞生的 websphere AS 8.5分布。我正在尝试部署和启动我的 webapp,忽略 MyFaces 并使用 Mojarra,将我的 EAR 配置为 IBM 官方指南显示,配置包含 mojarra dist 的共享库,将其链接到专门为我的 server1 WAS 8.5 实例创建的新类加载器。它根本不起作用,当我部署我的 web 应用程序时,当 WAS 尝试启动应用程序时,我得到了这个堆栈跟踪:

com.ibm.ws.exception.RuntimeWarning: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Failed to load webapp: null
        at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:432)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1175)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370)
        at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:639)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:774)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2182)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445)
        at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:388)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:116)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:994)
        at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:502)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862)
    Caused by: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Failed to load webapp: null
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:759)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
        ... 14 more
    Caused by: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: null
        at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:176)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:749)
        ... 16 more
    Caused by: java.lang.NullPointerException
        at com.sun.faces.config.InitFacesContext.cleanupInitMaps(InitFacesContext.java:283)
        at com.sun.faces.config.InitFacesContext.<init>(InitFacesContext.java:107)
        at com.sun.faces.config.FacesInitializer.onStartup(FacesInitializer.java:115)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.initializeServletContainerInitializers(WebAppImpl.java:613)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:409)
        at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
        at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
        ... 17 more

我也调试了 mojarra dist 的 cleanupInitMaps() 方法,我看到它试图从 FacesContext 中获取两个 Map 类型的变量,分别称为 threadInitContextinitContextServletContext 但得到 null :

Field threadMap = FacesContext.class.getDeclaredField("threadInitContext");
and 
Field initContextMap = FacesContext.class.getDeclaredField("initContextServletContext");

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: jsf-2 websphere mojarra facescontext


    【解决方案1】:

    我遇到了同样的问题。在我的情况下,通过从 .war 工件中删除 javax.faces 依赖项解决了问题。 WS 实现的javax.faces 与我的.war 文件中的依赖项之间似乎存在冲突。如果您使用 maven,那么您可以为您的 javax.faces 依赖项设置范围,如下所示:

        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <version>2.2.13</version>
            <scope>provided</scope>
        </dependency>
    

    另请参阅:Nullpointer exception at com.sun.faces.config.InitFacesContext.cleanupInitMaps

    【讨论】:

      【解决方案2】:

      好的,我解决了! 首先,我将服务器实例的类加载器设置为 PARENT_LAST + 重新启动。然后我按照以下步骤操作: 1) 将 Mojarra 库放入简单的共享库中; 2)在内部部署带有jsf web模块的ear,在从控制台启动应用程序之前,我将共享库链接到它以及ear内的所有模块; 3)我将应用程序类加载器设置为PARENT_LAST; 4)启动应用程序,它的工作原理!

      就是这样!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-09
        • 2015-04-26
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        相关资源
        最近更新 更多