【问题标题】:Exception on trying to access the entity using key in GAE datastore尝试使用 GAE 数据存储中的密钥访问实体时出现异常
【发布时间】:2013-09-06 09:47:27
【问题描述】:

我实际上是在使用 GAE 构建聊天室,问题是我将 clientid 和令牌存储在 chatrromservlet 中,并使用数据存储密钥在 sayservlet 中访问它们,但是当我尝试使用我得到的密钥从 sayservlet 访问数据存储时找不到具有密钥的实体的异常。

我的聊天室servlet

    String clientid = request.getParameter("clientid");
    ChannelService channelService = ChannelServiceFactory.getChannelService();

    String token = channelService.createChannel(clientid);
    channelService.sendMessage(new ChannelMessage(token, "Hello World"));
    System.out.println("token is ="+token);

    JSONObject job=new JSONObject();
    job.put("token",token);

    Key userkey=KeyFactory.createKey("users", "user1");
    System.out.println("user key in chatroom "+ userkey);
    Entity ent=new Entity("user");
    ent.setProperty("clientid", clientid);
    ent.setProperty("token", token);


    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.put(ent);
    System.out.println(ent);  

说 servlet 是

            String message = request.getParameter("message");
            String clientid = request.getParameter("clientid");
            System.out.println(message);

            Key userkey=KeyFactory.createKey("users", "user1");
            Entity entity;
            DatastoreService datastore = DatastoreServiceFactory
                    .getDatastoreService();
            entity = datastore.get(userkey);
            String token = (String) entity.getProperty("token");
            System.out.println("token frm db ="+token);

            ChannelService channelService = ChannelServiceFactory.getChannelService();
            channelService.sendMessage(new ChannelMessage(token, "Hello World"));
            System.out.println("message is ="+message);
            System.out.println("cid is ="+clientid);

如果在访问过程中出现任何错误,请帮助我。

【问题讨论】:

    标签: google-app-engine google-cloud-datastore channel-api


    【解决方案1】:

    看起来您在聊天室servlet 中创建了一个实体,但您没有使用生成的密钥。因此,当您在 say servlet 中通过该键查找时,数据存储将无法找到实体。

    您的聊天室servlet 应该使用userkey 创建实体:

    密钥 userkey=KeyFactory.createKey("users", "user1"); System.out.println("聊天室用户密​​钥"+ userkey); 实体 ent=新实体(用户密钥);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多