Today all these URLs are behaving w/ client-side saving. Unfortunately following deployment or when I haven't used the app in awhile: * ViewExpiredException is thrown after an action. This is surprising since I'm using client-side saving. * Typing into hello-prime.jsf's Autocomplete tab's Autocomplete box hangs.
http://notcourage-jsf.appspot.com/hello-prime.jsf <http://notcourage-jsf.appspot.com/hello-prime.jsf> http://notcourage-jsf.appspot.com/bank-balance.jsf<http://notcourage-jsf.appspot.com/hello-prime.jsf> <http://notcourage-jsf.appspot.com/hello-prime.jsf> http://notcourage-jsf.appspot.com/bank-balance-ajax.jsf<http://notcourage-jsf.appspot.com/hello-prime.jsf> <http://notcourage-jsf.appspot.com/hello-prime.jsf>valid id's are id00{1-3} password is "secret" http://notcourage-jsf.appspot.com/context.jsf<http://notcourage-jsf.appspot.com/hello-prime.jsf> -- shows stateSavingMethod The reason I'm interested in appengine is it is the only auto-scaling cloud I'm aware of. When you use AWS or the like, you must choose/manage the OS/webServer/appServer, scale, & deal w/ data center failover. Having managed 1,000 servers, I certainly appreciate the simplification which clouds offer but language-specific clouds like Heroku & appengine yield greater simplification. On Fri, Dec 10, 2010 at 1:20 AM, Werner Punz <[email protected]> wrote: > Ok last mail regarding it, I just posted a single message regarding all > this in the developers list, maybe one of the server side developers has an > idea if we can fix this on our side, but the behavior especially since it > seems to be come less and less over time, looks eerily like a cache issue on > GAEs side to me, from time to time the memcache delivers null instead of the > object although the object still is not evicted. > > > Werner > > > Am 10.12.10 10:03, schrieb Werner Punz: > > Ok correction, there is something fishy going on, it still is related to >> GAE though, I now set a keepalive and still occasionally from time to >> time I am getting a no view can be found exception, the funny stuff is >> that once I am triggering the ajax part a few seconds later it is picked >> up again. >> >> I assume now following, that from time to time the cloud simply does not >> deliver session objects (probably a serialisation deserialisation >> issue), but a few seconds later it is picking them up again if they are >> still available. >> >> You can reproduce the issue on my testing site: >> http://testinck4040.appspot.com/ >> >> I will investigate more, but I guess the fault here lies really on GAE >> and there is not too much we can do, unless someone has posted an api >> hook or workaround which bypasses the problem. It should not be the key >> in the session because the keepalive definitely triggers the >> session.getAttribute functions, also it happens only occasionally and >> shortly after it is picked up again, which means the session object then >> is not null anymore but is there again. >> >> >> >> >> Werner >> >> >> Am 10.12.10 09:31, schrieb Werner Punz: >> >>> Hi Ken, sorry this will become a long answer, first of all: >>> >>> http://people.apache.org/~werpu/testinck4040.tar.gz >>> >>> is the download of the small sample project I did, you need maven to run >>> it you can deploy directly once you have setup the project by using >>> mvn gae:deploy and you can run locally by using mvn gae:run. >>> You also can run it into a standard jetty stack by running it via mvn >>> jetty:run-exploded or mvn jetty:run. >>> >>> Secondly, I assume half of your problems are mapping problems, I ran >>> into with the auto assumption GAE does on the mapping if you dont >>> explicitely redirect and use an ending pattern instead of a path pattern. >>> >>> Secondly to the session, I dont think my assumption is invalid in fact >>> it just fills a little bit of the gaps the link leave in the >>> understanding. >>> >>> I will give you a more detailed example why I recommended to use some >>> kind of keepalive to keep the session alive. >>> >>> The session is not a classical session as app servers do it, but more >>> along the lines of a mem cache with a rather short timeout period, and >>> supportive to it some serialisation into the cloud. As it seems either >>> due to a bug or something else, the session bombs out after 5 minutes if >>> nothing is done, and that is reproducable, ignoring the timeout settings >>> in the web.xml. I am not sure if this is a problem of the implementation >>> of the session or one of the jetty version used. But I assume it is a >>> problem of the implementation being a cache based one. >>> >>> Now what the link says is, that you should use set and getAttributes to >>> keep the sesssion alive. Now if you trigger a refresh directly against >>> the server by using an ajax call at least with server side state saving >>> exactly this happens by restoring the component tree from the session >>> object. With client side state saving you probably need to trigger a >>> keepalive code on the server which keeps the session fresh. >>> >>> So in the end we run into two issues, first, there is some weird mapping >>> bug or redirection bug in GAE which can be resolved by using file ending >>> pattern mappings and redirects on the index.jsp, secondly >>> we deal with a short session time which cannot be altered, we need to >>> set some keepalive code which triggers the session.getAttribte and >>> setAttribute one way or the other very often periodically to keep the >>> cache in "ram - this is fluent in the cloud", third, make sure that all >>> which goes into the session is serialisable and also make sure that if >>> you have transient data in the serialisable objects, that those are >>> properly restored because the serialisation can happen any time. >>> >>> Third you have a session limit, which from what I can gather should be >>> big enough to deal with jsf, but nevertheless if you run into issues, >>> then switch over to client side state saving. >>> (The golden rule client side only does not apply anymore) >>> >>> I am not sure how well all those restrictions play in conjunction with >>> the more complex ajax component frameworks, but nevertheless, GAE is >>> somewhat outside of what you can expect from a classical JEE container >>> point of view and if you want to build a startup on top of that chain, >>> then give it a proper testing upfront. >>> >>> Honestly spoken I could not give any recommendation blindly to go with a >>> JSF GAE combination, before doing so I would be testing the entire stack >>> at least for a few mandays to know what to expect, but even before >>> spending time on that, I would probably go for a more conservative >>> proven stack and pay the webhoster for hosting my JEE infrastructure. >>> After all GAE is more or less a one way street, sure you have the APIs >>> but as soon as you bind yourself to the data store in the cloud it will >>> be hard to move back, and add to that that there is a load of bugs in >>> the JDO and JPA connectors from what I could gather, so it probably >>> might be better simply to use the native cloud storage apis instead of >>> going for their JDO and JPA high level layers. >>> >>> >>> >>> Werner >>> >>> >>> >>> Am 10.12.10 05:25, schrieb ken keller: >>> >>>> Werner, >>>> >>>> Thx for digging into this. >>>> >>>> I think you're incorrect about how httpsession works. Here is an article >>>> about gae httpsession: >>>> http://blog.comtaste.com/2010/07/managing_session_data_in_gae_a.html >>>> If you want a consistent behaviour you need to invoke setAttribute again >>>> after having modified the Person object in the session. >>>> >>>> http://code.google.com/appengine/docs/java/config/appconfig.html#Enabling_Sessions >>>> >>>> >>>> Because App Engine stores session data in the *datastore and >>>> memcache*, all >>>> values stored in the session must implement the java.io.Serializable >>>> interface. >>>> >>>> <http://blog.comtaste.com/2010/07/managing_session_data_in_gae_a.html >>>> >Thing >>>> >>>> >>>> is I was getting the ViewExpiredException even w/ client-side state >>>> saving. >>>> (I consider this option a great scalability advantage of jsf. wicket >>>> seems >>>> to use httpsession.) >>>> >>>> Here's a thoughtful article which recommends jsf2 over wicket because >>>> of the >>>> active component libs: >>>> http://www.theserverside.com/discussions/thread.tss?thread_id=60755 >>>> <http://www.theserverside.com/discussions/thread.tss?thread_id=60755 >>>> >Any >>>> opinions on the pros/cons of richfaces, primefaces, icefaces? >>>> >>>> On Thu, Dec 9, 2010 at 5:01 PM, Werner Punz<[email protected]> >>>> wrote: >>>> >>>> Ok I have to add something, another issue is, that google does not >>>>> adhere >>>>> to the session-timeout values given in the web.xml. >>>>> Currently google handles the session in the app cache, and drops it >>>>> after a >>>>> view minutes no matter what, not sure what you can do about that. One >>>>> strategy might be to apply some kind of keepalive to the browser >>>>> which sends >>>>> a keepalive ajax request periodically to keep the cache alive. Also if >>>>> possible shift the state saving to client as recommended earlier. The >>>>> keepalive itself might work out well to keep the app alive but >>>>> probably both >>>>> measures have to be added. >>>>> >>>>> What I assume now is that you ran into a bunch of those issues, >>>>> literally >>>>> all on the App Engine side. If you are aware of them you can work >>>>> around >>>>> them if not oh well. >>>>> >>>>> Werner >>>>> >>>>> >>>>> Am 10.12.10 01:43, schrieb Werner Punz: >>>>> >>>>> Ok took me a while to get everything together, since this is my first >>>>> >>>>>> App Engine Project project. But I think i have all info now. >>>>>> First it seems that both server and client side state handling now >>>>>> works >>>>>> (since 1.4 that is). >>>>>> Secondly, MyFaces works fine with GAE so does the MyFaces Ajax. >>>>>> >>>>>> here is my example: http://testinck4040.appspot.com/ >>>>>> >>>>>> The MyFaces configuration also is correct, you have to add: >>>>>> >>>>>> <!-- >>>>>> 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> >>>>>> >>>>>> To the web.xml and also have to enable sesssion handling on the gae >>>>>> side >>>>>> as documented. >>>>>> >>>>>> One thing I noticed however is following, if you do not redirect >>>>>> properly to a real jsf page, you will get the ViewExpired exception >>>>>> you >>>>>> were getting hence I set my welcome file to index.jsp >>>>>> with a simple redirect on the jsp side so that the jsf page is >>>>>> properly >>>>>> accessed: >>>>>> >>>>>> <body> >>>>>> <% response.sendRedirect("welcome.jsf"); %> >>>>>> <body> >>>>>> >>>>>> The funny stuff was that in the original setting GAE was picking up my >>>>>> original index.xhtml file but was doing some jsf remapping for one >>>>>> reason or the other (otherwise I would not have gotten the view >>>>>> expired >>>>>> exception), but for some strange kind of reason everything went >>>>>> haywire >>>>>> because it was not passing down the proper view but triggering jsf due >>>>>> to some internal path mapping probably. Either way doing the proper >>>>>> jsf >>>>>> ending mapping and redirection resolves that. >>>>>> >>>>>> Either way outside of that the view id must point properly to the jsf >>>>>> page I could not find any pitfall, I will give you a download link to >>>>>> the full project tomorrow, so that you can try it out yourself. As you >>>>>> can see in the demo ajax works fine. >>>>>> >>>>>> Here are quick links to my web.xml files and appenging-web.xml files, >>>>>> the full download will follow tomorrow. >>>>>> >>>>>> http://www.pastie.org/1363893 >>>>>> >>>>>> http://www.pastie.org/1363894 >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Werner >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Am 10.12.10 00:50, schrieb Werner Punz: >>>>>> >>>>>> Ok Ken, so far I have setup my testproject and on ajax I run into the >>>>>>> same crypto exception you have been reporting (state saving method >>>>>>> server) this points towards a bug in the non ajax part somewhere, I >>>>>>> will >>>>>>> keep you informed about my results. >>>>>>> >>>>>>> Werner >>>>>>> >>>>>>> >>>>>>> Am 09.12.10 23:05, schrieb Werner Punz: >>>>>>> >>>>>>> Ok another hint, there is a config param which has to be set to >>>>>>>> prevent >>>>>>>> the crypto exception which you face: >>>>>>>> see https://issues.apache.org/jira/browse/MYFACES-2606 >>>>>>>> >>>>>>>> see also >>>>>>>> http://myfaces.apache.org/core20/googleappenginesupport.html >>>>>>>> >>>>>>>> Werner >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Am 09.12.10 22:10, schrieb ken keller: >>>>>>>> >>>>>>>> I use both of those. >>>>>>>>> >>>>>>>>> I've started playing with wicket because Gavin recommends JSF or >>>>>>>>> wicket >>>>>>>>> (both have component models). wicket doesn't appear to have active >>>>>>>>> component >>>>>>>>> libs like richfaces, primefaces, icefaces. >>>>>>>>> >>>>>>>>> I'm surprised that richfaces adores mojarra. The lists >>>>>>>>> http://java.net/projects/javaserverfaces/lists have low activity. >>>>>>>>> Issues >>>>>>>>> http://java.net/jira/browse/JAVASERVERFACES/ seem to get resolved. >>>>>>>>> >>>>>>>>> I can only dream of a framework: >>>>>>>>> * Reliable on gae. >>>>>>>>> * Several component lib developers conforming to an open >>>>>>>>> look&feel std >>>>>>>>> like >>>>>>>>> nimbus. >>>>>>>>> * Client-side validation first to avoid server load& bandwidth for >>>>>>>>> silly >>>>>>>>> mistakes like not filling in a required field. >>>>>>>>> >>>>>>>>> On Thu, Dec 9, 2010 at 12:21 PM, Werner Punz<[email protected] >>>>>>>>> > >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Ok here is a hint which could indicate to the root of your >>>>>>>>> problems, >>>>>>>>> >>>>>>>>>> apparently GAE has session handling disabled you have to enable >>>>>>>>>> it. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> <sessions-enabled>true</sessions-enabled >>>>>>>>>> >>>>>>>>>> in the appeninge-web.xml file to enable it. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Also some links indicate you should only use state saving client. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Werner >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Am 09.12.10 20:42, schrieb Werner Punz: >>>>>>>>>> >>>>>>>>>> Ok this could be an indication to the viewstate issue you are >>>>>>>>>> facing >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> http://java.dzone.com/news/jsf2-configuration-google-app >>>>>>>>>>> >>>>>>>>>>> seems like GAE has its fair share of problems or the underlying >>>>>>>>>>> container of GAE that is. >>>>>>>>>>> >>>>>>>>>>> All I can say, if it is just for learning purposes try to program >>>>>>>>>>> your >>>>>>>>>>> program locally and when it comes to deployment find a hoster >>>>>>>>>>> which >>>>>>>>>>> allows you to use your own app stack. As for the ajax stuff, I >>>>>>>>>>> will >>>>>>>>>>> give >>>>>>>>>>> GAE a try as I said, but I assume your problem is related to the >>>>>>>>>>> other >>>>>>>>>>> session scope problems GAE seems to have. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Werner >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Am 09.12.10 20:38, schrieb Werner Punz: >>>>>>>>>>> >>>>>>>>>>> Ok I cannot really help with the viewExpired Problem except for >>>>>>>>>>> >>>>>>>>>>>> that it >>>>>>>>>>>> indicates a problem on GAEs side. >>>>>>>>>>>> >>>>>>>>>>>> But I ran your Ajax problem quickly through and for me it works >>>>>>>>>>>> locally >>>>>>>>>>>> here. So I assume you run into a GAE related issue here as well. >>>>>>>>>>>> >>>>>>>>>>>> I will do a GAE testsetup as my scarce time permits to run this >>>>>>>>>>>> through, >>>>>>>>>>>> but I really assume a gae related problem or a deployment >>>>>>>>>>>> related >>>>>>>>>>>> problem here. >>>>>>>>>>>> It would be interesting to know if in the ajax case the browser >>>>>>>>>>>> throws >>>>>>>>>>>> any errors. What does the browser error console say? >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Werner >>>>>>>>>>>> >>>>>>>>>>>> Am 24.10.10 20:14, schrieb ken keller: >>>>>>>>>>>> >>>>>>>>>>>> Yesterday evening I noticed java.io.InvalidObjectException >>>>>>>>>>>> stopped >>>>>>>>>>>> >>>>>>>>>>>>> being >>>>>>>>>>>>> thrown. I don't know why but I hope it is related to >>>>>>>>>>>>> switching from >>>>>>>>>>>>> eclipse >>>>>>>>>>>>> to intellij& not due to gae. (I also learned facelets is >>>>>>>>>>>>> built into >>>>>>>>>>>>> jsf2 so >>>>>>>>>>>>> a separate jar isn't required.) >>>>>>>>>>>>> >>>>>>>>>>>>> I have two new problems which only happen on live gae--not >>>>>>>>>>>>> dev gae: >>>>>>>>>>>>> >>>>>>>>>>>>> 1) I'm testing jsf-basics.zip on >>>>>>>>>>>>> http://www.coreservlets.com/JSF-Tutorial/jsf2/code/. >>>>>>>>>>>>> * open bank-lookup.jsf >>>>>>>>>>>>> * fill in form >>>>>>>>>>>>> * click [Show Current Balance] >>>>>>>>>>>>> * the correct jsf page is displayed >>>>>>>>>>>>> * click chrome's Back >>>>>>>>>>>>> * javax.faces.application.ViewExpiredException is thrown >>>>>>>>>>>>> (whether >>>>>>>>>>>>> using >>>>>>>>>>>>> client or server state saving): >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.shared_impl.util.StateUtils reconstruct: >>>>>>>>>>>>> View >>>>>>>>>>>>> State >>>>>>>>>>>>> cannot be reconstructed >>>>>>>>>>>>> javax.faces.FacesException: >>>>>>>>>>>>> javax.faces.application.ViewExpiredException >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.shared_impl.util.StateUtils.decrypt(StateUtils.java: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> 490) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.shared_impl.util.StateUtils.reconstruct(StateUtils.java: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> 378) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.renderkit.html.HtmlResponseStateManager.getSavedState(Ht >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> mlResponseStateManager.java: >>>>>>>>>>>>> 213) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.renderkit.html.HtmlResponseStateManager.getState(HtmlRes >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ponseStateManager.java: >>>>>>>>>>>>> 160) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.res >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> toreView >>>>>>>>>>>>> >>>>>>>>>>>>> (DefaultFaceletsStateManagementStrategy.java: >>>>>>>>>>>>> 140) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.application.jsp.JspStateManagerImpl.restoreView(JspState >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ManagerImpl.java: >>>>>>>>>>>>> 388) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.shared_impl.view.ViewDeclarationLanguageBase.restoreView >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> (ViewDeclarationLanguageBase.java: >>>>>>>>>>>>> 106) >>>>>>>>>>>>> at >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.restoreView >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> (FaceletViewDeclarationLanguage.java: >>>>>>>>>>>>> 1277) >>>>>>>>>>>>> .... >>>>>>>>>>>>> >>>>>>>>>>>>> This doesn't happen if I submit the form with errors, fix >>>>>>>>>>>>> them,& >>>>>>>>>>>>> click >>>>>>>>>>>>> [Show Current Balance] button: >>>>>>>>>>>>> * open bank-lookup.jsf >>>>>>>>>>>>> * click [Show Current Balance] button >>>>>>>>>>>>> * validation errors are shown (post back) >>>>>>>>>>>>> * correct errors >>>>>>>>>>>>> * click [Show Current Balance] button >>>>>>>>>>>>> * click Back button >>>>>>>>>>>>> >>>>>>>>>>>>> 2) A simple use of<f:ajax> doesn't update: >>>>>>>>>>>>> >>>>>>>>>>>>> <h:selectOneMenu id="menu" value="#{bankingBean.customerId}"> >>>>>>>>>>>>> <f:ajax event="change" execute="@this" render="register"/> >>>>>>>>>>>>> <f:selectItems value="#{bankingBean.customerIds}"/> >>>>>>>>>>>>> </h:selectOneMenu> >>>>>>>>>>>>> <h:outputText id="register" value="#{bankingBean.customerId}"/> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, Oct 21, 2010 at 9:32 PM, ken keller<[email protected]> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> I'm a JSF2/myfaces rookie. I have it working w/ Eclipse >>>>>>>>>>>>> Helios& gae >>>>>>>>>>>>> >>>>>>>>>>>>> Eclipse plugin. When I deploy it& visit my test page, a blank >>>>>>>>>>>>>> page is >>>>>>>>>>>>>> displayed& the log entry is appended to this message. It >>>>>>>>>>>>>> appears to >>>>>>>>>>>>>> be a >>>>>>>>>>>>>> session deserialization problem. Thx. for your help. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> javax.servlet.ServletException: java.lang.RuntimeException: >>>>>>>>>>>>>> java.io.InvalidObjectException: enum constant attributes >>>>>>>>>>>>>> does not >>>>>>>>>>>>>> exist in class javax.faces.component.UIComponent$PropertyKeys >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:240) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at org.mortbay.jetty.Server.handle(Server.java:326) >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:261) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:8486) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:8484) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:418) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:572) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.tracing.TraceContext.runInContext(TraceContext.java:688) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at java.lang.Thread.run(Thread.java:636) >>>>>>>>>>>>>> Caused by: java.lang.RuntimeException: >>>>>>>>>>>>>> java.io.InvalidObjectException: enum constant attributes >>>>>>>>>>>>>> does not >>>>>>>>>>>>>> exist in class javax.faces.component.UIComponent$PropertyKeys >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java:413) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.SessionManager.createSessionFromEntity(SessionManager.java:376) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.SessionManager.loadSession(SessionManager.java:314) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.SessionManager.getSession(SessionManager.java:284) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.servlet.AbstractSessionManager.getHttpSession(AbstractSessionManager.java:237) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.servlet.SessionHandler.setRequestedId(SessionHandler.java:246) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:136) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:238) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> ... 21 more >>>>>>>>>>>>>> Caused by: java.io.InvalidObjectException: enum constant >>>>>>>>>>>>>> attributes >>>>>>>>>>>>>> does not exist in class >>>>>>>>>>>>>> javax.faces.component.UIComponent$PropertyKeys >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1721) >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1343) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readArray(ObjectInputStream.java:1684) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readArray(ObjectInputStream.java:1684) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readArray(ObjectInputStream.java:1684) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at java.util.HashMap.readObject(HashMap.java:1047) >>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:616) >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:991) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1865) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readArray(ObjectInputStream.java:1684) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1928) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1890) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1928) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1890) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at java.util.HashMap.readObject(HashMap.java:1047) >>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:616) >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:991) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1865) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java:411) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> ... 30 more >>>>>>>>>>>>>> Caused by: java.lang.IllegalArgumentException: No enum const >>>>>>>>>>>>>> class >>>>>>>>>>>>>> javax.faces.component.UIComponent$PropertyKeys.attributes >>>>>>>>>>>>>> at java.lang.Enum.valueOf(Enum.java:214) >>>>>>>>>>>>>> at >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1719) >>>>>>>>>>>>>> >>>>>>>>>>>>>> ... 69 more >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>> >>> >>> >> >> >> > >

