it-swarm.com.de

So durchsuchen Sie den lokalen Java App Engine-Datastore

Es scheint, dass es kein Äquivalent zu _ah/admin von Python App Engine für die Java-Implementierung von Google App Engine gibt.

Gibt es eine manuelle Möglichkeit, den Datastore zu durchsuchen? Wo befinden sich die Dateien auf meinem Rechner? (Ich verwende das App Engine-Plugin mit Eclipse unter OS X).

84
Jim Blackler

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-Java-sdk-122.html : "Endlich hat der Dev-App-Server einen Data Viewer lokal und zeigen Sie mit Ihrem Browser auf http://localhost:8888/_ah/admin http://localhost:8000/datastore * zum Auschecken. "

* Stand 1.7.7

111
dfrankow

Derzeit gibt es keinen Datastore-Viewer für das Java SDK - einer sollte in der nächsten SDK-Version erscheinen. In der Zwischenzeit schreiben Sie am besten Ihre eigene Administrationsoberfläche mit Code zum Anzeigen von Datenspeichern - oder warten Sie auf die nächste SDK-Version.

Java App Engine verfügt jetzt über einen lokalen Datastore-Viewer, auf den Sie unter http://localhost:8080/_ah/admin zugreifen können.

40
Nick Johnson

Ich habe lokalen Datastore in meiner Windows + Eclipse-Umgebung unter\war\WEB-INF\appengine-generated\local_db.bin

Soweit ich es verstanden habe, verwendet es ein internes Format mit dem Namen "Protokollpuffer". Ich habe keine externen Tools, um die Datei in einem für Menschen lesbaren Format darzustellen.

Ich verwende einfachen "Viewer" -Code wie folgt:

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

In den neuesten Versionen des SDK ( 1.7.6+ ) hat der Admin-Teil des Dev-Servers seinen Standort geändert

Bei der Analyse der Server-Ausgabeprotokolle können Sie sehen, dass auf sie zugegriffen werden kann:

http://localhost:8000

Und der Datastore Viewer:

http://localhost:8000/datastore

Sieht recht ordentlich aus - laut den neuen Gestaltungsrichtlinien von Google.

2
Matyas

Da Google App Engines Datastore Viewer die Anzeige von Sammlungen referenzierter Entitäten nicht unterstützt, habe ich die Version von Pauls geändert, um alle abgeleiteten Entitäten anzuzeigen:

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

Es ist zu beachten, dass für leere Sammlungen/referenzierte Entitäten nichts angezeigt wird.

1
gw0

Öffnen Sie die \war\WEB-INF\appengine-generated\local_db.bin-Datei mit einem Texteditor wie Notepad ++.

Die Daten sind verschlüsselt, aber Sie können sie zumindest lesen und kopieren, um sie zu extrahieren.

1
Daniel De León

Für mich war das Update die Anmeldung mit dem folgenden gcloud-Befehl

gcloud auth application-default login
0
Aniruddha Das