【问题标题】:Session data not persisting in GAE (Java)会话数据不保留在 GAE (Java) 中
【发布时间】:2013-03-29 00:54:30
【问题描述】:

我在 GAE 中处理会话时遇到了困难。我正在尝试在会话中存储两个类和一个字符串。尽管在 DEV 环境中它运行良好,但在生产中,一个类和一个字符串不会在会话中持续存在。未保存为会话属性的类如下:

@PersistenceCapable(detachable="true")
public class Agent implements Serializable{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Long id;

  @Persistent private String name;  //Name of the Agency
  @Element(dependent = "true") 
  private List<Contact> contacts = new ArrayList<Contact>();

  @Element(dependent = "true") 
  private List<Agency> agencies = new ArrayList<Agency>();

  @Persistent private List<Long> subAgents = new ArrayList<Long>();

  @Persistent private Date createdOn = new Date();  
}

我想再次提一下,它在 DEV 环境中运行良好,但在生产环境中我得到的值为 null。如您所见,我已经使该类实现了可序列化。但我认为这不是问题,因为我将另外一个属性设置为一个简单的字符串并且这也失败了(我将属性值设为空)。然而,会话是创建的,因为我可以在后端看到它,并且还有一个类在会话中持久化。

有人有建议吗?提前致谢。

【问题讨论】:

    标签: google-app-engine session


    【解决方案1】:

    您的问题可能与以下任一有关:

    1. GAE 通常几乎立即序列化会话,而开发环境则不会。因此,图中的所有对象都必须实现 Serializable。

    2. 但更可能的是,在您修改会话变量后,您必须执行类似 req.getSession().setAttribute(myKey,myObj) 之类的操作 - 它不会看到对象中的更改并自动将它们写回到会话......所以会话属性将具有它们上次设置时所具有的任何值。

    上面的问题 #2 让我付出了无数的时间和痛苦,直到我绊倒(通过一个漫长的消除过程)。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • **知道了!实际上,我没有使 Contact 和 Agency Serializable 类。我做了它们,它们现在很好:)
      【解决方案3】:

      使类 Agency 和 Contact Serializable 解决了这个问题。这意味着会话属性中存在的每个对象(无论是嵌套的还是其他的)都应该是可序列化的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 2016-03-30
        • 1970-01-01
        • 2015-10-21
        相关资源
        最近更新 更多