Wie durchsuche ich den lokalen Java App Engine-Datenspeicher?


84

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

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

Antworten:


111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : "Endlich hat der Entwickler-App-Server einen Daten-Viewer. Starten Sie Ihre App lokal und zeigen Sie auf Ihre Browser auf *, um es zu überprüfen. "http://localhost:8888/_ah/admin http://localhost:8000/datastore

* ab 1.7.7


Die neue Administrationsoberfläche funktioniert immer noch nicht mit Arten / Entitäten, die von der Native Datastore-API erstellt wurden. Also brauche ich noch meinen "Viewer" :)
Paul

15
localhost: 8888 / _ah / admin hat für mich wie ein Champion gearbeitet (beachten Sie, dass der Port geändert wurde) - aber ich werde den AppWrench nur zum Vergleich ausprobieren.
Chad Gorshing

Ich danke dir sehr! Ich brauchte das wirklich, um ein Persistenzproblem zu beheben.
SunnyD

40

Derzeit gibt es keinen Datenspeicher-Viewer für das Java SDK - einer sollte in der nächsten SDK-Version verfügbar sein. In der Zwischenzeit ist es am besten, eine eigene Administrationsoberfläche mit Datenspeicher-Anzeigecode zu schreiben - oder auf die nächste SDK-Version zu warten.

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


Dies ist überflüssig - siehe dfrankows Beitrag oben.
Julian H

23
Du meinst den Link zu dem Blog-Beitrag, der einige Tage nach dem Posten dieser Antwort gepostet wurde? 'veraltet' werde ich akzeptieren, aber überflüssig und abgelehnt ist ein bisschen grausam.
Nick Johnson

1
Genau. Gute Antwort zu der Zeit; jetzt veraltet.
Mcherm

@mcherm das hat bei mir funktioniert. Die anderen Antworten hier auf der anderen Seite taten es nicht.
Johnny

6

Ich habe einen lokalen Datenspeicher in meiner Windows + Eclipse-Umgebung unter \ war \ WEB-INF \ appengine-generate \ local_db.bin

Soweit ich verstanden habe, wird das interne Format "Protokollpuffer" verwendet. 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));
        }
    }
}

Der Code ist gut, aber der Parameter für den Abfragekonstruktor ist falsch: Die Tabelle ist nicht korrekt, es muss sich um den Entitätsnamen handeln. Im Gästebuchbeispiel wäre es "Begrüßung", die die Zeile ist. Ich habe es versucht, aber es funktioniert nicht: final Query query = new Query ("Gästebuch / Begrüßung"); Ein weiteres Problem: Wie zeigen Sie den Inhalt verschiedener Schlüssel / Namen einer Tabelle mit Ihrem Code an? Wie Gästebuch1, GB2 usw.
Timo

2

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

Wenn wir die Serverausgabeprotokolle analysieren, können wir feststellen, dass auf Folgendes zugegriffen werden kann:

http://localhost:8000

Und der Datenspeicher- Viewer:

http://localhost:8000/datastore

Sieht ziemlich ordentlich aus - laut den neuen Designrichtlinien von Google.


1

Da der Google App Engines Datastore Viewer die Anzeige von Sammlungen referenzierter Entitäten nicht unterstützt, habe ich die Version von Paul so geändert, dass alle untergeordneten Entitäten angezeigt werden:

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.


Dieser Code sucht nach allen Ihren Entitäten und ihren untergeordneten Entitäten. Was ist, wenn die untergeordneten Entitäten auch untergeordnete Entitäten haben? Wird diese Funktion als Rekursion ausgeführt?
Pini Cheyni

1

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

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


0

Für mich bestand die Lösung darin, die Anmeldung mit dem folgenden gcloudBefehl durchzuführen

gcloud auth application-default login
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.