代码之家  ›  专栏  ›  技术社区  ›  Yoram

在数据存储视图中找不到用objectify持久化的实体

  •  0
  • Yoram  · 技术社区  · 8 年前

    我在google cloud上有一个非常简单的hello world应用程序,带有objectify。

    我使用最新的谷歌云工具(1.6-1)用于Eclipse(Office 4.7.3a),Java 8,并运行数据存储仿真器(如 Elliotte's answer )

    我可以保存一些实体,我可以告诉它们是持久的,因为我可以在重新启动模拟器后检索它们,并且我知道它们存储在“C:\users\xxxx\appdata\roaming\gcloud\emulators\datastore\WEB-INF\appengine generated”下。

    但在任何命名空间下的数据存储视图中都找不到这些实体。你知道我在这里遗漏了什么吗?

    空数据存储视图: enter image description here

    代码:

    
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws IOException {
    
          Car porsche = new Car("2FAST", 4);
          ofy().save().entity(porsche).now();    // async without the now()
    
          assert porsche.id != null;    // id was autogenerated
    
          Car fetched2 = ofy().load().type(Car.class).id(porsche.id).now();
    
          Query cars = ofy().load().type(Car.class).chunkAll();
    
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
    
        response.getWriter().print("Hello App Engine!\r\n");
    
        response.getWriter().print(fetched2.id + " " + fetched2.license);
    
    
        response.getWriter().print("\ncars.count():" + cars.count() + "\n");
        List carsList = cars.list();
        for(Car c :carsList) {
            response.getWriter().println(c.id + " " + c.license);
        }
    
    
        String namespace = NamespaceManager.get();
        response.getWriter().println();
        response.getWriter().println("namespace: ");
    
      }
    

    运行模拟器: enter image description here

    运行配置:

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  1
  •   Dan Cornilescu    8 年前

    本地管理数据存储页是由本地开发服务器提供的,似乎只有在开发服务器本身以独立模式执行数据存储模拟时,它才会显示有效信息。这不需要连接到数据存储模拟器,如果不设置连接到模拟器所需的环境,就会发生这种情况。在数据存储模拟器出现之前,这是唯一的操作模式。

    在使用数据存储模拟器时,我没有找到访问等效/类似信息的方法,在 Running the Cloud Datastore Emulator . 只有数据存储模拟器才能可靠地提供这些信息,因为它可以同时服务于多个开发服务器/应用程序(忽略彼此的存在)。

    如果不需要运行多个共享同一数据存储的开发服务器(与 Is it possible to start two dev_appserver.py connecting to the same google cloud datastore emulator? )那你就不能设置 DATASTORE_EMULATOR_HOST 环境变量,然后再启动开发服务器,而不通过 --support_datastore_emulator=true 对它-然后开发服务器将使用它自己的数据存储模拟,您应该在它的管理页面中看到这些信息。

    请注意,数据存储仿真程序可能对数据使用了与开发服务器不同的内部格式,这可能会导致问题如果返回,则可能需要清除 C:\Users\XXXX\AppData\Roaming\gcloud\emulators\datastore 存储目录,恢复以前的格式或使用备用目录。从 Migrating to the Cloud Datastore Emulator :

    目前,本地数据存储模拟器在sqlite3中存储数据,而 云数据存储仿真器将数据存储为Java对象。

    当dev_appserver使用旧版sqlite3数据启动时,数据将 转换为Java对象。原始数据用 文件名{原始数据文件名}.sqlitestub。