[appengine-java] Re: DataStore Error 1000000 characters, but I'm not persisting

2010-02-10 Thread Jake
I've discovered my issue - Apache Wicket.  Wicket has it's own Session
that stores data in an ISessionStore.  Normally, this is backed by a
Disk, but can be backed with an HttpSession if set properly.  The
trick is that it stores a lot of state with each page, which I can
change now that I know the issue - prior to this point, my pages were
simple HTML.

My new question is this:  when does the HttpSession become persisted?
Are setAttribute(), getAttribute() calls to HttpSession equivalent to
datastore queries?  In that case, would I see a performance
improvement using MemCache with the HttpSession as a fallback?

Thanks!

Jake

On Feb 10, 11:23 am, Don Schwarz schwa...@google.com wrote:
 How much data are you storing in your session?  Currently, the serialized
 representation of a sessions contents must be  the 1MB entity limit.

 On Tue, Feb 9, 2010 at 12:46 PM, Jake jbrooko...@cast.org wrote:
  Hello,

  I'm getting the following error:

  java.lang.IllegalArgumentException: string property _values is too
  long.  It cannot exceed 100 characters.

  The trick is, I'm not persisting any Blobs and certainly none called
  _values.  I do have one object with a Blob field, but I'm not
  persisting anything to that field to cause the above exception.  Also,
  this is a new issue and that Blob has been in my application for
  awhile.  All I'm doing is viewing pages that query the datastore.  My
  admin panel doesn't show any quota issues.

  My newest change is that I'm uploading a 350K XML file (a book),
  applying some XSLT translation using Saxon and storing the result in
  an application variable, and displaying certain chunks of that file
  depending on the clicked page.

  I do have sessions enabled, which I fear is related, but I'm not sure
  how to resolve this.

  Thanks in advance for any help!

  Jake

  /titlepage
  java.lang.IllegalArgumentException: string property _values is too
  long.  It cannot exceed 100 characters.
         at

  com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:
  33)
         at

  com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:
  60)
         at com.google.appengine.api.datastore.DatastoreServiceImpl
  $2.run(DatastoreServiceImpl.java:163)
         at

  com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:
  30)
         at

  com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
  151)
         at

  com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
  131)
         at

  com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
  123)
         at com.google.apphosting.runtime.jetty.SessionManager
  $AppEngineSession.save(SessionManager.java:162)
         at

  com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:
  41)
         at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1084)
         at

  com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:
  43)
         at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1084)
         at
  org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
  360)
         at
  org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
  216)
         at
  org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
  181)
         at
  org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
  712)
         at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
  405)
         at

  com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:
  238)
         at
  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
  139)
         at org.mortbay.jetty.Server.handle(Server.java:313)
         at
  org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
  506)
         at org.mortbay.jetty.HttpConnection
  $RequestHandler.headerComplete(HttpConnection.java:830)
         at

  com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:
  76)
         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
         at

  com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:
  135)
         at
  com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:
  235)
         at com.google.apphosting.base.RuntimePb$EvaluationRuntime
  $6.handleBlockingRequest(RuntimePb.java:5485)
         at com.google.apphosting.base.RuntimePb$EvaluationRuntime
  $6.handleBlockingRequest(RuntimePb.java:5483)
         at

  com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:
  24)
         at 

Re: [appengine-java] Re: DataStore Error 1000000 characters, but I'm not persisting

2010-02-10 Thread Don Schwarz
On Wed, Feb 10, 2010 at 1:30 PM, Jake jbrooko...@cast.org wrote:

 I've discovered my issue - Apache Wicket.  Wicket has it's own Session
 that stores data in an ISessionStore.  Normally, this is backed by a
 Disk, but can be backed with an HttpSession if set properly.  The
 trick is that it stores a lot of state with each page, which I can
 change now that I know the issue - prior to this point, my pages were
 simple HTML.

 My new question is this:  when does the HttpSession become persisted?
 Are setAttribute(), getAttribute() calls to HttpSession equivalent to
 datastore queries?


No, we retrieve the session at the beginning of the request and persist it
at the end.


  In that case, would I see a performance
 improvement using MemCache with the HttpSession as a fallback?


HttpSession uses both memcache and datastore internally, so reads are going
to be fast unless that particular session has been evicted from memcache,
but mutating the session state will incur some additional latency at the end
of the request due to a datastore put call.


On Feb 10, 11:23 am, Don Schwarz schwa...@google.com wrote:
  How much data are you storing in your session?  Currently, the serialized
  representation of a sessions contents must be  the 1MB entity limit.
 
  On Tue, Feb 9, 2010 at 12:46 PM, Jake jbrooko...@cast.org wrote:
   Hello,
 
   I'm getting the following error:
 
   java.lang.IllegalArgumentException: string property _values is too
   long.  It cannot exceed 100 characters.
 
   The trick is, I'm not persisting any Blobs and certainly none called
   _values.  I do have one object with a Blob field, but I'm not
   persisting anything to that field to cause the above exception.  Also,
   this is a new issue and that Blob has been in my application for
   awhile.  All I'm doing is viewing pages that query the datastore.  My
   admin panel doesn't show any quota issues.
 
   My newest change is that I'm uploading a 350K XML file (a book),
   applying some XSLT translation using Saxon and storing the result in
   an application variable, and displaying certain chunks of that file
   depending on the clicked page.
 
   I do have sessions enabled, which I fear is related, but I'm not sure
   how to resolve this.
 
   Thanks in advance for any help!
 
   Jake
 
   /titlepage
   java.lang.IllegalArgumentException: string property _values is too
   long.  It cannot exceed 100 characters.
  at
 
  
 com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:
   33)
  at
 
  
 com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:
   60)
  at com.google.appengine.api.datastore.DatastoreServiceImpl
   $2.run(DatastoreServiceImpl.java:163)
  at
 
  
 com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:
   30)
  at
 
  
 com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
   151)
  at
 
  
 com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
   131)
  at
 
  
 com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
   123)
  at com.google.apphosting.runtime.jetty.SessionManager
   $AppEngineSession.save(SessionManager.java:162)
  at
 
  
 com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:
   41)
  at org.mortbay.jetty.servlet.ServletHandler
   $CachedChain.doFilter(ServletHandler.java:1084)
  at
 
  
 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:
   43)
  at org.mortbay.jetty.servlet.ServletHandler
   $CachedChain.doFilter(ServletHandler.java:1084)
  at
   org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
   360)
  at
   org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
   216)
  at
   org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
   181)
  at
   org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
   712)
  at
 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
   405)
  at
 
  
 com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:
   238)
  at
   org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
   139)
  at org.mortbay.jetty.Server.handle(Server.java:313)
  at
   org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
   506)
  at org.mortbay.jetty.HttpConnection
   $RequestHandler.headerComplete(HttpConnection.java:830)
  at
 
  
 com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:
   76)
  at
 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
  at