viewmap valor serializacion deserializacion definiendo atributo java tomcat serialization javabeans

valor - implements serializable java



Propósito de la serialización en webapplication (5)

Wow, muchas preguntas sin mucho contexto.

Para su # 1 asumiré que está hablando de serialización, en la cual alude en sus otros puntos acerca de la serialización de Java, no de la serialización frente al paralelismo. Si es así, muchas aplicaciones web serializarán o guardarán el estado de los objetos para mantener su duración. Esa durabilidad se puede utilizar a través de solicitudes HTTP (como en la gestión de sesiones), para el almacenamiento a largo plazo de la información, o para enviar a través de una "red" en términos de garantizar que todas las partes obtengan una copia de dicha información.

Uno debe preguntarse en HTTP si eso es realmente una buena idea, ya que por diseño y escala stateless es "bueno" y si uno tiene una tienda de respaldo, como un DB, por qué el DB no está haciendo el trabajo. El form bean que supongo se usa en esta naturaleza ya que los servlets pasarán la información del formulario como se describe.

1. ¿Dónde está el uso de la serialización en una aplicación web?

2. Es necesario que un form bean sea serializable.

3. En Tomcat, ¿cuál es el uso del archivo sessions.ser ...


Las sesiones (y todos los atributos agregados) deben ser serializables si el contenedor desea almacenar la sesión. Esto puede tener dos razones:

  1. la sesión debe pasarse a otro nodo de un clúster con equilibrio de carga
  2. las sesiones deben ser intercambiadas por falta de memoria

Otra posible razón es pasar los atributos de solicitud de una aplicación web a otra usando dispathing transversal de contexto. Ambas aplicaciones webapps tienen diferentes cargadores de clases, por lo que el molde simple no funcionaría.

Entonces su tomcat parece escribir la sesión en un archivo usando la serialización. Por lo general, un bean form también se almacena en la sesión, así que sí, tiene que ser serializable.

Y por último, puede haber muchas más razones para ser serializable como en cualquier otra aplicación. Es posible que las cachés necesiten cambiar el contenido del caché (como lo hace ehcache). Cualquier otra parte de datos puede ser serializada para ser almacenada como blob en una base de datos, ...


1) Es una función dependiente del servidor de aplicaciones, pero la especificación del servlet indica que si el contenedor de servlets desea admitir entornos distribuidos (sesiones compartidas entre instancias) y cosas similares, debe aceptar objetos que implementen Serializable y puedan migrarlos. Tomcat también admite el almacenamiento del estado de la sesión en los reinicios del servidor para los objetos de sesión que son serializables. Puede activar o desactivar esta característica de Tomcat en el archivo conf / context.xml (ver comentarios allí).

2) Sería necesario que un form bean fuera serializable si a) tiene una sesión delimitada yb) está utilizando sesiones distribuidas o una función como Tomcat para persistir en la sesión que lo requiere.

3) El archivo sessions.ser es el archivo que contiene los objetos serializados de la sesión. Tomcat usa esto para preservarlos en todos los reinicios del servidor si lo tiene configurado para hacerlo (ver arriba). En general, un archivo .ser es un objeto Java serializado, que es una representación binaria del estado del objeto.


  1. Una descripción bastante buena de wikipedia :

    La serialización tiene una serie de ventajas. Proporciona:

    • un método de persistencia de objetos que es más conveniente que escribir sus propiedades en un archivo de texto en el disco, y volver a ensamblarlas leyendo esto nuevamente.
    • un método para emitir llamadas a procedimientos remotos, por ejemplo, como en SOAP
    • un método para distribuir objetos, especialmente en componentes de software
      como COM, CORBA, etc.
    • un método para detectar cambios en datos variables en el tiempo.

    Un ejemplo del mundo real (simple): supongamos que crea una instancia de usuario en java. Ahora quiere mostrar este objeto en un navegador web usando javascript. Una opción es serializar el objeto de tal manera que javascript pueda deserializar el objeto (usando una representación que tanto java como javascript puedan entender) y mostrarlo.

  2. Depende de lo que necesite hacer con el formulario Bean en cuanto a si debe ser serializado o no.
  3. La aplicación Tomcat Manager es una aplicación web que le ayuda a implementar y administrar otras aplicaciones web para Tomcat. No soy un experto en tomcat, pero creo que The Tomcat Manager intenta recordar información sobre las sesiones creadas por las aplicaciones web que administra. Necesita recordar esta información incluso cuando se reinicie el proceso de tomcat. Entonces, Tomcat Manager crea un archivo llamado "Session.ser", que es una representación serializada de la información que necesita recordar sobre todas las sesiones de las aplicaciones administradas.

Para su primera y segunda pregunta, eche un vistazo a este hilo SO . En cuanto a su tercera pregunta, sessions.ser es una sesión serializada. Sin embargo,

  1. Sí, necesitamos serialización siempre que necesitemos persistir objetos en el sistema de archivos o enviar objetos por el cable. Puede pensar que en una aplicación web no necesariamente hacemos eso. Pero el servidor generalmente requiere una cosa serializable en caso de que se necesite en el futuro cuando se cambia a un entorno en clúster o si desea pasar su bean a un componente remoto, es decir, el componente EJB. O tal vez desee almacenar su frijol en una sesión, por esa razón sus granos deben ser serializables. Incluso el Servlet es serializable, piense en enviar el componente por el cable.

  2. Sí, por la misma razón, mencionada anteriormente.

  3. sessions.ser es una sesión serializada. Tomcat lo persistió, por lo que se puede recuperar más tarde. Ahora tenía una idea de por qué necesitamos beans serializables, porque es posible que desee almacenar objetos de beans en la sesión y Tomcat persista en la sesión en el sistema de archivos, es decir, session.ser. Por lo tanto, sus beans deben implementar Serializable para que puedan ser persistentes / recuperados con la sesión.

Por cierto, la corrección de la persistencia y recuperación del bean depende de la correcta implementación de Serializable. Para eso, le recomendaría que lea los temas relacionados en Java efectivo.