2013-04-18 10 views
6

Possiedo un'applicazione JSF 2.1.21 con metodo di salvataggio stato client. Sto anche usando PrimeFaces 3.5 + Tomcat 7.0.37.Intermittente java.lang.IndexOutOfBoundsException su javax.faces.component.AttachedObjectListHolder.restoreState

Uso il gestore di eccezioni ajax completo OmniFaces per visualizzare una pagina di errore personalizzata e inviarmi un'e-mail con lo stacktrace quando si verifica un problema.

Ogni giorno ricevo almeno un'email con java.lang.IndexOutOfBoundsException. Sembra essere correlato alla ridistribuzione dell'applicazione, ma non sono in grado di riprodurlo.

Ecco la 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) 

Tutte le idee?

Grazie, Phillip

+0

Si prega di condividere il codice anche come. Qualcuno può sapere qual è il tuo codice? –

+0

Questa è la traccia dello stack? No 'causato da'? – kolossus

+0

correlati/duplicati: http://stackoverflow.com/questions/12094077/jsf-session-fail-over-and-partial-state-saving È correlato alle sessioni dirty dopo la ridistribuzione. Nota la risposta dell'OP in fondo che specifica un parametro di contesto che dovrebbe risolvere questo problema. Provaci. Può o non può risolvere il tuo problema particolare. – BalusC

risposta

2

StackOverflow alla fine mi ricorda questa domanda esistenza, così mi prendo qualche minuto per rispondere come ho risolto.

Suppongo che non sia possibile sostituire una webapp JSF in esecuzione senza eccezioni relative allo stato di visualizzazione se la struttura della pagina a cui l'utente stava accedendo è stata modificata in qualche modo.

Sono stato in grado di risolvere perfettamente questo utilizzando la distribuzione parallela di Tomcat, in cui le versioni precedenti della webapp rimangono sul server fino a quando non hanno sessioni attive.

+0

la risposta corret specificata in http://stackoverflow.com/questions/12094077/jsf-session-fail-over-and-partial-state-save – Anupam

+0

In questo caso non esiste una risposta "corretta", ma diversi approcci per gestire la situazione ... – FkJ

+0

Hehehe ur vaild qui ok fammi essere specifico "Il link è la soluzione che ha funzionato perfettamente per la stessa identica eccezione". – Anupam

Problemi correlati