Chạy trên JSF 2.0.9, Weblogic 10.3.4. Bây giờ chúng tôi đang chạy JSF trong môi trường sản xuất của chúng tôi nhưng đã gặp phải một số vấn đề với phiên sao chép và thất bại hơn. Chúng tôi đang sử dụng viewscope cho đậu của chúng tôi và tôi đã đảm bảo họ là Serializable/thoáng qua và các biến thoáng qua có hiệu quả không quốc tịch. Tuy nhiên phiên không thành công không hoạt động. Tôi đã làm thử nghiệm rộng rãi và được quản lý để làm cho nó làm việc bằng cách thiết lập các params sau trong web.xmlLỗi phiên JSF và Tiết kiệm một phần của tiểu bang
<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>
Nếu tôi đặt STATE_SAVING_METHOD
-server
tôi nhận được một ngoại lệ viewexpired trên failover. Nếu tôi đặt để client
với PARTIAL_STATE_SAVING
để true
tôi nhận được lỗi sau:
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)
Vì vậy, câu hỏi của tôi là những:
- là
STATE_SAVING_METHOD
-client
&PARTIAL_STATE_SAVING
-false
cách duy nhất tôi sẽ chuyển đổi dự phòng thành công? - Chi phí của kết hợp khách hàng/sai là bao nhiêu. Bộ nhớ/cpu này có mở rộng không?
- Đây có phải là lỗi và nếu có thì giải quyết trong 2.1 hoặc 2.2?
Xin cảm ơn trước.
Chúng tôi có IIS. Phiên sao chép được xử lý bởi weblogic và không phải là cân bằng tải. Đã có phiên cố định nhưng đây không phải là vấn đề. Vấn đề là sự thất bại của phiên làm việc không thành công đến một jvm mới. – andyfinch
Nếu bạn đã đặt phiên cố định trên máy chủ weblogic, máy chủ weblogic sẽ tạo một cookie chỉ với thông tin phiên người dùng trên nút đó. Tôi đoán là cookie này không được chuyển sang nút thứ hai khi một chuyển đổi dự phòng xảy ra vì cá thể weblogic chỉ biết về chính nó. Đó là lý do tại sao tôi nói rằng bạn nên thử và bật các phiên dính trên Load Balancer vì cân bằng tải có thể truyền cookie đến nút thứ hai. –
Cảm ơn nhưng tôi không nghĩ rằng tôi đã rõ ràng trong câu hỏi ban đầu của tôi. Phiên sao chép đang diễn ra nhưng không chính xác với các phiên JSF. Chỉ một phần của ứng dụng của chúng tôi sử dụng JSF tại các phiên mo và không jsf đang sao chép ok. – andyfinch