GAE会话的离线或在线行为不同

时间:2013-01-09 16:41:31

标签: java google-app-engine session servlets

我有这段代码:

private String delete(HttpServletRequest req, HttpServletResponse res, Seller seller) throws Exception {

    //check data
    if(req.getParameter("equipmentId") == null) {

    throw new Exception("equipmentId undefined");

}

//build
Equipment equipment = new Equipment(Integer.parseInt(req.getParameter("equipmentId")));

//delete
dbEquipment.delete(equipment);

//remove in array list
for(int i = 0; i < seller.getListEquipment().size(); i++) {

    if(seller.getListEquipment().get(i).getId() == equipment.getId()) {

        seller.getListEquipment().remove(i);

    }

}

//response
return "ok";

}

传递的卖方属性来自HTTPSession:((卖方)req.getSession()。getAttribute(“user”))

此代码更新我的对象卖家罚款离线但在线更新没有显示,它仍然是旧对象/ ArrayList。

2 个答案:

答案 0 :(得分:1)

在更新内容后尝试将对象保存回会话。

答案 1 :(得分:0)

在你的appengine-web.xml中添加以下行:

<sessions-enabled>true</sessions-enabled>

我不确定,但这对我来说一直是个错误。 :P

此外,您需要确保要保留到会话的所有对象都实现java.io.Serializable接口。对象需要可序列化的原因是App Engine将会话数据存储在数据存储区和内存缓存中。您放入会话中的值所引用的任何对象都必须是可序列化的,因此整个对象图都可用。我发现有趣的是它必须以基于事务的方式提交会话数据,因为我还在会话中存储了一个字符串,但也没有保留。如果对象不可序列化,则应用程序不会在本地开发计算机中失败,但在部署到云时会失败。

来源:http://afewguyscoding.com/2011/02/httpsession-google-app-engine/