You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Werner Punz (JIRA)" <de...@myfaces.apache.org> on 2010/12/12 22:15:01 UTC

[jira] Commented: (MYFACES-3000) Viewstate occasionally not restored

    [ https://issues.apache.org/jira/browse/MYFACES-3000?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12970658#action_12970658 ] 

Werner Punz commented on MYFACES-3000:
--------------------------------------

Ok I am still trying to reproduce the error here locally with default settings, I am not entirely sure if the error was not caused by a broken config which might have carried over by a broken deployment.
So please do not do anything on this issue until I come to a clear conclusion.


> Viewstate occasionally not restored
> -----------------------------------
>
>                 Key: MYFACES-3000
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3000
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.0.2
>         Environment: Deployment running under glassfish  or Google App engine but probably happens on all app servers.
>            Reporter: Werner Punz
>            Priority: Critical
>
> This is a tricky one. I made a small testing app thanks to the commentary of a user who wanted to run MyFaces in GAE and caused a condition which occasionally occurs, which prevents the ViewState to be found.
> Here is the mechanis. I have a small test app which loads a page. The page triggers a jsf.ajax request from time to time with render none, periodically but not connected to the session timeout I am getting single error returns from my ajax request from the server:
> Working Request before:
> Request
> j_id1631913672_61450686	j_id1631913672_61450686
> j_id1631913672_61450686_S...	1
> javax.faces.ViewState	XsWFBIdJ3cAipIW1n5/t3iVN5WSwWxZx2zbF0fTt/gvRo//LO3glFrGpAY8IMulyF7vG3zU1dN9lR7tFYcOwrVKKk107jlZKitmWUhl9XeNBb34eh5bt8QyDTVM=
> javax.faces.partial.ajax	true
> javax.faces.partial.execu...	menu @this
> javax.faces.source	menu
> menu	1
> menu2	1
> Response
> <?xml version="1.0" encoding="utf-8"?><partial-response><changes><update id="javax.faces.ViewState"><![CDATA[XsWFBIdJ3cAipIW1n5/t3iVN5WSwWxZx2zbF0fTt/gvRo//LO3glFrGpAY8IMulyOsU+YvfYynFlR7tFYcOwrVKKk107jlZKdUuJGd3B0bumy+XxfxY80nPViy4=]]></update></changes></partial-response>
> After that following error request:
> j_id1631913672_61450686	j_id1631913672_61450686
> j_id1631913672_61450686_S...	1
> javax.faces.ViewState	XsWFBIdJ3cAipIW1n5/t3iVN5WSwWxZx2zbF0fTt/gvRo//LO3glFrGpAY8IMulyOsU+YvfYynFlR7tFYcOwrVKKk107jlZKdUuJGd3B0bumy+XxfxY80nPViy4=
> javax.faces.partial.ajax	true
> javax.faces.partial.execu...	menu @this
> javax.faces.source	menu
> menu	1
> menu2	1
> <?xml version="1.0" encoding="utf-8"?><partial-response><error><error-name>javax.faces.application.ViewExpiredException</error-name><error-message><![CDATA[/welcome.jsfNo saved view state could be found for the view identifier: /welcome.jsf]]></error-message></error></partial-response>
> And aftert hat I am getting a normal answer again:
> j_id1631913672_61450686	j_id1631913672_61450686
> j_id1631913672_61450686_S...	1
> javax.faces.ViewState	XsWFBIdJ3cAipIW1n5/t3iVN5WSwWxZx2zbF0fTt/gvRo//LO3glFrGpAY8IMulyOsU+YvfYynFlR7tFYcOwrVKKk107jlZKdUuJGd3B0bumy+XxfxY80nPViy4=
> javax.faces.partial.ajax	true
> javax.faces.partial.execu...	menu @this
> javax.faces.source	menu
> menu	1
> menu2	1
> <?xml version="1.0" encoding="utf-8"?><partial-response><changes><update id="javax.faces.ViewState"><![CDATA[XsWFBIdJ3cAipIW1n5/t3iVN5WSwWxZx2zbF0fTt/gvRo//LO3glFrGpAY8IMuly5RE5nlKK54RlR7tFYcOwrVKKk107jlZK6f7NdUZRuvvbL7VYnmj4v8VmnIQ=]]></update></changes></partial-response>
> As it is visible here the viewstate between the error and the visible request are the same, it is just that in the first instance it was not able to restore the view
> The error I have gotten on the console is as follows:
> javax.faces.application.ViewExpiredException: /welcome.jsfNo saved view state could be found for the view identifier: /welcome.jsf
>         at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128)
>         at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
>         at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
>         at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
>         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
>         at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
>         at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
>         at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
>         at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
>         at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
>         at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
>         at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
>         at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
>         at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
>         at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
>         at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
>         at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
>         at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
>         at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
>         at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
>         at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
>         at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
>         at java.lang.Thread.run(Thread.java:680)
> The web.xml is as follows:
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
>     <context-param>
>         <param-name>javax.faces.PROJECT_STAGE</param-name>
>         <param-value>Development</param-value>
>     </context-param>
>     <context-param>
>         <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
>         <param-value>.xhtml</param-value>
>     </context-param>
>      <!--
>            We need to set annotation lifecycyle provider manually as org.apache.myfaces.config.annotation.NoInjectionAnnotationLifecycleProvider.
>            Other providers use some classes that are restricted on Google App Engine.
>         -->
>     <context-param>
>         <param-name>org.apache.myfaces.config.annotation.LifecycleProvider</param-name>
>         <param-value>org.apache.myfaces.config.annotation.NoInjectionAnnotationLifecycleProvider</param-value>
>     </context-param>
>         <!--
>             Need to set a secret to avoid javax.crypto.BadPaddingException.
>             "param-value" must be Base64 encoded.
>             More details: http://wiki.apache.org/myfaces/Secure_Your_Application
>          -->
>     <!--
>     <context-param>
>         <param-name>org.apache.myfaces.SECRET</param-name>
>         <param-value>NzY1NDMyMTA=</param-value>
>     </context-param>
>     -->
>      <!-- Defines the secret (Base64 encoded) used to initialize the secret key
>          for encryption algorithm. The size of it depends on the algorithm used for encryption -->
>    
>     <context-param>
>         <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
>         <param-value>server</param-value>
>     </context-param>
>     <servlet>
>         <servlet-name>Faces Servlet</servlet-name>
>         <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
>         <load-on-startup>1</load-on-startup>
>     </servlet>
>     <servlet-mapping>
>         <servlet-name>Faces Servlet</servlet-name>
>         <url-pattern>*.jsf</url-pattern>
>         <url-pattern>/faces/*</url-pattern>
>     </servlet-mapping>
>     <session-config>
>         <session-timeout>
>             30
>         </session-timeout>
>     </session-config>
>     <welcome-file-list>
>         <welcome-file>index.jsp</welcome-file>
>     </welcome-file-list>
>   
> </web-app>
> So the use encryption param is on default and no key overrides are set!
> The link to the app is as follows:
> http://people.apache.org/~werpu/tesinck4040.tar.bz2 (note that you have to remove the encryption param there from the web.xml)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.