[ 
https://issues.apache.org/jira/browse/MYFACES-3000?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Werner Punz resolved MYFACES-3000.
----------------------------------

       Resolution: Invalid
    Fix Version/s: 2.0.3-SNAPSHOT

Ok I did another set of testruns, the error is not reproducable anymore with 
the default crypto settings. I guess it was a broken local deployment which 
triggered it.
I am setting this one to invalid, since GAE seems to run also stable.


> 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
>             Fix For: 2.0.3-SNAPSHOT
>
>
> 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.

Reply via email to