CDI会話を共有している2つのJSFコントローラーと3つのバッキングBeanがあります。最初のコントローラーが呼び出された後、JSF以外のWebアプリケーションが呼び出されてユーザーがログオンし(OpenAM / OpenSSO)、次に2番目のコントローラーが呼び出されます。会話IDは、2番目のコントローラーのページ要求に「?cid=1234」を追加することで保持されます。
私のコントローラーには次のような注釈が付けられています。
@Named(javax.inject.Named)
@ConversationScoped(javax.enterprise.context.ConversationScoped)
コントローラーは次のように注入されます。
@Inject(javax.inject.Inject)
プライベートな一時的な会話会話。(javax.enterprise.context.Conversation)
バッキングBeanには次のように注釈が付けられます。
@Named(javax.inject.Named)
これは、CDIにWeldを使用するJBoss7.1で実行されています。
これは正常に機能していましたが、無関係な変更を加えた後は機能しなくなりました。
ここでの問題は、最初のコントローラーが呼び出され、conversation.begin()を呼び出すと、返された会話IDが常に1になることです。さらに、2番目のコントローラーに戻ると、次のエラーが発生します。
org.jboss.weld.context.NonexistentConversationException:WELD-000321ID1の復元する会話が見つかりません
新しいセッションでWebアプリに何度もアクセスしてみました。また、さまざまなタブやさまざまなブラウザーからWebアプリにアクセスしてみました。会話ID「1」が常に返されます。また、私が知る限り、2つのコントローラー呼び出しの間のセッションまたは会話をいつでも強制終了することはありません。