2009-07-09 3 views

答えて

6

は、私は\ WEB-INF \の\ local_db.bin

AppEngineのは、生成された\戦争に私の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)); 
     } 
    } 
} 
+0

コードは良好ですが、クエリコンストラクタのパラメータが間違っています:テーブルが正しくない、エンティティ名になります。ゲストブックの例では、行である "挨拶"になります。私はこれを試みましたが、動作しません:最終クエリクエリ=新しいクエリ( "ゲストブック/挨拶");別の問題: テーブルの異なるキー/名前のコンテンツをコードでどのように表示しますか? guestbook1、gb2などのように – Timo

39

のJava SDKには、データストアビューアは現在ありません - 1は、次のSDKリリースで来てしなければなりません。その間、データストアのコードを表示して独自の管理インターフェイスを作成するか、次のSDKリリースを待つことをおすすめします。

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

+0

これは冗長です - 上のdfrankowの記事を参照してください。 –

+23

あなたはこの投稿を投稿した数日後に投稿されたブログ記事へのリンクを意味しますか? 「時代遅れ」私は受け入れるだろうが、冗長で投票したのはちょっと残酷だ。 –

+1

私は同意します。当時の良い答え。今は時代遅れです。 – mcherm

110

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html:「ついに、DEVのアプリケーションサーバーは、データビューアを持って、それをチェックアウトする*ローカルでアプリケーションを起動し、http://localhost:8888/_ah/adminhttp://localhost:8000/datastoreにブラウザをポイントします。」

*はGoogle Appエンジンのデータストアビューアは、参照エンティティのコレクションを表示するサポートしていないので、私はすべての子孫のエンティティを表示するためにポールのバージョンを変更し1.7.7

+0

新しい管理インターフェースは、Native Datastore APIによって作成された種類/エンティティではまだ動作していません。だから私はまだ私の "ビューア"が必要です:) – Paul

+15

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

+0

ありがとう!永続性の問題をデバッグするためには、これが本当に必要でした。 – SunnyD

1

のよう:

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

それはすべきです空のコレクション/参照されたエンティティには何も表示されないことに注意してください。 SDK(1.7.6+)のdevのサーバーの管理者の一部の最新バージョンでは

+0

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

2

は、それは我々はそれがでアクセス可能であることを見ることができ、サーバ出力ログを分析し、その場所

を変更しています:

http://localhost:8000

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

http://localhost:8000/datastore

Googleの新しいデザインガイドラインによれば、きれいに見えます。

1

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

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