Cách duyệt kho dữ liệu Java App Engine cục bộ?


84

Có vẻ như không có _ah / admin của Python App Engine tương đương để triển khai Java của Google App Engine.

Có cách thủ công nào để tôi có thể duyệt qua kho dữ liệu không? Các tệp sẽ được tìm thấy trên máy của tôi ở đâu? (Tôi đang sử dụng plugin App Engine với Eclipse trên OS X).

Câu trả lời:


111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : "Cuối cùng, dev appserver có một trình xem dữ liệu. Khởi động ứng dụng của bạn cục bộ và trỏ trình duyệt sang * để kiểm tra. "http://localhost:8888/_ah/admin http://localhost:8000/datastore

* kể từ ngày 1.7.7


Giao diện quản trị mới vẫn không hoạt động với các loại / thực thể được tạo bởi API kho dữ liệu gốc. Vì vậy, tôi vẫn cần "người xem" của mình :)
Paul

15
localhost: 8888 / _ah / admin đã làm việc như một nhà vô địch đối với tôi (lưu ý rằng cổng đã thay đổi) - nhưng tôi sẽ dùng thử AppWrench chỉ để so sánh.
Chad Gorshing,

Cảm ơn bạn rất nhiều! Tôi thực sự cần điều này để gỡ lỗi vấn đề liên tục.
SunnyD 24/10/12

40

Hiện không có trình xem kho dữ liệu nào cho Java SDK - một trình xem sẽ có trong bản phát hành SDK tiếp theo. Trong thời gian chờ đợi, cách tốt nhất của bạn là viết giao diện quản trị của riêng bạn với mã xem kho dữ liệu - hoặc đợi bản phát hành SDK tiếp theo.

Java App Engine hiện có trình xem kho dữ liệu cục bộ, có thể truy cập tại http://localhost:8080/_ah/admin.


Điều này là thừa - hãy xem bài đăng của dfrankow ở trên.
Julian H

23
Ý bạn là liên kết đến bài đăng trên blog đã được đăng vài ngày sau khi tôi đăng trả lời này? 'lỗi thời' tôi sẽ chấp nhận, nhưng dư thừa và bỏ phiếu xuống là một chút tàn nhẫn.
Nick Johnson

1
Tôi đồng ý. Câu trả lời hay vào thời điểm đó; bây giờ đã lỗi thời.
mcherm

@mcherm cái này phù hợp với tôi. Các câu trả lời khác ở đây, ở phía bên kia, không.
Johnny,

6

Tôi có kho dữ liệu cục bộ trên môi trường Windows + Eclipse của mình trên \ war \ WEB-INF \ appengine-created \ local_db.bin

Theo như tôi hiểu, nó sử dụng định dạng nội bộ có tên là "bộ đệm giao thức". Tôi không có công cụ bên ngoài để hiển thị tệp ở định dạng có thể đọc được.

Tôi đang sử dụng mã "người xem" đơn giản như sau:

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

Mã tốt, nhưng tham số cho hàm tạo truy vấn bị sai: Bảng không đúng, đó là tên Thực thể. Trong ví dụ về sổ lưu bút, nó sẽ là "lời chào" là hàng. Tôi đã thử cách này nhưng không hiệu quả: final Query query = new Query ("Lưu bút / Lời chào"); Một vấn đề khác: Làm thế nào để bạn hiển thị nội dung của các khóa / tên khác nhau của một bảng với mã của bạn? Như guestbook1, gb2, v.v.
Timo

2

Trong các phiên bản mới nhất của SDK ( 1.7.6+ ), phần quản trị của máy chủ nhà phát triển đi kèm với nó đã thay đổi vị trí của nó

Phân tích nhật ký đầu ra của máy chủ, chúng tôi có thể thấy rằng nó có thể truy cập được tại:

http://localhost:8000

Và trình xem Kho dữ liệu :

http://localhost:8000/datastore

Trông khá gọn gàng - theo hướng dẫn thiết kế mới của google.


1

Vì trình xem kho dữ liệu của Google App Engines không hỗ trợ hiển thị bộ sưu tập các thực thể được tham chiếu, nên tôi đã sửa đổi phiên bản của Paul để hiển thị tất cả các thực thể con:

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

Cần lưu ý rằng không có gì được hiển thị cho các tập hợp / thực thể được tham chiếu rỗng.


Mã này tìm kiếm tất cả các thực thể của bạn và các thực thể con của chúng, điều gì sẽ xảy ra nếu các thực thể con cũng có con? chức năng này sẽ chạy dưới dạng đệ quy?
Pini Cheyni,

1

Mở \war\WEB-INF\appengine-generated\local_db.bintệp bằng trình soạn thảo văn bản, như Notepad ++.

Dữ liệu bị xáo trộn nhưng ít nhất bạn có thể đọc nó và bạn có thể sao chép để giải nén nó.


0

Đối với tôi, cách khắc phục là thực hiện đăng nhập bằng gcloudlệnh dưới đây

gcloud auth application-default login
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.