Last Modified: July 10, 2014 SummaryIn the grand tradition of practicing what you preach, the Google AppEngine for Java leverages the Datastore (built atop BigTable) and Memcache frameworks for session persistence. It seems that, over time, a small percentage of Datastore operations will fail. When attempting to display a web page containing JSF input components, a "com.google.appengine.api.datastore.DatastoreTimeoutException" (sample stack trace) may be encountered by your web application. Once this error page is encountered in your application, no other page will work until your session times out. According to Don Schwartz of Google, the next release of the Google AppEngine for Java will include "improved retry and error handling logic" that are intended to lessen the likelihood of frameworks such as JSF, Struts, etc. encountering this problem. Recommended SolutionThis problem still manifested itself in version 1.2.6 of the AppEngine SDK. You can work around this problem by setting the following context parameter in your web.xml file.
There are costs and benefits to saving the view state in the client tier. The "JavaServer Faces" forum on forums.sun.com has a thread that summarizes the difference between the client and server options for the javax.faces.STATE_SAVING_METHOD configuration parameter. Essentially, with the client option, view information is stored as a Base64 encoded value in a hidden field on your web form with the name com.sun.faces.VIEW . Mert Caliskan's weblog discusses the pros and cons of storing state on the client or server.References
|
Google App Engine for Java > Using JavaServer Faces on the Google App Engine > Compatibility Issues >