How to browse local Java App Engine datastore?

41,679

Solution 1

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: "At long last, the dev appserver has a data viewer. Start your app locally and point your browser to http://localhost:8888/_ah/admin http://localhost:8000/datastore* to check it out."

* as of 1.7.7

Solution 2

There's currently no datastore viewer for the Java SDK - one should be coming in the next SDK release. In the meantime, your best bet is to write your own admin interface with datastore viewing code - or wait for the next SDK release.

Java App Engine now has a local datastore viewer, accessible at http://localhost:8080/_ah/admin.

Solution 3

I have local datastore on my Windows+Eclipse environment on \war\WEB-INF\appengine-generated\local_db.bin

As far as I understood it uses internal format named "protocol buffers". I don't have external tools to present the file in human-readable format.

I'm using simple "viewer" code like this:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException 
{

    resp.setContentType("text/plain");

    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    final Query query = new Query("Table/Entity Name");
    //query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.DESCENDING);

    for (final Entity entity : datastore.prepare(query).asIterable()) {
        resp.getWriter().println(entity.getKey().toString());

        final Map<String, Object> properties = entity.getProperties();
        final String[] propertyNames = properties.keySet().toArray(
            new String[properties.size()]);
        for(final String propertyName : propertyNames) {
            resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
        }
    }
}

Solution 4

In the newest versions of the SDK (1.7.6+) the admin part of the dev server comes with it changed its location

Analyzing the server output logs we can see that it is accessible at:

http://localhost:8000

And the Datastore viewer:

http://localhost:8000/datastore

Looks pretty neat - according to google's new design guidlines.

Solution 5

Open the \war\WEB-INF\appengine-generated\local_db.bin file with a text editor, like Notepad++.

The data is scrambled but at least you can read it and you can copy to extract it.

Share:
41,679

Related videos on Youtube

Jim Blackler
Author by

Jim Blackler

I'm a software engineer with nearly 20 years commercial experience, and as a hobbyist even longer. I currently work for Google, before that you could find me in the videogames industry. I specialise in user-facing technology; browser and mobile handset applications.

Updated on December 25, 2020

Comments

  • Jim Blackler
    Jim Blackler over 3 years

    It seems there is no equivalent of Python App Engine's _ah/admin for the Java implementation of Google App Engine.

    Is there a manual way I can browse the datastore? Where are the files to be found on my machine? (I am using the App Engine plugin with Eclipse on OS X).

  • Paul
    Paul almost 15 years
    New admin interface is still not working with kinds/entities created by Native Datastore API. So I still need my "viewer" :)
  • Nick Johnson
    Nick Johnson over 14 years
    You mean the link to the blog post that was posted several days after I posted this reply? 'outdated' I'll accept, but redundant and voted down is a bit cruel.
  • mcherm
    mcherm over 14 years
    I agree. Good answer at the time; now outdated.
  • Chad Gorshing
    Chad Gorshing almost 14 years
    localhost:8888/_ah/admin worked like a champ for me (note the port changed) - but I will try out the AppWrench just for comparison.
  • SunnyD
    SunnyD over 11 years
    Thank you so much! I really needed this to debug a persistence issue.
  • Timo
    Timo about 10 years
    The code is good, but the parameter for the query constructor is wrong: Table is not correct, it mus be the Entity name. In the guestbook example it would be "greeting" which is the row. I tried this, but not working:final Query query = new Query("Guestbook/Greeting"); Another issue: How do you show the content of different keys/names of a table with your code? Like guestbook1, gb2, etc.
  • Johnny
    Johnny almost 9 years
    @mcherm this one worked for me. The other answers here, on the other side, didn't.
  • Pini Cheyni
    Pini Cheyni about 8 years
    This code looks for all your entities and their child entities, what if the child entities have children too ? will this function run as recursion ?