Acabamos de cambiar a Glassfish V2. Ahora estamos obteniendo errores al configurar un atributo de sesión.setAttribute: atributo no serializable (Serialización de objetos Java)
error es:
java.lang.IllegalArgumentException: PWC2788: setAttribute: Non-serializable attribute
Código es:
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
getQuestions() es simplemente un captador simple que se encuentra dentro de una clase abstracta llamada 'Padres en Acción' .... por lo que para hacer getQuestions() de un objeto serializado hace mi necesidad clase para implementar serializable ?:
public List getQuestions() {
return questions;
}
- ¿Cómo podemos hacer que este objeto serializable?
- ¿es una buena práctica poner solo el objeto serializado en la sesión (como parece estar requiriendo Glassfish)?
- ¿Hay riesgos de que las sesiones sean intercambiadas entre usuarios con objetos serializados ?
Editar: Estoy utilizando ORM (iBatis)
más información sobre "Preguntas"
colocador:
public void setQuestions(List questions) {
this.questions = questions;
}
colocador se llama dentro de este método. este método llama a las asignaciones de 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());
}
Para cualquier persona con problema similar : cuando haces una sublista en una lista obtienes RandomAccessList que no implementa Serializable. Entonces la solución es agregar todo a una lista de búsqueda como ArrayList. – Omnipresent