マシン上のJBoss AS 7.1の 2 つの異なるインスタンスを2 つの異なるポートで起動し、同じアプリケーションを (同じルート コンテキストで) 両方にデプロイしました。この構成では、同じブラウザー (Chrome、Firefox、または Conkeror のいずれか) でタブ ブラウジングを行っていたため、決定論的に次の例外が発生しました。
javax.servlet.ServletException: viewId:/whatever.xhtml - View /whatever.xhtml could not be restored.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
さまざまなブラウザでブラウジングしていたときは問題ありませんでした。
さまざまなブラウザーが Cookie を保存する方法をさらに調査したところ、このようなタブ ブラウジングの問題を回避するには、組み合わせ ( IP /パス)を一意にする必要があり、ポートが機能しないことがわかりました。つまり、Cookie はIPごと、パスごとに保存されますが、ポートごとには保存されません。そのため、同じ IP とパス (ただし、明らかに別のポート) にデプロイされた 2 つの異なるアプリケーションで同じブラウザーを使用してタブ ブラウジングを行うと、ブラウザーが 2 つのセッションを混同するため、ビューが期限切れになります。私の設定が本番環境で発生する可能性は低いと認識していますが、質問したいと思います:
この Cookie の整理動作を定義する標準はありますか?
複数の JSF アプリケーションでタブ ブラウジングを行う際に、セッションの混乱を避けるために知っておくべきベスト プラクティスはありますか?
これに関係があり
javax.faces.STATE_SAVING_METHOD
ますか(私の設定ではに設定されていました"server"
)?