このセットアップを数日間実行しようとしていますが、まだうまくいきません。私が使用しているテストアプリケーションは次のとおりです。
@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 を使用するのは本当に難しいのでしょうか? 助けてくれてありがとう。