4

JBoss 6.1 コンテナーで問題なく実行される mojarra 2.1.17 ディストリビューションで開発された JSF 2.1 Web アプリケーションを取得しました。アプリケーション サーバーを変更する必要があり、MyFaces JSF 2 ディストリビューションで生まれた websphere AS 8.5 を使用する必要があります。MyFaces を無視して Mojarra を使用して Web アプリケーションをデプロイおよび開始しようとしています。IBM 公式ガイドが示すように EAR を構成し、mojarra dist を含めて共有ライブラリを構成し、WAS 8.5 の server1 インスタンス専用に作成された新しいクラスローダーにリンクします。まったく機能せず、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 から threadInitContext と initContextServletContext という変数の種類の 2 つの Map を取得しようとしているnullを取得していることがわかりました。

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

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

2

わかりました、解決しました!! まず、サーバー インスタンスのクラスローダーを PARENT_LAST + 再起動に設定します。次に、次の手順に従いました。1)Mojarra libを単純な共有ライブラリに入れます。2)jsf Webモジュールを使用してearを展開し、コンソールからアプリケーションを開始する前に、共有ライブラリをそれにリンクし、ear内のすべてのモジュールにリンクしました。3) アプリケーション クラスローダーを PARENT_LAST に設定します。4)アプリを起動すると動作します!!

それで全部です !!

于 2013-09-26T06:16:39.857 に答える