- un caso estándar - que tienen un controlador (
@Controller
) con@Scope("session")
. - clases puesto en la sesión se espera normalmente para implementar
Serializable
para que puedan ser almacenados físicamente en caso de que se reinicie el servidor, por ejemplo - Si el controlador implementa
Serializable
, esto significa que todos los servicios (otros granos de primavera) que es la referencia también será serializada. A menudo son proxies, con referencias a gestores de transacciones, fábricas de gestores de entidades, etc. - No es improbable que algún servicio, o incluso controlador, contenga una referencia al
ApplicationContext
, implementandoApplicationContextAware
, por lo que esto puede significar que el todo el contexto está serializado. Y dado que tiene muchas conexiones, es decir, cosas que no son serializables por idea, se restaurará en estado corrupto.
Hasta ahora he ignorado estos problemas. Recientemente pensé en declarar todas mis dependencias de primavera transient
y recuperarlas en readResolve()
mediante las clases de utilidad estática WebApplicationContextUtils
y las que mantienen la solicitud/ServletContext en un ThreadLocal
. Esto es tedioso, pero garantiza que, cuando el objeto se deserialice, sus dependencias estarán "actualizadas" con el contexto de la aplicación actual.primavera ámbito de sesión (controladores) y referencias a servicios, en términos de serialización
¿Hay alguna práctica aceptada para esto o alguna guía para serializar partes del contexto de primavera?
Tenga en cuenta que en JSF, los beans administrados (~ controladores) tienen estado (a diferencia de los marcos web basados en acciones). Entonces quizás mi pregunta sea más para JSF, que para spring-mvc.
cualquier cambio para un enlace? :) – Bozho
¡Lo encontraste! http://www.infoq.com/presentations/Whats-New-in-Spring-3.0 Desplácese 1 hora en la película –
Genial. Explica exactamente este problema. y está resuelto. Incluso sin Configurable. Edité tu respuesta para indicar eso. – Bozho