¿Cómo explorar el almacén de datos local de Java App Engine?

84

Parece que no hay un equivalente de _ah / admin de Python App Engine para la implementación de Java de Google App Engine.

¿Existe alguna forma manual de navegar por el almacén de datos? ¿Dónde se encuentran los archivos en mi máquina? (Estoy usando el complemento de App Engine con Eclipse en OS X).

Jim Blackler
fuente

Respuestas:

111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : "Por fin, el servidor de aplicaciones para desarrolladores tiene un visor de datos. Inicie su aplicación localmente y apunte su navegador a * para comprobarlo ".http://localhost:8888/_ah/admin http://localhost:8000/datastore

* a partir de 1.7.7

desconocido
fuente
La nueva interfaz de administración aún no funciona con los tipos / entidades creadas por la API de Native Datastore. Así que todavía necesito mi "visor" :)
Paul
15
localhost: 8888 / _ah / admin funcionó como un campeón para mí (tenga en cuenta que el puerto cambió), pero probaré AppWrench solo para comparar.
Chad Gorshing
Muchas gracias! Realmente necesitaba esto para depurar un problema de persistencia.
SunnyD
40

Actualmente no hay un visor de almacén de datos para el SDK de Java; debería haber uno en la próxima versión del SDK. Mientras tanto, lo mejor que puede hacer es escribir su propia interfaz de administración con el código de visualización del almacén de datos, o esperar a la próxima versión del SDK.

Java App Engine ahora tiene un visor de almacén de datos local, accesible en http://localhost:8080/_ah/admin.

Nick Johnson
fuente
Esto es redundante - vea la publicación de dfrankow arriba.
Julian H
23
¿Te refieres al enlace a la publicación del blog que se publicó varios días después de que publiqué esta respuesta? 'anticuado' Lo aceptaré, pero redundante y rechazado es un poco cruel.
Nick Johnson
1
Estoy de acuerdo. Buena respuesta en ese momento; ahora desactualizado.
mcherm
@mcherm este funcionó para mí. Las otras respuestas aquí, en el otro lado, no lo hicieron.
Johnny
6

Tengo un almacén de datos local en mi entorno Windows + Eclipse en \ war \ WEB-INF \ appengine-generate \ local_db.bin

Por lo que tengo entendido, utiliza un formato interno llamado "búferes de protocolo". No tengo herramientas externas para presentar el archivo en formato legible por humanos.

Estoy usando un código de "visor" simple como este:

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));
        }
    }
}
Paul
fuente
El código es bueno, pero el parámetro para el constructor de consultas es incorrecto: la tabla no es correcta, debe ser el nombre de la entidad. En el ejemplo del libro de visitas, sería "saludo", que es la fila. Intenté esto, pero no funcionó: consulta de consulta final = nueva consulta ("Libro de visitas / saludo"); Otro problema: ¿Cómo muestra el contenido de diferentes claves / nombres de una tabla con su código? Como guestbook1, gb2, etc.
Timo
2

En las versiones más recientes del SDK ( 1.7.6+ ), la parte de administración del servidor de desarrollo viene con un cambio de ubicación

Analizando los registros de salida del servidor podemos ver que es accesible en:

http://localhost:8000

Y el visor de Datastore :

http://localhost:8000/datastore

Se ve bastante bien, de acuerdo con las nuevas pautas de diseño de Google.

Matyas
fuente
1

Debido a que el visor del almacén de datos de Google App Engines no admite la visualización de colecciones de entidades referenciadas, modifiqué la versión de Paul para mostrar todas las entidades descendientes:

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

Cabe señalar que no se muestra nada para colecciones vacías / entidades referenciadas.

gw0
fuente
Este código busca todas sus entidades y sus entidades secundarias, ¿qué pasa si las entidades secundarias también tienen hijos? ¿Esta función se ejecutará como recursividad?
Pini Cheyni
1

Abra el \war\WEB-INF\appengine-generated\local_db.binarchivo con un editor de texto, como Notepad ++.

Los datos están codificados, pero al menos puede leerlos y copiarlos para extraerlos.

Daniel De León
fuente
0

Para mí, la solución fue hacer el inicio de sesión usando el siguiente gcloudcomando

gcloud auth application-default login
Aniruddha Das
fuente