2009-07-09 18 views
83

Parece que no existe un equivalente de _ah/admin de Python App Engine para la implementación de Java de Google App Engine.¿Cómo explorar el almacén de datos local de Java App Engine?

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

Respuesta

6

que tienen almacén de datos local en mi entorno Windows + Eclipse en \ guerra \ WEB-INF \ appengine generó-\ local_db.bin

Por lo que he entendido que utiliza el formato interno llamado "buffers" de protocolo. No tengo herramientas externas para presentar el archivo en formato legible para humanos.

estoy usando código simple "espectador" de esta manera:

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

El código es bueno, pero el parámetro para el constructor de consulta 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 final Query = nueva consulta ("Libro de visitas/saludo"); Otro problema: ¿Cómo se muestra el contenido de diferentes claves/nombres de una tabla con su código? Como guestbook1, gb2, etc. – Timo

39

No tenemos visor de almacén de datos para el SDK de Java - uno debe venir en la próxima versión del SDK. Mientras tanto, la mejor opción es escribir su propia interfaz de administración con el código de visualización del almacén de datos, o esperar la próxima versión del SDK.

Java App Engine ahora tiene un visor de almacén de datos local, al que se puede acceder al http://localhost:8080/_ah/admin.

+0

Esto es redundante - vea la publicación anterior de dfrankow. –

+23

¿Te refieres al enlace a la publicación del blog que se publicó varios días después de que publiqué esta respuesta? 'obsoleto' lo acepto, pero redundante y rechazado es un poco cruel. –

+1

Estoy de acuerdo. Buena respuesta en ese momento; ahora desactualizado – mcherm

110

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: "Por fin, el servidor de aplicaciones dev tiene un visor de datos Comience su aplicación a nivel local y apunta su navegador a http://localhost:8888/_ah/adminhttp://localhost:8000/datastore * para comprobar que funciona.".

* al 1.7.7

+0

La nueva interfaz de administrador aún no funciona con los tipos/entidades creados por Native Datastore API. Así que todavía necesito mi "visor" :) – Paul

+15

http: // localhost: 8888/_ah/admin funcionó como un campeón para mí (tenga en cuenta que el puerto cambió) - pero voy a probar AppWrench solo para comparar. –

+0

¡Muchas gracias! Realmente necesitaba esto para depurar un problema de persistencia. – SunnyD

1

Debido a que Google aplicación de visor Motores almacén de datos no soporta el mostrado colecciones de entidades referenciadas, que modificó la versión de Pablo 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)); 
      } 
     } 
    } 
} 

Debería tenga en cuenta que no se muestra nada para las colecciones vacías/entidades referenciadas.

+0

Este código busca todas sus entidades y sus entidades secundarias, ¿y si las entidades secundarias también tienen hijos? ¿Funcionará esta función como recursión? –

2

En las versiones más recientes del SDK ( 1.7.6+) la parte de administración del servidor dev viene con él cambió su ubicación

El análisis de los registros de salida del servidor, podemos ver que es accesible en:

http://localhost:8000

Y el almacén de datos espectador:

http://localhost:8000/datastore

Se ve bastante limpio, de acuerdo con las nuevas pautas de diseño de google.

1

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

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

Cuestiones relacionadas