JSF 2.0.9、Weblogic 10.3.4で動作します。現時点では、本番環境でJSFを実行していますが、セッション複製とフェイルオーバーに関する問題が発生しました。私たちは豆のためにビュースコープを使用しています。私はそれらがシリアライザブル/トランジェントであることと、一時的な変数が効果的にステートレスであることを保証しています。ただし、セッションフェイルオーバーは機能しません。私は、広範なテストを行って、それは私がserver
からSTATE_SAVING_METHOD
は、私がフェイルオーバーにviewexpired例外を取得した場合のweb.xmlJSFセッションのフェールオーバーと部分的な状態の保存
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
で次のparamsを設定することにより、作業を取得するために管理しています。私はtrue
にPARTIAL_STATE_SAVING
でclient
に設定した場合、私は次のエラーを取得する:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at javax.faces.component.AttachedObjectListHolder.restoreState(AttachedObjectListHolder.java:165)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1433)
at com.sun.faces.application.view.StateManagementStrategyImpl$1.visit(StateManagementStrategyImpl.java:265)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1507)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1521)
at com.sun.faces.component.visit.VisitUtils.doFullNonIteratingVisit(VisitUtils.java:75)
at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:282)
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:181)
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:448)
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:187)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:111)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
だから私の質問はこれらです:
- は
STATE_SAVING_METHOD
です -client
&PARTIAL_STATE_SAVING
- 私はするつもりだfalse
唯一の方法フェイルオーバーを機能させるには? - クライアントと偽の組み合わせのコストはいくらですか?このメモリ/ CPUは豊富ですか?
- これはバグですか?そうであれば、それは2.1または2.2で解決されますか?
ありがとうございます。
私たちはIISを持っています。セッションの複製は、ロード・バランサではなくweblogicによって処理されます。スティッキセッションはオンですが、これは問題ではありません。問題は、セッションが新しいjvmに正しくフェールオーバーできなかったことです。 – andyfinch
weblogicサーバでスティッキセッションを設定している場合、weblogicサーバは、そのノード上のユーザセッション情報を持つクッキーを作成します。私の推測では、weblogicインスタンスはそれ自体を認識しているだけなので、フェイルオーバーが発生したときにこのクッキーが2番目のノードに渡されることはありません。そのため、ロード・バランサがクッキーを2番目のノードに渡すことができるため、Load Balancerでスティッキー・セッションを有効にしてください。 –
ありがとうございますが、私は私の最初の質問で私がはっきりしていたとは思わない。セッションの複製は行われていますが、JSFセッションでは正しく動作しません。私たちのアプリの一部だけが、moおよびnon jsfセッションでJSFを使用しています。 – andyfinch