2011-10-01 27 views
0

我奋力而在GAE处理会议。我试图在会话中存储两个类和一个字符串。虽然在DEV环境下它运行良好,但在生产中,类和字符串不会在会话中持久化。这是没有得到保存为一个会话属性的类如下:会话数据在GAE(Java)的不坚持

@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(); 
} 

我想再次提到它工作正常的开发环境,但对生产,我得到的值作为空。正如你所看到的,我已经让类实现了Serializable。但我认为这不是问题,因为我设置一个多个属性作为一个简单的字符串,也失败(我得到的属性值是零)。然而,会话被创建,因为我可以在后端看到它,并且还有一个会话持久化的类。

任何人有什么建议?提前致谢。

回答

0

制作类机构和联系Serializable接口解决了这个问题。这意味着会话属性中存在的每个对象(无论是嵌套还是其他)都应该是可序列化的。

4

你的问题可能与之一:

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

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

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

+0

谢谢! #2救了我。以为我疯了! – Craigo