Como procurar o armazenamento de dados local do Java App Engine?

Parece que não há equivalente do _ah / admin do Python App Engine para a implementação Java do Google App Engine.

Existe uma maneira manual de navegar no armazenamento de dados? Onde estão os arquivos encontrados na minha máquina? (Estou usando o plug-in do App Engine com o Eclipse no OS X).

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : “Finalmente, o dev appserver tem um visualizador de dados. Inicie seu aplicativo localmente e aponte seu navegador para http://localhost:8888/_ah/admin http://localhost:8000/datastore * para verificar. ”

* a partir de 1.7.7

Não há atualmente nenhum visualizador de armazenamento de dados para o Java SDK – um deve estar vindo na próxima versão do SDK. Enquanto isso, sua melhor opção é escrever sua própria interface de administrador com o código de visualização do armazenamento de dados ou aguardar a próxima versão do SDK.

O Java App Engine agora tem um visualizador de armazenamento de dados local, acessível em http://localhost:8080/_ah/admin .

Eu tenho datastore local no meu ambiente Windows + Eclipse em \ war \ WEB-INF \ appengine-generated \ local_db.bin

Tanto quanto eu entendi, usa o formato interno chamado “buffers de protocolo”. Eu não tenho ferramentas externas para apresentar o arquivo em formato legível.

Estou usando um código “visualizador” simples 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 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)); } } } 

Nas versões mais recentes do SDK ( 1.7.6+ ), a parte administrativa do servidor de desenvolvimento é alterada.

Analisando os logs de saída do servidor, podemos ver que ele está acessível em:

http://localhost:8000

E o visualizador do Datastore :

http://localhost:8000/datastore

Parece bem legal – de acordo com as novas diretrizes de design do Google.

Como o visualizador do Google App Engines Datastore não oferece suporte à exibição de collections de entidades referenciadas, modifiquei a versão de Paul para exibir todas as entidades descendentes:

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

Deve-se notar que nada é exibido para collections vazias / entidades referenciadas.

Abra o arquivo \war\WEB-INF\appengine-generated\local_db.bin com um editor de texto, como o Notepad ++.

Os dados estão embaralhados, mas pelo menos você pode lê-los e copiá-los para extraí-los.