Digamos que tenemos una aplicación web respaldada por un motor/contenedor de servlet como Tomcat. Un usuario inicia sesión. Se carga el registro de la base de datos para ese usuario (representado por una instancia del usuario de la clase, digamos) y podemos almacenarlo como un atributo de sesión con la clave "usuario actual", configurarlo una vez y usarlo para manejar solicitudes posteriores. Además, ponemos más objetos en el atributo de la sesión. Bastante básico.Aplicación web Tomcat: ¿almacenar objetos como objetos definidos por el usuario o ID simples para persistir en las sesiones de usuario a través del reinicio del servidor?
Ahora, si tenemos que implementar algún código nuevo y reiniciar Tomcat ... Las sesiones de usuario siguen intactas después del reinicio (restaurado desde el disco/base de datos) siempre que no cambiemos ninguna de las clases cuyas instancias se almacenan en la sesión de usuario. Pero este es un gran problema. No quiero que los usuarios pierdan sus sesiones con la publicación de un nuevo código.
Para evitar este problema, supongo que puedo almacenar en el objeto de sesión solo instancias de clases que se supone que nunca cambian (como almacenar la ID del usuario conectado como un Entero a diferencia de una instancia del Clase de usuario). Entonces nunca me encontraría con el problema de no poder deserializar el objeto de sesión al reiniciar. Pero esto hace las cosas un poco más complicadas ya que ahora tengo que usar el ID para cargar el objeto real desde la base de datos, etc. (y con el almacenamiento en caché, el impacto en el rendimiento no es realmente un problema).
Es esto lo que típicamente se hace para solucionar este problema?
el primer escenario (almacenamiento de objetos completos) requiere un poco de inversión de tiempo para comprender cómo funciona la serialización. Si se hace correctamente, nunca debería "perder" nada en una nueva versión. – bestsss