로컬 Java App Engine 데이터 저장소를 탐색하는 방법은 무엇입니까?


84

Google App Engine의 자바 구현을위한 Python App Engine의 _ah / admin에 해당하는 것은없는 것 같습니다.

데이터 스토어를 수동으로 탐색 할 수있는 방법이 있습니까? 내 컴퓨터에서 찾을 수있는 파일은 어디에 있습니까? (OS X에서 Eclipse와 함께 App Engine 플러그인을 사용하고 있습니다.)

답변:


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로 생성 된 종류 / 항목에서 여전히 작동하지 않습니다. 그래서 여전히 내 "뷰어"가 필요합니다. :)
Paul

15
localhost : 8888 / _ah / admin 은 저에게 챔피언처럼 작동했습니다 (포트가 변경되었습니다).하지만 비교를 위해 AppWrench를 사용해 보겠습니다.
Chad Gorshing 2010

정말 고맙습니다! 지속성 문제를 디버깅하는 데 정말 필요했습니다.
SunnyD

40

현재 Java SDK 용 데이터 저장소 뷰어는 없으며 다음 SDK 릴리스에서 제공 될 예정입니다. 그 동안 가장 좋은 방법은 데이터 저장소보기 코드를 사용하여 고유 한 관리 인터페이스를 작성하거나 다음 SDK 릴리스를 기다리는 것입니다.

이제 Java App Engine에 .NET에서 액세스 할 수있는 로컬 데이터 저장소 뷰어가 있습니다 http://localhost:8080/_ah/admin.


이것은 중복입니다-위의 dfrankow의 게시물을 참조하십시오.
Julian H

23
이 답글을 게시 한 후 며칠 후에 게시 된 블로그 게시물에 대한 링크를 의미 합니까? '오래된'나는 받아 들일 것이지만, 중복 투표는 약간 잔인합니다.
Nick Johnson

1
나는 동의한다. 당시 좋은 대답이었습니다. 이제 구식입니다.
mcherm

@mcherm 이것은 나를 위해 일했습니다. 다른 쪽의 다른 답변은 그렇지 않았습니다.
Johnny

6

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

코드는 좋지만 쿼리 생성자의 매개 변수가 잘못되었습니다. 테이블이 올바르지 않습니다. 엔티티 이름입니다. 방명록 예제에서는 행인 "greeting"이됩니다. 나는 이것을 시도했지만 작동하지 않는다 : final Query query = new Query ( "Guestbook / Greeting"); 또 다른 문제 : 코드와 함께 테이블의 다른 키 / 이름의 내용을 어떻게 표시합니까? 방명록 1, gb2 등
Timo

2

최신 버전의 SDK ( 1.7.6+ )에서 개발 서버의 관리자 부분은 위치가 변경되었습니다.

서버 출력 로그를 분석하면 다음 위치에서 액세스 할 수 있음을 알 수 있습니다.

http://localhost:8000

그리고 Datastore 뷰어 :

http://localhost:8000/datastore

Google의 새로운 디자인 지침에 따르면 꽤 깔끔해 보입니다.


1

Google App Engines Datastore 뷰어는 참조 된 항목의 컬렉션 표시를 지원하지 않기 때문에 모든 하위 항목을 표시하도록 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

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.