web-dev-qa-db-ja.com

ローカルのJava App Engineデータストアを参照するには?

Python App Engineの_ah/adminに相当するものはありません。Java実装。

データストアを手動で閲覧する方法はありますか?私のマシンのどこにファイルがありますか? (OS X上のEclipseでApp Engineプラグインを使用しています)。

84
Jim Blackler

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-Java-sdk-122.html :「ようやく、dev appserverにデータビューアーが追加されました。アプリをローカルで起動し、ブラウザで http://localhost:8888/_ah/admin http://localhost:8000/datastore *をご覧ください。」

*1.7.7時点

111
dfrankow

現在、Java SDKのデータストアビューアはありません。次のSDKリリースで提供される予定です。その間、データストア表示コードを使用して独自の管理インターフェイスを記述するか、待つか次のSDKリリース用。

Java App Engineにはローカルデータストアビューアーがあり、http://localhost:8080/_ah/admin

40
Nick Johnson

\ war\WEB-INF\appengine-generated\local_db.binのWindows + Eclipse環境にローカルデータストアがあります

私の知る限り、「プロトコルバッファ」という名前の内部形式を使用しています。人間が読める形式でファイルを表示する外部ツールはありません。

次のような単純な「ビューア」コードを使用しています。

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

SDKの最新バージョン(1.7.6 +)では、devサーバーのadmin部分に付属しており、その場所が変更されています

サーバー出力ログを分析すると、次の場所からアクセスできることがわかります。

http://localhost:8000

そしてDatastore viewer:

http://localhost:8000/datastore

グーグルの新しいデザインのガイドラインによると、かなりきれいに見えます。

2
Matyas

Google App Engineデータストアビューアーは、参照されたエンティティのコレクションの表示をサポートしていないため、Paulのバージョンを変更して、すべての子孫エンティティを表示しました。

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
gw0

\war\WEB-INF\appengine-generated\local_db.binファイルは、メモ帳++などのテキストエディタを使用します。

データはスクランブルされますが、少なくともユーザーはそれを読み取り、コピーして抽出することができます。

1
Daniel De León

私にとっては、以下のgcloudコマンドを使用してログインすることでした。

gcloud auth application-default login
0
Aniruddha Das