I guess so. org.apache.myfaces.RENDER_FORM_VIEW_STATE_AT_BEGIN was introduced in MyFaces 2.2.4. Before it I was using the jQuery blockUI plugin: http://malsup.com/jquery/block/
2014-10-24 11:58 GMT-02:00 Donatas Čiukšys <donatas.ciuk...@mitsoft.lt>: > Good point, I assume org.apache.myfaces.RENDER_FORM_VIEW_STATE_AT_BEGIN > should be present in all JSF applications, isn't it? > > > -----Original Message----- > From: Felipe Jaekel [mailto:fkjae...@gmail.com] > Sent: Wednesday, October 22, 2014 4:06 PM > To: MyFaces Discussion > Subject: Re: How to investigate reasons for NullPointer and ViewExpired > exceptions? > > Actually they are set on the response, but my point is that some > inconsistent view state cached by the browser may be triggering the > exception inside MyFaces code, so the CacheControlPhaseListener is worth a > try. > > > Another problem I had was that some users with slow internet were trying to > use the page before it was fully loaded, so as the view state hidden field > was not rendered yet, a ViewExpiredException was thrown... > This behavior was with server state saving. Maybe with client the result > can be this NPE from your stackTrace. I solved it with this context > parameter: > > <context-param> > <param-name>org.apache.myfaces.RENDER_FORM_VIEW_STATE_AT_BEGIN</param-name> > <param-value>true</param-value> > </context-param> > > > Another thing is that if you deploy a new version of your application with > active sessions, state handling exceptions will happen in the pages that > have changed their structure changed somehow. This may look obvious, but I > didn't found anything about it on Google. With server state saving I was > getting a StringIndexOutOfBoundsException, and with client if I don't > remember exactly what was the exception, but it could be the same NPE you > are getting. I solved it using Tomcat's parallel deployment. > > 2014-10-22 10:28 GMT-02:00 Donatas Čiukšys <donatas.ciuk...@mitsoft.lt>: > > > > don't know why but adding the same headers on my main facelets template > > didn't worked > > > > Cache control headers must be specified on HttpServletRequest object; > > > > My question is about investigating NPE when they occur in MyFaces code, > > not in my code. > > > > -----Original Message----- > > From: Felipe Jaekel [mailto:fkjae...@gmail.com] > > Sent: Wednesday, October 22, 2014 2:30 PM > > To: MyFaces Discussion > > Subject: Re: How to investigate reasons for NullPointer and ViewExpired > > exceptions? > > > > Recently I had a hard time to figure out some NPE with ViewScoped beans. > > > > In my case some actions on the bean were not fired, so subsequent actions > > ended in a NPE because required objects where not initialized. Problem > was > > happening only in Firefox in case the user pressed F5 after doing some > > stuff on the page. > > > > I suspected off cache handling. Adding a phase listener to add the no > cache > > headers solved the problem. This is the code I'm using: (don't know why > but > > adding the same headers on my main facelets template didn't worked) > > > > /** > > * Desativa cache de páginas xhtml > > * > > * > > > http://turbomanage.wordpress.com/2006/08/08/disable-browser-caching-in-jsf/ > > * > > > > > https://code.google.com/p/omnifaces/source/browse/src/org/omnifaces/filter/CacheControlFilter.java?name=1.7 > > * > > * @author fjaekel > > */ > > public class CacheControlPhaseListener implements PhaseListener > > { > > private static final long serialVersionUID = 1L; > > > > @Override > > public PhaseId getPhaseId() > > { > > //System.out.println("response " + > Formatter.formatDateTimeWithSeconds(new > > Date())); > > return PhaseId.RENDER_RESPONSE; > > } > > > > @Override > > public void afterPhase(PhaseEvent event) > > { > > } > > > > @Override > > public void beforePhase(PhaseEvent event) > > { > > FacesContext facesContext = event.getFacesContext(); > > > > //HttpServletRequest request = (HttpServletRequest) > > facesContext.getExternalContext().getRequest(); > > //System.out.println(request.getRequestURI()); > > > > HttpServletResponse response = (HttpServletResponse) > > facesContext.getExternalContext().getResponse(); > > response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate"); > > response.setDateHeader("Expires", 0); > > response.setHeader("Pragma", "no-cache"); // Backwards compatibility for > > HTTP 1.0. > > } > > } > > > > 2014-10-22 8:12 GMT-02:00 Donatas Čiukšys <donatas.ciuk...@mitsoft.lt>: > > > > > Dear MyFaces experts, > > > > > > > > > > > > I’m using TomEE 1.7.1 Plus, MyFaces 2.2.5, PrimeFaces 4.0.21, Omnifaces > > > 1.8.1, OCPSoft Rewrite 2.0.12. > > > > > > State saving: CLIENT; Session timeout: 60minutes; most pages are using > > > @ViewScoped beans (javax.faces.view.ViewScoped); Partial state saving > is > > > not disabled; Encryption and compression are disabled. > > > > > > > > > > > > Production system is working in general (4 requests per second), no > user > > > complaints, but in logs I find these two stack traces (shown at the > > bottom) > > > constantly (2-3 cases per day). I don’t think that there are any > problem > > > with MyFaces, but I seek any advice how to collect forensic info on > what > > > causes the stack traces below. The problems is that I cannot reproduce > > > those cases on my dev machine (I try short session timeout, > invalidating > > > sessions, multiple tabs, …). > > > > > > > > > > > > Google says, that using state saving: CLIENT should prevent > > > ViewExpiredExceptions. I double-checked, that all my ViewScoped and > > > SessionScoped beans are Serializable, and use only Serializable > classes. > > > Yet still I get ViewExpiredException - No saved view state could be > found > > > for the view identifier. What could be the reasons? > > > > > > > > > > > > I’m already printing for each stack trace all the request info I can > > think > > > of (as you see in the bottom), where could I dig for additional > forensic > > > info? Does MyFaces have any tracing facility? > > > > > > > > > > > > java.lang.NullPointerException: null > > > > > > at > > > > > > org.apache.myfaces.application.StateManagerImpl.restoreView(StateManagerImpl.java:147) > > > ~[myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.myfaces.shared.view.ViewDeclarationLanguageBase.restoreView(ViewDeclarationLanguageBase.java:104) > > > ~[myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.myfaces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:336) > > > ~[myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper....java:82) > > > ~[myfaces-api-2.2.5.jar:2.2.5] > > > > > > at > > > > > > javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper....java:82) > > > ~[myfaces-api-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.omnifaces.viewhandler.RestorableViewHandler.restoreView(RestorableViewHandler.java:66) > > > ~[omnifaces-1.8.1.jar:1.8.1-20140603] > > > > > > at > > > > > > org.ocpsoft.rewrite.faces.RewriteViewHandler.restoreView(RewriteViewHandler.java:102) > > > ~[rewrite-integration-faces-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:168) > > > ~[myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196) > > > [myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143) > > > [myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) > > > [myfaces-api-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > > > [tomcat7-websocket.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:41) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:268) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:188) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > lt.asseco.tar.setup.jsf.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:30) > > > [CharacterEncodingFilter.class:na] > > > > > > at > > > org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) > > > [omnifaces-1.8.1.jar:1.8.1-20140603] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve....java:220) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve....java:122) > > > [catalina.jar:7.0.55] > > > > > > at > > > org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) > > > [tomee-catalina-1.7.1.jar:1.7.1] > > > > > > at > > > > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) > > > [catalina.jar:7.0.55] > > > > > > at > > > org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2440) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2429) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > > > [na:1.7.0_67] > > > > > > at > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > > > [na:1.7.0_67] > > > > > > at > > > > > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread....java:61) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at java.lang.Thread.run(Thread.java:745) > > > [na:1.7.0_67] > > > > > > > > > > > > ERROR 2014-10-07 11:05:54,879 ##### REQUEST ANALYSIS #####: host: > > > 85.206.12.185, method: POST, requestURL: > > > > > > https://www.e-tar.lt/portal/legalAct.html?documentId=6c1b67f0e01411e388bee944977d73d2 > > , > > > AJAX: false, sessionId: 06A20B649055AC25B4455630ABB84966.asHost2, > > > userAgent: Mozilla/5.0 (Windows NT 6.0; rv:32.0) Gecko/20100101 > > > Firefox/32.0, contentTypesFromAccept: > > > text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 > > > > > > javax.faces.application.ViewExpiredException: /portal/legalAct.html - > No > > > saved view state could be found for the view identifier: > > > /portal/legalAct.html > > > > > > at > > > > > > org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:181) > > > ~[myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196) > > > [myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143) > > > [myfaces-impl-2.2.5.jar:2.2.5] > > > > > > at > > > javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) > > > [myfaces-api-2.2.5.jar:2.2.5] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > > > [tomcat7-websocket.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:41) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:268) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:188) > > > [rewrite-servlet-2.0.12.Final.jar:2.0.12.Final] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > lt.asseco.tar.setup.jsf.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:30) > > > [CharacterEncodingFilter.class:na] > > > > > > at > > > org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) > > > [omnifaces-1.8.1.jar:1.8.1-20140603] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve....java:220) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve....java:122) > > > [catalina.jar:7.0.55] > > > > > > at > > > org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) > > > [tomee-catalina-1.7.1.jar:1.7.1] > > > > > > at > > > > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) > > > [catalina.jar:7.0.55] > > > > > > at > > > > > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) > > > [catalina.jar:7.0.55] > > > > > > at > > > org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2440) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2429) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at > > > > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > > > [na:1.7.0_67] > > > > > > at > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > > > [na:1.7.0_67] > > > > > > at > > > > > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread....java:61) > > > [tomcat-coyote.jar:7.0.55] > > > > > > at java.lang.Thread.run(Thread.java:745) > > > [na:1.7.0_67] > > > > > > > > >