2009-07-09 27 views
83

Dường như không có tương đương với _ah/admin của Máy ứng dụng Python cho việc triển khai Java của Google App Engine.Cách duyệt kho dữ liệu của Máy ứng dụng Java cục bộ?

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

Trả lời

6

tôi có kho dữ liệu cục bộ trên môi trường Windows + Eclipse của tôi trên \ chiến tranh \ WEB-INF \ appengine tạo \ local_db.bin

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

Tôi đang sử dụng đơn giản "xem" mã như thế này:

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

Mã là tốt, nhưng tham số cho hàm tạo truy vấn sai: Bảng không đúng, nó là tên thực thể. Trong ví dụ về lưu bút, nó sẽ là "lời chào", là hàng.Tôi đã thử điều này, nhưng không hoạt động: truy vấn cuối cùng truy vấn = new Query ("Guestbook/Greeting"); 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? Giống như guestbook1, gb2, v.v. – Timo

39

Hiện tại không có người xem kho dữ liệu cho Java SDK - một nên đến trong bản phát hành SDK tiếp theo. Trong khi đó, đặt cược 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 chờ 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.

+0

Đây là dư thừa - xem bài viết của dfrankow ở trên. –

+23

Bạn có nghĩa là liên kết tới bài đăng trên blog đã được đăng vài ngày _after_ Tôi đã đăng câu trả lời này? 'đã lỗi thời' tôi sẽ chấp nhận, nhưng thừa và bỏ phiếu xuống là một chút tàn nhẫn. –

+1

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

110

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: "Tại lâu trước, appserver dev có một người xem dữ liệu Bắt đầu ứng dụng của bạn trong nước và trỏ trình duyệt tới http://localhost:8888/_ah/adminhttp://localhost:8000/datastore * để kiểm tra xem nó ra.."

* tính 1.7.7

+0

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

+15

http: // localhost: 8888/_ah/admin làm việc như một nhà vô địch cho tôi (lưu ý cổng đã thay đổi) - nhưng tôi sẽ thử AppWrench chỉ để so sánh. –

+0

Cảm ơn bạn rất nhiều! Tôi thực sự cần điều này để gỡ rối một vấn đề dai dẳng. – SunnyD

1

Bởi vì Google App Engines Datastore người xem không hỗ trợ hiển thị các bộ sưu tập của các đối tượng tham chiếu, tôi sửa đổi phiên bản của Paul để hiển thị tất cả các đơn vị hậu duệ:

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

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

+0

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 họ, nếu các thực thể con có con thì sao? chức năng này sẽ chạy như đệ quy? –

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ủ dev đi kèm với nó đã thay đổi vị trí của nó

Phân tích các bản ghi đầu ra máy chủ chúng ta có thể thấy rằng nó có thể truy cập tại địa chỉ:

http://localhost:8000

Datastore xem:

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

Mở tệp \war\WEB-INF\appengine-generated\local_db.bin bằng trình chỉnh sửa văn bản, như Notepad ++.

Dữ liệu được tranh giành nhưng ít nhất bạn có thể đọc và bạn có thể sao chép để trích xuất dữ liệu đó.

Các vấn đề liên quan