Yerel Java App Engine veri deposuna nasıl göz atılır?


84

Google App Engine'in Java uygulaması için Python App Engine'in _ah / admin eşdeğeri yok gibi görünüyor.

Veri deposuna göz atmamın manuel bir yolu var mı? Makinemde dosyalar nerede bulunur? (OS X'te Eclipse ile App Engine eklentisini kullanıyorum).

Yanıtlar:


111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : "Nihayet, geliştirici uygulama sunucusunun bir veri görüntüleyicisi var. Uygulamanızı yerel olarak başlatın ve tarayıcıdan * kontrol edin. "http://localhost:8888/_ah/admin http://localhost:8000/datastore

* 1.7.7'den itibaren


Yeni yönetici arayüzü, Native Datastore API tarafından oluşturulan türler / varlıklar ile hala çalışmıyor. Bu yüzden hala "görüntüleyicime" ihtiyacım var :)
Paul

15
localhost: 8888 / _ah / admin benim için bir şampiyon gibi çalıştı (bağlantı noktasının değiştiğine dikkat edin) - ancak sadece karşılaştırma için AppWrench'i deneyeceğim.
Chad Gorshing

Çok teşekkür ederim! Bir kalıcılık sorununu gidermek için buna gerçekten ihtiyacım vardı.
SunnyD

40

Şu anda Java SDK için veri deposu görüntüleyicisi yok - bir sonraki SDK sürümünde gelecek. Bu arada, en iyi seçeneğiniz, veri deposu görüntüleme koduyla kendi yönetici arayüzünüzü yazmak veya bir sonraki SDK sürümünü beklemektir.

Java App Engine artık adresinden erişilebilen yerel bir veri deposu görüntüleyicisine sahip http://localhost:8080/_ah/admin.


Bu gereksizdir - dfrankow'un yukarıdaki gönderisine bakın.
Julian H

23
Bu yanıtı gönderdikten birkaç gün sonra yayınlanan blog gönderisinin bağlantısını mu kastediyorsunuz ? 'modası geçmiş' Kabul ediyorum, ancak gereksiz ve red oyu biraz acımasız.
Nick Johnson

1
Katılıyorum. O anda iyi cevap; şimdi modası geçmiş.
mcherm

@mcherm bu benim için çalıştı. Diğer taraftan buradaki diğer cevaplar vermedi.
Johnny

6

Windows + Eclipse ortamımda \ war \ WEB-INF \ appengine-generated \ local_db.bin üzerinde yerel veri depom var

Anladığım kadarıyla "protokol arabellekleri" adlı dahili format kullanıyor. Dosyayı insan tarafından okunabilir biçimde sunmak için harici araçlara sahip değilim.

Bunun gibi basit "görüntüleyici" kodu kullanıyorum:

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

Kod iyi, ancak sorgu yapıcısının parametresi yanlış: Tablo doğru değil, Varlık adı olabilir. Ziyaretçi defteri örneğinde, satır olan "selamlama" olacaktır. Bunu denedim ama çalışmıyor: final Query query = new Query ("Guestbook / Selamlama"); Başka bir konu: Bir tablonun farklı anahtarlarının / isimlerinin içeriğini kodunuzla nasıl gösterirsiniz? Ziyaretçi defteri1, gb2 vb. Gibi
Timo

2

SDK'nın en yeni sürümlerinde ( 1.7.6+ ), dev sunucusunun yönetici kısmı yerini değiştirmiş olarak gelir

Sunucu çıktı günlükleri incelendiğinde, şu adresten erişilebilir olduğunu görebiliriz:

http://localhost:8000

Ve Datastore görüntüleyicisi:

http://localhost:8000/datastore

Google'ın yeni tasarım yönergelerine göre oldukça temiz görünüyor.


1

Google App Engines Datastore görüntüleyicisi referans verilen varlıkların koleksiyonlarını görüntülemeyi desteklemediğinden, Paul'ün sürümünü tüm alt varlıkları gösterecek şekilde değiştirdim:

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

Boş koleksiyonlar / başvurulan varlıklar için hiçbir şeyin görüntülenmediğine dikkat edilmelidir.


Bu kod tüm varlıklarınızı ve onların alt varlıklarını arar, ya alt varlıkların da çocukları varsa? bu işlev özyineleme olarak çalışacak mı?
Pini Cheyni

1

\war\WEB-INF\appengine-generated\local_db.binDosyayı Notepad ++ gibi bir metin düzenleyiciyle .

Veriler karıştırılır, ancak en azından okuyabilir ve çıkarmak için kopyalayabilirsiniz.


0

Benim için düzeltme, aşağıdaki gcloudkomutu kullanarak giriş yapmaktı

gcloud auth application-default login
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.