จะเรียกดูพื้นที่เก็บข้อมูล Java App Engine ในเครื่องได้อย่างไร


84

ดูเหมือนว่าจะไม่มี _ah / admin ของ Python App Engine สำหรับการใช้งาน Java ของ Google App Engine

มีวิธีด้วยตนเองที่ฉันสามารถเรียกดูที่เก็บข้อมูลได้หรือไม่? ไฟล์ที่จะพบในเครื่องของฉันอยู่ที่ไหน? (ฉันใช้ปลั๊กอิน App Engine กับ Eclipse บน OS X)

คำตอบ:


111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html : "ในที่สุดเซิร์ฟเวอร์แอป dev จะมีโปรแกรมดูข้อมูลเริ่มแอปของคุณในพื้นที่และชี้ เบราว์เซอร์เพื่อ* เพื่อตรวจสอบ "http://localhost:8888/_ah/admin http://localhost:8000/datastore

* ณ1.7.7


อินเทอร์เฟซสำหรับผู้ดูแลระบบใหม่ยังใช้ไม่ได้กับชนิด / เอนทิตีที่สร้างโดย Native Datastore API ดังนั้นฉันยังคงต้องการ "โปรแกรมดู" ของฉัน :)
พอล

15
localhost: 8888 / _ah / adminทำงานเหมือนแชมป์สำหรับฉัน (โปรดทราบว่าพอร์ตเปลี่ยนไป) - แต่ฉันจะลองใช้ AppWrench เพื่อเปรียบเทียบ
Chad Gorshing

ขอบคุณมาก! ฉันต้องการสิ่งนี้จริงๆเพื่อแก้ไขปัญหาการคงอยู่
SunnyD

40

ขณะนี้ไม่มีโปรแกรมดูพื้นที่เก็บข้อมูลสำหรับ Java SDK ซึ่งควรจะมาใน SDK รุ่นถัดไป ในระหว่างนี้ทางออกที่ดีที่สุดของคุณคือเขียนอินเทอร์เฟซผู้ดูแลระบบของคุณเองพร้อมรหัสการดูพื้นที่เก็บข้อมูลหรือรอ SDK รุ่นถัดไป

ขณะนี้ Java App Engine มีโปรแกรมดูพื้นที่เก็บข้อมูลในเครื่องซึ่งสามารถเข้าถึงได้ที่http://localhost:8080/_ah/admin.


สิ่งนี้ซ้ำซ้อน - ดูโพสต์ของ dfrankow ด้านบน
Julian H

23
คุณหมายถึงลิงก์ไปยังบล็อกโพสต์ที่โพสต์หลายวันหลังจากที่ฉันโพสต์คำตอบนี้ 'ล้าสมัย' ฉันจะยอมรับ แต่การซ้ำซ้อนและโหวตลงนั้นโหดร้ายไปหน่อย
Nick Johnson

1
ฉันเห็นด้วย. คำตอบที่ดีในเวลานั้น ตอนนี้ล้าสมัยแล้ว
mcherm

@mcherm อันนี้ใช้ได้ผลสำหรับฉัน คำตอบอื่น ๆ ที่นี่ในอีกด้านหนึ่งไม่ได้
Johnny

6

ฉันมีพื้นที่เก็บข้อมูลในเครื่องบนสภาพแวดล้อม Windows + Eclipse ของฉันบน \ war \ WEB-INF \ appengine-created \ local_db.bin

เท่าที่ฉันเข้าใจมันใช้รูปแบบภายในชื่อ "โปรโตคอลบัฟเฟอร์" ฉันไม่มีเครื่องมือภายนอกที่จะนำเสนอไฟล์ในรูปแบบที่มนุษย์อ่านได้

ฉันใช้โค้ด "viewer" แบบธรรมดาดังนี้:

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"); ปัญหาอื่น: คุณจะแสดงเนื้อหาของคีย์ / ชื่อตารางที่แตกต่างกันพร้อมรหัสของคุณได้อย่างไร? เช่นสมุดเยี่ยม 1, gb2 เป็นต้น
ทิโม

2

ใน SDK เวอร์ชันล่าสุด ( 1.7.6+ ) ส่วนผู้ดูแลระบบของเซิร์ฟเวอร์ dev มาพร้อมกับเปลี่ยนตำแหน่ง

การวิเคราะห์บันทึกเอาต์พุตของเซิร์ฟเวอร์เราจะเห็นว่าสามารถเข้าถึงได้ที่:

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ไฟล์ด้วยโปรแกรมแก้ไขข้อความเช่น Notepad ++

ข้อมูลมีสัญญาณรบกวน แต่อย่างน้อยคุณสามารถอ่านและคัดลอกเพื่อแยกข้อมูลได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.