2013-04-18 10 views
6

Mam aplikację JSF 2.1.21 z metodą zapisywania stanu klienta. Używam także PrimeFaces 3.5 + Tomcat 7.0.37.Intermittent java.lang.IndexOutOfBoundsException na javax.faces.component.AttachedObjectListHolder.restoreState

Używam OmniFaces pełny obsługi wyjątku ajax, aby wyświetlić niestandardową stronę błędu i wyślij mi e-mail ze stosu, gdy wystąpi problem.

Każdego dnia otrzymuję co najmniej jeden e-mail z wyjątkiem java.lang.IndexOutOfBoundsException. Wydaje się, że jest to związane z ponownym wdrożeniem aplikacji, ale nie mogę jej odtworzyć.

Oto StackTrace:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
at java.util.ArrayList.rangeCheck(ArrayList.java:604) 
at java.util.ArrayList.get(ArrayList.java:382) 
at javax.faces.component.AttachedObjectListHolder.restoreState(AttachedObjectListHolder.java:165) 
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1566) 
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy$2.visit(FaceletPartialStateManagementStrategy.java:380) 
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1612) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 
at javax.faces.component.UIForm.visitTree(UIForm.java:371) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.restoreView(FaceletPartialStateManagementStrategy.java:367) 
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:138) 
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:569) 
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:141) 
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:301) 
at org.omnifaces.viewhandler.RestorableViewHandler.restoreView(RestorableViewHandler.java:59) 
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:192) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at br.com.spdata.tecnico.filter.MobileFilter.doFilter(MobileFilter.java:53) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) 
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) 
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) 
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) 
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at com.googlecode.psiprobe.Tomcat70AgentValve.invoke(Tomcat70AgentValve.java:38) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:722) 

Jakieś pomysły?

Dzięki Phillip

+0

Proszę również udostępnić kod. Jak każdy może wiedzieć, jaki jest Twój kod? –

+0

Czy to jest cały ślad stosu? Nie "spowodowany przez"? – kolossus

+0

Powiązane/duplikaty: http://stackoverflow.com/questions/12094077/jsf-session-fail-over-and-partial-state-saving Jest to związane z brudnymi sesjami po przeniesieniu. Zwróć uwagę na własną odpowiedź OP na dole, która określa parametr kontekstu, który powinien to naprawić. Spróbuj. Może, ale nie musi, rozwiązać twój konkretny problem. – BalusC

Odpowiedz

2

StackOverflow ostatecznie przypomina mi o tym istnienie zapytania, więc wezmę kilka minut, aby odpowiedzieć w jaki sposób rozwiązać go.

Chyba nie można zastąpić działającej aplikacji WWW JSF bez wyjątków związanych z widokiem, jeśli struktura strony, do której użytkownik uzyskiwał dostęp, uległa zmianie.

Udało mi się to doskonale rozwiązać za pomocą równoległego wdrożenia Tomcat, gdzie starsze wersje aplikacji pozostają na serwerze, dopóki nie będą miały aktywnych sesji.

+0

odpowiedź corret określona w http://stackoverflow.com/questions/12094077/jsf-session-fail-over-and-partial-state-saving – Anupam

+0

Nie ma "poprawnej" odpowiedzi w tym przypadku, ale różne podejścia do obsługi sytuacja ... – FkJ

+0

Hehehe ur vaild here OK, pozwól mi być konkretny "Link jest rozwiązaniem, które działało idealnie dla dokładnie tego samego wyjątku". – Anupam

Powiązane problemy