Как просмотреть локальное хранилище данных Java App Engine?


84

Кажется, что нет эквивалента _ah / admin в Python App Engine для реализации Java для Google App Engine.

Есть ли ручной способ просмотра хранилища данных? Где файлы на моем компьютере? (Я использую плагин App Engine с Eclipse в OS X).

Ответы:


111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : "Наконец-то на сервере приложений для разработчиков есть средство просмотра данных. Запустите приложение локально и укажите свое браузер, чтобы * проверить это ".http://localhost:8888/_ah/admin http://localhost:8000/datastore

* по состоянию на 1.7.7


Новый интерфейс администратора по-прежнему не работает с видами / объектами, созданными Native Datastore API. Так что мне все еще нужен мой "зритель" :)
Пол

15
localhost: 8888 / _ah / admin работал для меня как чемпион (обратите внимание, что порт изменился), но я попробую AppWrench только для сравнения.
Чад Горшинг,

Спасибо огромное! Мне это действительно нужно, чтобы отладить проблему с постоянством.
SunnyD

40

В настоящее время нет программы просмотра хранилища данных для Java SDK - она ​​должна появиться в следующем выпуске SDK. А пока лучше всего написать собственный интерфейс администратора с кодом просмотра хранилища данных - или дождаться следующего выпуска SDK.

Java App Engine теперь имеет средство просмотра локального хранилища данных, доступное по адресу http://localhost:8080/_ah/admin.


Это избыточно - см. Сообщение dfrankow выше.
Julian H

23
Вы имеете в виду ссылку на сообщение в блоге, которое было опубликовано через несколько дней после того, как я опубликовал этот ответ? 'устаревший' я соглашусь, но избыточный и отклоненный - это немного жестоко.
Ник Джонсон,

1
Я согласен. Хороший ответ на тот момент; сейчас устарело.
mcherm

@mcherm этот сработал для меня. Другие ответы здесь, с другой стороны, нет.
Johnny

6

У меня есть локальное хранилище данных в среде Windows + Eclipse на \ war \ WEB-INF \ appengine-generated \ local_db.bin

Насколько я понял, он использует внутренний формат под названием «буферы протокола». У меня нет внешних инструментов для представления файла в удобочитаемом формате.

Я использую простой код для просмотра, например:

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

Код хорош, но параметр для конструктора запроса неверен: Таблица неверна, это должно быть имя объекта. В примере с гостевой книгой это будет строка "приветствие". Я пробовал это, но не работало: final Query query = new Query ("Гостевая книга / Приветствие"); Другая проблема: как вы показываете содержимое разных ключей / имен таблицы с вашим кодом? Например, guestbook1, gb2 и т. Д.
Timo,

2

В новейших версиях SDK ( 1.7.6+ ) административная часть dev-сервера изменила свое местоположение

Анализируя журналы вывода сервера, мы видим, что он доступен по адресу:

http://localhost:8000

И программа просмотра хранилища данных :

http://localhost:8000/datastore

Выглядит довольно аккуратно - согласно новым рекомендациям Google по дизайну.


1

Поскольку программа просмотра хранилища данных Google App Engines не поддерживает отображение коллекций ссылочных сущностей, я изменил версию Пола, чтобы отображать все дочерние сущности:

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

Следует отметить, что для пустых коллекций / ссылочных сущностей ничего не отображается.


Этот код ищет все ваши сущности и их дочерние сущности. Что, если у дочерних сущностей тоже есть дети? будет ли эта функция работать как рекурсия?
Пини Чейни

1

Откройте \war\WEB-INF\appengine-generated\local_db.binфайл в текстовом редакторе, например Notepad ++.

Данные зашифрованы, но, по крайней мере, вы можете их прочитать и скопировать, чтобы извлечь.


0

Для меня исправление заключалось в том, чтобы войти в систему, используя gcloudкоманду ниже

gcloud auth application-default login
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.