2013-03-30 10 views
11

私はこの設定を数日間実行しようとしていますが、まだ運がありません。ここで私が使用してきたテスト・アプリケーションの:WebLogic 12cでMyFaces + CDIを使用できますか?

@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をせずに、このサンプルを実行するには、正常に動作します(それが必要のように「test」をレンダリングする)、しかし、ときに私MyFacesをWARファイルにデプロイして、weblogic.xml CDI内で必要な設定を行うと、動作が停止しているようです(少なくとも、統合はJSFとCDIになります)、出力HTMLには何も表示されません。 MyFaces自体は大丈夫だと思われる。

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

  • いるWebLogic Server 12cの(12.1.1.0)を私はちょうど
  • MyFacesを確認するために昨日の開発版をダウンロードして、パッチが最新でなければなりませんWEB-INF/libsの内に配備-2.1.10、
  • beans.xmlのはorg.apache.myfaces.webapp.StartupServletContextListenerは、WebLogicがMYFを使用するように設定されてweb.xmlの
  • に登録されている場所に
  • ですweblogic.xmlのに

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> 

:それはCDIの実装だとして

  • WL12cは溶接が装備されているが、1.1.3。
  • JSF実装を切り替えるときはいつでも、JSF/CDIを自分で統合する責任があると思います。これは本当ですか(確かに希望ではありません)?

物事私がこれまで試した:

  • は、それが何らかの形で一緒に溶接し、MyFacesののり望ん、ミックスにMyFacesのCODIを追加しますが、それはしませんでした。
  • CDI実装としてWeldをOpenWebBeansで置き換えます。これは最初はうまくいくように見えましたが、後でいくつかの面白いClassCastExceptionsをいくつかの内部sun.reflectionパッケージで与えました。これは、とにかく避けたい解決策です。
  • web.xmlとfaces-config.xmlのさまざまなオプションを使用してWeldを手動で起動します。これは、Weldにすべての種類のエラーメッセージをログに記録するようになっているようです。 Weblogicを新しいWeldバージョンにアップグレードすることによって、ある程度これらは「修正」できますが、これを行うたびに次のエラーに遭遇します。繰り返しますが、私はむしろこのルートも避けたいと思います。

WL12cでMyFacesを使用してCDIサポートを維持しているのは本当に難しいですか、それともわかりませんか?助けてくれてありがとう。

+0

: - CODIはMyFacesので、他のものとは独立しているので、それはここに助けることができません。 - 完全統合を使用したい場合、CDI 1.0アプリケーションサーバーは特定のCDI実装(あるベンダーの、場合によっては特定のバージョンの)にバインドされています。 –

+0

使用方法: com.sun.faces。* MyFaces-Coreを使用したい場合は意味がありません。 –

+0

Ok.So WeblogicはWeld 1.1.3それで?私は気にしません、私は本当にMyFacesを実行することに興味がありますが、CDIの統合を壊すことはありません。実際、私はむしろ残りのweblogicスタックを残しておきたいと思います。 com.sun.faces。*パッケージについては、これらはMyFacesディストリビューションの一部ではないと思いますので、weblogic.xmlから削除します(設定は実際は(古い)weblogicスレッドに基づいています:https:/ /forums.oracle.com/forums/thread.jspa?threadID=2335546)。しかし、WL12でMyFacesを使用することが可能かどうかはまだ分かりません。何かヒント? –

答えて

1

私は恐れることがないのです。溶接グルーコードがそこにある必要があります。 jsf用のwlsデプロイ可能ライブラリの一部である、小さな小さな統合層は、myfacesでは利用できません....

+1

私は同じ結論に達しました。 WL12にはcom.oracle.injection.provider.weld_1.0.0.0という名前のこのjarファイルが同梱されていますが、Mojarra/Weld統合コードが含まれていると思います。残念なことに、CDIもJSFも標準には含まれていません。また、新しいWL12パッチ(12.1.1.0.4)を使って同じ結果を試しました(2011年11月11日までWeld 1.1.3でも実行されています)。私はこれが最も正確な答えであると信じているので(私は可能ではありません)、賞金期間が終わるとすぐにこの回答を受け入れます。 –

+0

また、WLSエンドユーザライセンスでは、WLSコンテナの交換は許可されません。 – struberg

1

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

私は尋ねた理由は、この文は次のとおりです。

私はどこかで読ん

(覚えていないことができます)あなたはJSFの実装を切り替えることを決定するたびにJSFは/自分で

をCDI統合するための責任だということ

かなり正確です。コンテナは、JSF implとCDI implの全体的な重ね合わせを行うコンテナです。独自のJSF implで置き換えると、コンテナが与えるものをバイパスしています。まだお持ちでない場合は、CDIがカスタムJSFインプリメントで起動するかどうかをアプリ内のWeld Servletで有効にすることを強くお勧めします。

+0

はい。 2ヶ月が経ちましたので、私たちが試したことはまったく覚えていませんが、http://docs.jboss.org/weld/reference/1.1.5.Finalの 'jsf'に記載されているさまざまな設定オプションを試してみました。 /en-US/html/ri-spi.html、運が無ければ。私はブートストラップのcdi/jsf統合にいくつかのリスナークラスを設定しても構いませんが、私は統合クラスの束を書くつもりはありません。 –

+0

weldサーブレットに切り替えることは別の設定ではなく、別のビルド構造です。あなたはJSFをあなたのWARに移しているので、CDIランタイムもあなたの戦争に移します。 JSFは単にJNDI上でBeanマネージャを検索することができるので、一発の価値があります。 –

+0

実際には、私はそれを試しても、戦争の中でウェルド・コアとウェルド・サーブレットをパッケージ化することはできましたが、どちらもうまく動作しませんでした。とにかく、このジョンと他の人たちにあなたの助けをしてくれてありがとうが、私たちは今mojarraに固執することに決めました。ちょっと簡単だね。 –

3

あなたの例では明確ではないものがかなりあります。例えば。 @RequestScopedはどのパッケージから来ますか?それはjavax.enterprise.context.RequestScoped(動作するはずです)またはjavax.faces.bean.RequestScoped(動作しません)ですか? CDI Beanのみを使用している場合(javax.faces.beanのものはありません)、JSFコンテナとCDIコンテナが互いに統合する唯一の方法は、実際にはUnified Expression Language javax.el.E​​LResolverです。そして、これは箱の中で動くはずです。

org.apache.myfaces.webapp.StartupServletContextListenerは実際には必要ありません。 FacesServletを設定するだけです。

問題は、JSF EGが、JSF implを盲目的にアクティブ化するためにServletContainerInitializer [1]を使用していることが原因である可能性があります。 Servlet-3.0仕様では、自動的にどのようにしてを有効にするか定義するだけで、これを回避するのは難しいですが、の機能を再度有効にする方法はありません。

FYI [1] http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html

+0

RequestScopedはenterprise.contextからのものです。私たちは実際には動作していないELを通じてCDIマネージドBeanを解決しようとしています。あなたの "盲目的に活性化するjsf"のコメントについては、同時に2つのアクティブなJSF実装で終わった可能性がありますか? –

+0

あなたは@Markusのコメントと一緒にいるようです。私はWeblogicのJSFデプロイメント(glassfish.jsf_1.0.0.0_2-1-5.jar)を見て、パッケージの一環としてMojarraを最初に登録するcom.bea.faces.WeblogicInjectionProviderを見ました。また、カスタム溶接(CDI)フレームワークがあるのは間違いないと思います。 –

関連する問題