Як переглянути локальний магазин даних 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 вище.
Джуліан Х

23
Ви маєте на увазі посилання на допис у блозі, який був опублікований через кілька днів після того, як я опублікував цю відповідь? "застарілий" я прийму, але зайвий і проголосований "за" трохи жорстокий.
Нік Джонсон,

1
Я згоден. Хороша відповідь на той час; зараз застарілий.
mcherm

@mcherm цей працював у мене. Інші відповіді тут, з іншого боку, ні.
Джонні,

6

У мене є локальний магазин даних у моєму середовищі Windows + Eclipse на \ war \ WEB-INF \ appengine-generated \ local_db.bin

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

Я використовую простий код "viewer", такий:

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 ("Гостьова книга / Вітання"); Інше питання: Як ви показуєте вміст різних ключів / назв таблиці з вашим кодом? Як гостьова книга1, gb2 тощо
Тимо

2

У найновіших версіях SDK ( 1.7.6+ ) адміністративна частина сервера розробників має змінене місце розташування

Аналізуючи журнали виводу сервера, ми можемо побачити, що він доступний за адресою:

http://localhost:8000

І програма перегляду Datastore :

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.