Hoe blader je door de lokale Java App Engine-datastore?

Het lijkt erop dat er geen equivalent is van de _ah/admin van Python App Engine voor de Java-implementatie van Google App Engine.

Is er een handmatige manier om door de datastore te bladeren? Waar zijn de bestanden te vinden op mijn machine? (Ik gebruik de App Engine-plug-in met Eclipse op OS X).


Antwoord 1, autoriteit 100%

http://googleappengine. blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: “Eindelijk heeft de dev-appserver een dataviewer. Start uw app lokaal en laat uw browser http://localhost:8888/_ah/adminhttp://localhost:8000/datastore* om het uit te proberen.”

* vanaf 1.7.7


Antwoord 2, autoriteit 36%

Er is momenteel geen datastore-viewer voor de Java SDK – een zou in de volgende SDK-release moeten komen. In de tussentijd kun je het beste je eigen beheerdersinterface schrijven met datastore-weergavecode – of wachten op de volgende SDK-release.

Java App Engine heeft nu een lokale datastore-viewer, toegankelijk via http://localhost:8080/_ah/admin.


Antwoord 3, autoriteit 5%

Ik heb een lokale datastore in mijn Windows+Eclipse-omgeving op \war\WEB-INF\appengine-generated\local_db.bin

Voor zover ik heb begrepen, gebruikt het een intern formaat met de naam “protocolbuffers”. Ik heb geen externe tools om het bestand in een voor mensen leesbaar formaat te presenteren.

Ik gebruik een eenvoudige “viewer”-code zoals deze:

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));
        }
    }
}

Antwoord 4, autoriteit 2%

In de nieuwste versies van de SDK (1.7.6+) wordt het beheerdersgedeelte van de ontwikkelserver meegeleverd en is de locatie gewijzigd

Als we de logboeken van de serveruitvoer analyseren, kunnen we zien dat deze toegankelijk is op:

http://localhost:8000

En de Datastore-viewer:

http://localhost:8000/datastore

Ziet er best netjes uit – volgens de nieuwe ontwerprichtlijnen van Google.


Antwoord 5

Omdat de Google App Engines Datastore-viewer geen ondersteuning biedt voor het weergeven van verzamelingen van entiteiten waarnaar wordt verwezen, heb ik de versie van Paul gewijzigd om alle onderliggende entiteiten weer te geven:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String entityParam = req.getParameter("e");
    resp.setContentType("text/plain");
    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    // Original query
    final Query queryOrig = new Query(entityParam);
    queryOrig.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);
    for (final Entity entityOrig : datastore.prepare(queryOrig).asIterable()) {
        // Query for this entity and all its descendant entities and collections
        final Query query = new Query();
        query.setAncestor(entityOrig.getKey());
        query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);
        for (final Entity entity : datastore.prepare(query).asIterable()) {
            resp.getWriter().println(entity.getKey().toString());
            // Print properties
            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));
            }
        }
    }
}

Opgemerkt moet worden dat er niets wordt weergegeven voor lege verzamelingen/verwezen entiteiten.


Antwoord 6

Open het bestand \war\WEB-INF\appengine-generated\local_db.binmet een teksteditor, zoals Notepad++.

De gegevens zijn vervormd, maar u kunt ze tenminste lezen en kopiëren om ze uit te pakken.


Antwoord 7

Voor mij was de oplossing om in te loggen met het onderstaande gcloud-commando

gcloud auth application-default login

Other episodes