1

JSF 2を使用してJBossで非常にうまく動作するアプリケーションがあります。JSF2、WebSphere、およびクラスローダーに関連する問題が発生しました。このとき、「コンテキスト'/medicao-web'のMojarra2.1.7を初期化しています」というメッセージが表示されます。次に、クラスローダーが正しいJSFクラスをロードしていると思います。

index.jsfにリダイレクトするために使用されるindex.jspがあります。index.jsfをリクエストしようとすると、無限ループと多くの例外が発生します。スタックトレースには「javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)」があり、いつかFacesServletを使用していると思います。しかし、ログには、JSFに関連する問題がJSPを読み取ろうとしていることもわかります。

また、同じ名前のJSPがないという別のページをリクエストしようとしました。arquivo.jsfをリクエストすると、次のようになります。

java.io.FileNotFoundException: JSPG0036E: Failed to find resource /arquivo.jsp
    at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:360)
    at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.handleRequest(AbstractJSPExtensionProcessor.java:331)
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:325)
    at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:415)
    at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:491)
    at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:159)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1443)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1384)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:852)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:785)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)

これは私のweb.xmlです:

<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>MedicaoCNI</display-name>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>medicao</param-value>
    </context-param>

    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
</web-app>

そしてこれは私のfaces-config.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
    <!-- <lifecycle>
        <phase-listener>org.cni.medicao.util.AuthenticationListener</phase-listener>
    </lifecycle> -->
    <navigation-rule>
        <from-view-id>/*</from-view-id>
        <navigation-case>
            <from-outcome>loginSucesso</from-outcome>
            <to-view-id>/usuario.jsf</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>loginFail</from-outcome>
            <to-view-id>/index.jsf</to-view-id>
            <redirect />
        </navigation-case>
        <navigation-case>
            <from-outcome>logoutSucesso</from-outcome>
            <to-view-id>/index.jsf</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>


</faces-config>

私のページはすべてXHTML形式です。また、プロジェクトにfacelets依存関係を追加しました。そして、私はMavenを使用しています。

PARENT_LASTをロードするクラスローダーを作成するために、いくつかの構成を行いました。正しいかどうかはわかりませんが、ログにはMojarra 2.1.7がロードされていると記載されていますが、問題はないと思います。

私の関連する投稿を見つけましたが、解決されていません:WebSphere7+のJSF2MojarraとPrimefaces

前もって感謝します。

アップデート:

javax.faces.DEFAULT_SUFFIXコンテキストパラメータを.xhtmlに追加しようとしました。その結果、arquivo.jsfを開こうとすると、XHTMLのソースが表示されます。ログにはMojarra2.1.7を初期化していると書かれていますが、ここでいくつかの競合があると感じています。

これは、耳のMavenモジュールの私の耳プラグイン構成です。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <version>5</version>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <earSourceDirectory>${basedir}\src\main\application\META-INF\ibmconfig</earSourceDirectory>
    </configuration>
</plugin>

\ src \ main \ application \ META-INF \ ibmconfigには、deployment.xmlがあります。

<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1241112964096">
  <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1241112964096" startingWeight="1" warClassLoaderPolicy="SINGLE">
    <classloader xmi:id="Classloader_1241112964096" mode="PARENT_LAST"/>
    <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1241112964096" startingWeight="10000" uri="medicao-web.war">
      <classloader xmi:id="Classloader_1241112964097" mode="PARENT_LAST"/>
    </modules>
  </deployedObject>
</appdeployment:Deployment>

そして、私のWebのMavenモジュールには、次の依存関係があります。

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.1.7</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.1.7</version>
</dependency>
<dependency>
    <groupId>com.sun.facelets</groupId>
    <artifactId>jsf-facelets</artifactId>
    <version>1.1.14</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>3.2</version>
    <scope>compile</scope>
</dependency>

何か問題がありますか?WebSphereは初めてで、JSF2で使用する必要があります。

アップデート:

jsf-faceletsの依存関係を削除しましたが、まだ機能していません。EARをエクスポートしてdeployment.xmlが存在するかどうかを確認しましたが、EAR内にパッケージ化されていません。何か問題がありますか?

アップデート:

今、私はこのチュートリアルに従っています:http ://www.webspheretools.com/sites/webspheretools.nsf/docs/How%20to%20set%20the%20class%20loading%20policy%20to%20parent%20last%20using%20configuration %20files%20shipped%20within%20the%20EAR

私のdeployment.xmlは\META-INF\ ibmconfig \ cells \ defaultCell \ Applications \ defaultApp \ deployments \ defaultAppの下にあり、私の耳のプラグインの構成は次のとおりです。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <version>5</version>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
    </configuration>
</plugin>

このように、EARをエクスポートするときにdeployment.xmlがパッケージ化されます。私のdeployment.xmlは、チュートリアルに示されているものと同じです。

とにかく、WebSphereにアプリケーションをデプロイすると、私のものを無視して、新しいdeployment.xmlが生成されます。次に、それでも最初に親をロードします。

4

2 に答える 2

1

さて、私の設定はすべて大丈夫でした。WebSphereのコンソールを使用してEARをインストールしようとしましたが、deployment.xmlが読み取られました。IBMが開発したWebSphere7プラグインに何か問題があると思います。アプリケーションが正しくインストールされていないため、deployment.xmlが無視されます。

アプリケーションを変更するたびに手動でアプリケーションをインストールするのはひどいので、今私の問題はIDEに関連していますが、この質問はそれに関するものではありません。

于 2012-06-13T13:42:49.700 に答える
0

websphere7はブリッジなしのJSF2をサポートしていないと思います。

于 2012-07-05T13:55:25.660 に答える