2009-07-09 15 views
83

Sembra che non ci sia alcun equivalente di _ah/admin di Python App Engine per l'implementazione Java di Google App Engine.Come sfogliare il datastore Java App Engine locale?

Esiste un modo manuale per sfogliare il datastore? Dove sono i file da trovare sulla mia macchina? (Sto usando il plug-in App Engine con Eclipse su OS X).

risposta

6

devo datastore locale sul mio ambiente + Eclipse Windows su \ guerra \ WEB-INF \ AppEngine-generato \ local_db.bin

Per quanto ho capito che utilizza formato interno chiamato "buffer di protocollo". Non ho strumenti esterni per presentare il file in formato leggibile.

Sto utilizzando il codice semplice "spettatore" come questo:

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

Il codice è buono, ma il parametro per il costruttore di query è errato: la tabella non è corretta, può essere il nome dell'entità. Nell'esempio guestbook sarebbe "saluto" che è la riga.Ho provato questo, ma non funzionante: query Query finale = nuova query ("Guestbook/Greeting"); Un altro problema: Come si mostra il contenuto di chiavi/nomi diversi di una tabella con il proprio codice? Come guestbook1, gb2, ecc. – Timo

39

Non ci sono ancora spettatore datastore per Java SDK - uno dovrebbe essere in arrivo nella prossima release SDK. Nel frattempo, la soluzione migliore è scrivere la propria interfaccia di amministrazione con il codice di visualizzazione del datastore o attendere la prossima versione dell'SDK.

Java App Engine dispone ora di un visualizzatore di datastore locale, accessibile a http://localhost:8080/_ah/admin.

+0

Questo è ridondante - vedi il post di dfrankow qui sopra. –

+23

Vuoi dire il link al post del blog che è stato pubblicato diversi giorni _after_ Ho postato questa risposta? 'obsoleto' Accetterò, ma ridondante e votato verso il basso è un po 'crudele. –

+1

Sono d'accordo. Buona risposta al momento; ora obsoleto. – mcherm

110

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: "Finalmente, l'appserver dev ha un visualizzatore di dati Avviare la vostra applicazione a livello locale e puntare il browser su http://localhost:8888/_ah/adminhttp://localhost:8000/datastore * di check it out.".

* a partire dal 1.7.7

+0

La nuova interfaccia di amministrazione non funziona ancora con i tipi/le entità create dall'API di Native Datastore. Quindi ho ancora bisogno del mio "visualizzatore" :) – Paul

+15

http: // localhost: 8888/_ah/admin ha funzionato come un campione per me (nota la porta modificata) - ma proverò l'AppWrench solo per il confronto. –

+0

Grazie mille! Avevo davvero bisogno di questo per eseguire il debug di un problema di persistenza. – SunnyD

1

Perché Google App spettatore Motori di archivio dati non supporta la visualizzazione collezioni di entità di riferimento, ho modificato la versione di Paolo per visualizzare tutte le entità discendenti:

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

Dovrebbe si noti che non viene visualizzato nulla per collezioni vuote/entità referenziate.

+0

Questo codice cerca tutte le entità e le loro entità figlio, e se anche le entità figlio hanno figli? questa funzione verrà eseguita come ricorsione? –

2

Nelle versioni più recenti di SDK (1.7.6+) la parte di amministrazione del server dev viene con esso ha cambiato la sua posizione

Analizzando i log del server di uscita possiamo vedere che è accessibile a:

http://localhost:8000

E il Datastore spettatore:

http://localhost:8000/datastore

Sembra abbastanza pulito, secondo le nuove linee guida di design di Google.

1

Aprire il file \war\WEB-INF\appengine-generated\local_db.bin con un editor di testo, come Notepad ++.

I dati sono codificati, ma almeno puoi leggerli e puoi copiarli per estrarlo.

Problemi correlati