13

このセットアップを数日間実行しようとしていますが、まだうまくいきません。私が使用しているテストアプリケーションは次のとおりです。

@Named
@RequestScoped
public class Test {

    private String test = "test";
    public String getTest() { return test; }
    public void setTest(String test) { this.test = test; }
}

そしてjsfページで:

<h:outputText value="#{test.test}"/>

MyFaces なしでこのサンプルを実行すると正常に動作します (本来のように「テスト」をレンダリングします) が、WAR ファイルに MyFaces をデプロイし、weblogic.xml 内で必要な構成を行うと、CDI が動作を停止するようです (または、少なくとも、JSF と JSF との統合CDI) であり、出力 html には何も表示されません。ただし、MyFaces 自体は問題ないようです。

私の基本的な構成は次のとおりです。

  • WebLogic Server 12c (12.1.1.0)、念のため昨日開発バージョンをダウンロードしたので、パッチは最新のはずです
  • WEB-INF/libs 内にデプロイされた MyFaces-2.1.10
  • Beans.xml が配置されている
  • org.apache.myfaces.webapp.StartupServletContextListener が web.xml に登録されました
  • WebLogic は、weblogic.xml を使用して MyFaces を使用するように構成されています

Weblogic.xml の内容:

<prefer-application-packages>
    <package-name>javax.faces.*</package-name>
    <package-name>com.sun.faces.*</package-name>
    <package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
    <resource-name>javax.faces.*</resource-name>
    <resource-name>com.sun.faces.*</resource-name>
    <resource-name>com.bea.faces.*</resource-name>
    <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
    <resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
</prefer-application-resources>

私がこれまでに学んだこと:

  • WL12c には CDI 実装として Weld 1.1.3 が搭載されています。
  • JSF実装を切り替えることを決定したときはいつでも、JSF / CDIを自分で統合する責任があるとどこかで読みました(どこか思い出せません)。これは本当ですか?

私がこれまでに試したこと:

  • MyFaces CODI をミックスに追加して、何らかの方法で Weld と MyFaces を接着することを期待しましたが、そうではありませんでした。
  • Weld を CDI 実装として OpenWebBeans に置き換えます。これは最初は機能しているように見えましたが、後で内部の sun.reflection パッケージであらゆる種類の興味深い ClassCastExceptions を発生させました。これはとにかく避けたい解決策です。
  • web.xml および faces-config.xml のさまざまなオプションを使用して、Weld を手動でトリガーします。これは、あらゆる種類のエラー メッセージでログをあふれさせるという点で Weld を動かしているようです。これらは、weblogic を新しい Weld バージョンにアップグレードすることである程度「修正」できますが、これを行うたびに次のエラーが発生します。繰り返しますが、このルートも避けたいと思います。

CDI サポートを維持しながら WL12c で MyFaces を使用するのは本当に難しいのでしょうか? 助けてくれてありがとう。

4

3 に答える 3

1

アプリ内で Weld サーブレットを有効にしてみましたか?

私が尋ねた理由は、次のステートメントのためです。

JSF実装を切り替えることを決定したときはいつでも、JSF / CDIを自分で統合する責任があることをどこかで読んだ(どこか思い出せない)

これはかなり正確です。コンテナーは、JSF impl と CDI impl を組み合わせたレイヤー全体をまとめて実行するものです。それを独自の JSF impl に置き換えると、コンテナーが提供するものをバイパスします。まだ行っていない場合は、アプリで Weld Servlet を有効にして、カスタム JSF impl で CDI が起動するかどうかを確認することを強くお勧めします。

于 2013-05-31T20:15:17.377 に答える