web-dev-qa-db-fra.com

Comment parcourir le magasin de données Java App Engine local?

Il semble qu'il n'y ait pas d'équivalent de _ah/admin de Python App Engine pour l'implémentation Java de Google App Engine.

Existe-t-il un moyen manuel de parcourir le magasin de données? Où se trouvent les fichiers sur ma machine? (J'utilise le plugin App Engine avec Eclipse sous OS X).

84
Jim Blackler

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-Java-sdk-122.html : "Enfin, le dev appserver dispose d'un visualiseur de données. Démarrez votre application localement et pointez votre navigateur sur http://localhost:8888/_ah/admin http://localhost:8000/datastore * pour le vérifier. "

* à partir de 1.7.7

111
dfrankow

Il n’existe actuellement aucun visualiseur de banque de données pour le SDK Java. Il devrait en être un dans la prochaine version du SDK. En attendant, votre meilleur choix est d'écrire votre propre interface d'administration avec le code de visualisation du magasin de données - ou d'attendre la prochaine version du SDK.

Java App Engine dispose désormais d'un visualiseur de banque de données local, accessible à l'aide de http://localhost:8080/_ah/admin.

40
Nick Johnson

J'ai un magasin de données local sur mon environnement Windows + Eclipse sous\war\WEB-INF\généré par\appengine\local_db.bin

Autant que je sache, il utilise un format interne appelé "tampon de protocole". Je n'ai pas d'outils externes pour présenter le fichier dans un format lisible par l'homme.

J'utilise un code "spectateur" simple comme ceci:

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

Dans les versions les plus récentes du SDK ( 1.7.6+ ), la partie administrative du serveur de développement fournie avec lui a changé d’emplacement.

En analysant les journaux de sortie du serveur, nous pouvons voir qu'il est accessible à l'adresse suivante:

http://localhost:8000

Et le Datastore viewer:

http://localhost:8000/datastore

C'est très joli - selon les nouvelles directives de Google sur la conception.

2
Matyas

Le visualiseur de banques de données Google App Engines ne prenant pas en charge l'affichage des collections d'entités référencées, j'ai modifié la version de Paul pour afficher toutes les entités descendantes:

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

Il est à noter que rien n'est affiché pour les collections/entités référencées vides.

1
gw0

Ouvrez le fichier \war\WEB-INF\appengine-generated\local_db.bin avec un éditeur de texte, tel que Notepad ++.

Les données sont brouillées mais vous pouvez au moins les lire et les copier pour les extraire.

1
Daniel De León

Pour moi, le correctif était de faire la connexion en utilisant la commande gcloud ci-dessous

gcloud auth application-default login
0
Aniruddha Das