Although the current implementation is in shambles, you can check out
my GAE + GWT project,
http://code.google.com/p/xbook . I based my
file abstraction layer on Google File Service, and will properly cite
all modified / source based on ty tung's work when it's in an alpha
state and released in a jar w/ proper documentation. You have to
check out the source, and then set up two projects, one is the xCore
project, which contains all the gwt source, and the second is the main
trunk, that has all the appengine code, with spatterings of gwt for
taste. The current host page needed is X.jsp, and there's a method in
src/ai/yx/common/client/COMMON.java called xServer() that you will
need to set to your server's proper address. There's lot of other
changes needed that I haven't uploaded either, so you may just want to
look at the ai/yx/file/client folder and rip out the classes and
queries I use.
When this code is "good enough" by my standards, I will release it
properly, but until then, you can feel free to hack on what I hacked
from Ty Tung's implementation. Please note that I use GWT, so all
objects must be detached before sending them to the client over RPC.
I also find that the appengine server doesn't like performing queries
with multiple non-detached objects in scope, so I close and reopen the
PersistenceManager between each nuclear transaction. Because I do
this, I almost always call pm.detachCopy(), which ensures that all
fields are filled from the DB {as, I do believe, it performs lazy
loading so that some fields won't be filled unless they are directly
accessed within your server side code, but I could easily be wrong on
this}.
Many thanks to Ty Tung for writing Google File Service; I wouldn't
have built the xFile Service without it!