Мы только что перешли на Glassfish V2. Теперь мы получаем ошибки при установке атрибута сеанса.
Ошибка:
java.lang.IllegalArgumentException: PWC2788: setAttribute: Non-serializable attribute
Код:
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
getQuestions () - это просто простой метод получения, который находится внутри абстрактного класса с именем 'Parent Action' .... поэтому чтобы сделать getQuestions () сериализованным объектом, мой класс должен реализовать serializable?:
public List getQuestions() {
return questions;
}
- Как мы можем сделать этот объект
сериализуемый
- это хорошая практика, чтобы положить только
сериализованный объект в сеансе (как
Glassfish, кажется, требует)?
- Есть ли риск того, что сессии
поменялся местами между пользователями с сериализованным
объекты?
Редактировать: я использую ORM (iBatis)
Подробнее о "Вопросах"
сеттер:
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());
}