我们刚刚切换到Glassfish V2。在设置会话属性时,我们现在遇到了错误。
错误信息如下:
java.lang.IllegalArgumentException: PWC2788: setAttribute: Non-serializable attribute
代码是:
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
getQuestions()是一个简单的getter,位于名为“Parent Action”的抽象类中...所以要使getQuestions()成为可序列化对象,我的类需要实现Serializable吗?
public List getQuestions() {
return questions;
}
- 我们如何使这个对象可序列化?
- 只将序列化的对象放入会话中是否是一个好的实践方法(因为Glassfish似乎要求这样做)?
- 会话中序列化对象被交换到其他用户是否存在风险?
编辑:我正在使用ORM(iBatis)
有关“问题”的更多信息:
setter:
public void setQuestions(List questions) {
this.questions = questions;
}
在这个方法中调用setter。该方法调用iBatis映射。
public void prepareQuestions()
{
setExamIfaceDAO((SecurityExamIfaceDAO)ApplicationInitializer.getApplicationContext().getBean("securityExamIfaceDAO"));
String userRole = questionsBasedOnUserRole();
int questionsToBeShown = 0;
if (userRole.equalsIgnoreCase("C"))
questionsToBeShown = 15;
else if (userRole.equalsIgnoreCase("U"))
questionsToBeShown = 10;
List local_questions = getExamIfaceDAO().getSecurityQuestions(userRole);
Collections.shuffle(local_questions);
if (local_questions.size()>=questionsToBeShown)
setQuestions(local_questions.subList(0, questionsToBeShown));
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
}