Websphere 8.5 - Ошибка инициализации контекста веб-приложения JSF: cleanupInitMaps

У меня есть веб-приложение JSF 2.1, разработанное с дистрибутивом mojarra 2.1.17, которое работает с любыми проблемами на контейнере JBoss 6.1: теперь мне нужно сменить сервер приложений, и я должен использовать websphere AS 8.5, который родился с дистрибутивом MyFaces JSF 2. Я пытаюсь развернуть и запустить свое веб-приложение, игнорируя MyFaces и используя Mojarra, настраивая EAR, как показано в официальном руководстве IBM, настраивая совместно используемую библиотеку с включенным mojarra dist, связывая его с новым загрузчиком классов, созданным исключительно для моего экземпляра server1 WAS 8.5. Это не работает вообще, и когда я развертываю свое веб-приложение, я получаю эту трассировку стека, когда БЫЛ пытаться запустить приложение:

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

Я также отладил метод cleanupInitMaps() в mojarra dist и увидел, что он пытается получить две переменные типа Map из FacesContext с именем threadInitContext и initContextServletContext, но получает значение null:

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

Как это вызвано и как я могу решить это?

2 ответа

Решение

Хорошо, я решил это!! во-первых, я установил загрузчик классов моего экземпляра сервера на PARENT_LAST + перезагрузка. Затем я выполнил следующие действия: 1) поместил Mojarra lib в простую разделяемую библиотеку; 2) развернуть ear с помощью веб-модуля jsf внутри и перед запуском приложения из консоли, я связал разделяемый lib с ним и со всеми модулями внутри ear; 3) я установил загрузчик классов приложения на PARENT_LAST; 4) запустите приложение, и оно работает!

Это все!!

Я столкнулся с той же проблемой. В моем случае проблема была решена путем удаления javax.faces зависимость от .war артефакт. Похоже, конфликт между javax.faces реализация по WS и зависимость в моем .war файл. Если вы используете Maven, то вы можете установить область для вас javax.faces зависимость что-то вроде этого:

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

См. Также: исключение нулевого указателя в com.sun.faces.config.InitFacesContext.cleanupInitMaps

Другие вопросы по тегам