Comment parcourir la banque de données Java App Engine locale?


84

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 la banque de données? Où se trouvent les fichiers sur ma machine? (J'utilise le plug-in App Engine avec Eclipse sur OS X).

Réponses:


111

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

* à partir du 1.7.7


La nouvelle interface d'administration ne fonctionne toujours pas avec les types / entités créés par l'API Native Datastore. Donc j'ai encore besoin de mon "spectateur" :)
Paul

15
localhost: 8888 / _ah / admin a fonctionné comme un champion pour moi (notez que le port a changé) - mais je vais essayer l'AppWrench juste à titre de comparaison.
Chad Gorshing

Merci beaucoup! J'en avais vraiment besoin pour déboguer un problème de persistance.
SunnyD

40

Il n'y a actuellement pas de visionneuse de banque de données pour le SDK Java - il devrait y en avoir une dans la prochaine version du SDK. En attendant, votre meilleur pari est d'écrire votre propre interface d'administration avec le code de visualisation de la banque de données - ou d'attendre la prochaine version du SDK.

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


C'est redondant - voir le post de dfrankow ci-dessus.
Julian H

23
Vous voulez dire le lien vers l'article de blog qui a été posté plusieurs jours après que j'ai posté cette réponse? J'accepterai «dépassé», mais redondant et rejeté est un peu cruel.
Nick Johnson

1
Je suis d'accord. Bonne réponse à l'époque; maintenant obsolète.
mcherm

@mcherm celui-ci a fonctionné pour moi. Les autres réponses ici, de l'autre côté, ne l'ont pas fait.
Johnny

6

J'ai une banque de données locale sur mon environnement Windows + Eclipse sur \ war \ WEB-INF \ appengine-generated \ local_db.bin

Autant que je sache, il utilise un format interne nommé "tampons 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 de "visionneuse" simple comme celui-ci:

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

Le code est bon, mais le paramètre du constructeur de requête est incorrect: la table n'est pas correcte, il doit s'agir du nom de l'entité. Dans l'exemple du livre d'or, ce serait "salutation" qui est la ligne. J'ai essayé ceci, mais ne fonctionne pas: requête finale de requête = nouvelle requête ("livre d'or / voeux"); Autre problème: comment afficher le contenu des différentes clés / noms d'une table avec votre code? Comme guestbook1, gb2, etc.
Timo

2

Dans les dernières versions du SDK ( 1.7.6+ ), la partie admin du serveur de développement est fournie avec elle a changé son emplacement

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

http://localhost:8000

Et le visualiseur Datastore :

http://localhost:8000/datastore

Cela a l'air assez soigné - selon les nouvelles directives de conception de Google.


1

Étant donné que la visionneuse de magasin de données Google App Engines ne prend 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 vides / entités référencées.


Ce code recherche toutes vos entités et leurs entités enfants, que faire si les entités enfants ont également des enfants? cette fonction fonctionnera-t-elle comme récursivité?
Pini Cheyni

1

Ouvrez le \war\WEB-INF\appengine-generated\local_db.binfichier avec un éditeur de texte, comme Notepad ++.

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


0

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

gcloud auth application-default login
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.