ローカルのJavaApp Engineデータストアを参照する方法は?


84

Google AppEngineのJava実装に対応するPythonAppEngineの_ah / adminに相当するものはないようです。

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

回答:


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 DatastoreAPIによって作成された種類/エンティティではまだ機能していません。だから私はまだ私の「ビューア」が必要です:)
ポール

15
localhost:8888 / _ah / adminは私にとってチャンピオンのように機能しました(ポートが変更されたことに注意してください)-しかし、比較のためにAppWrenchを試してみます。
Chad Gorshing 2010

どうもありがとうございます!永続性の問題をデバッグするには、これが本当に必要でした。
SunnyD 2012年

40

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

Java App Engineには、でアクセスできるローカルデータストアビューアがありますhttp://localhost:8080/_ah/admin


これは冗長です-上記のdfrankowの投稿を参照してください。
ジュリアンH

23
この返信を投稿してから数日に投稿されたブログ投稿へのリンクを意味しますか?「時代遅れ」私は受け入れますが、冗長で投票されたのは少し残酷です。
ニックジョンソン

1
同意する。当時の良い答え。今は時代遅れです。
mcherm 2009年

@mchermこれは私のために働いた。ここでの他の答えは、反対側ではありませんでした。
ジョニー

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( "Guestbook / Greeting"); 別の問題:コードでテーブルのさまざまなキー/名前の内容をどのように表示しますか?guestbook1、gb2などのように
Timo

2

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

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

http://localhost:8000

そしてデータストアビューア:

http://localhost:8000/datastore

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


1

Google App Enginesデータストアビューアは参照されるエンティティのコレクションの表示をサポートしていないため、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));
            }
        }
    }
}

空のコレクション/参照エンティティには何も表示されないことに注意してください。


このコードは、すべてのエンティティとその子エンティティを検索します。子エンティティにも子がある場合はどうなりますか?この関数は再帰として実行されますか?
Pini Cheyni 2016年

1

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

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


0

私にとっての修正は、以下のgcloudコマンドを使用してログインを行うことでした

gcloud auth application-default login
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.