Modelo de uso para utilizar sesiones de actividad con sesiones HTTP
En este tema se describe cómo una aplicación web que se ejecuta en el contenedor web de WebSphere puede participar en un contexto de sesión de actividad.
Si la aplicación web se ha diseñado de forma que se produzcan varias invocaciones de servlet como parte de la aplicación de la misma lógica, entonces los servlets pueden utilizar el objeto de sesión Http para conservar el estado en invocaciones de servlet. El contexto de sesión de actividad es un estado que puede suspenderse en la sesión Http y reanudarse al invocarse posteriormente un servlet que acceda al objeto de sesión Http.
La sesión de actividad está asociada mediante programación con una sesión Http, por lo que se puede utilizar para ampliar el acceso a la sesión de actividad en varias invocaciones HTTP, en inclusión o reenvío de servlets y para dar soporte a periodos de activación EJB (Enterprise JavaBeans) que se pueden determinar por el ciclo de vida del cliente HTTP de web. Se puede utilizar un contexto de sesión de actividad almacenado en una sesión Http para relacionar otra vez trabajo de la sesión de actividad con un cliente HTTP de web específico.
- El contenedor web arranca y finaliza las sesiones de actividad.La aplicación web invoca un servlet que ha sido configurado para el control de contenedores de sesiones de actividad.
- Si existe una sesión Http, tendrá una sesión de actividad asociada.
- Si no existe una sesión Http, el servlet puede arrancar una, lo que hace que se arranque automáticamente una sesión de actividad y se asocie con dicha sesión Http.
Un servlet no puede arrancar una sesión Http nueva hasta que se finalice la sesión Http existente. Dentro de una sesión Http, la aplicación web puede invocar otros servlets que pueden utilizar el contexto de la sesión de actividad asociada. Cuando la aplicación web invoca un servlet que finaliza una sesión Http, la sesión de actividad finaliza automáticamente. Esto se muestra en el diagrama siguiente:
Figura 1. Control de contenedor web de ActivitySessions. Esta figura se describe en el texto circundante. - La aplicación web arranca y finaliza las sesiones de actividad.La aplicación web invoca un servlet que ha sido configurado para el control de aplicaciones de sesiones de actividad.
- Si existe una sesión Http y tiene una sesión de actividad asociada, el servlet puede utilizar o finalizar el contexto de la sesión de actividad.
- Si no existe una sesión Http, el servlet puede arrancar una, pero esto no arranca automáticamente una sesión de actividad.
- Si existe una sesión Http pero no tiene una sesión de actividad asociada, el servlet puede arrancar una sesión de actividad nueva. Esto asocia automáticamente la sesión de actividad con la sesión Http. La sesión de actividad dura hasta que finalice de forma específica o hasta que finalice la sesión Http.
El servlet no puede arrancar una sesión de actividad nueva hasta que se finalice la sesión de actividad existente. El servlet no puede arrancar una sesión Http nueva hasta que se finalice la sesión Http existente.
Dentro de una sesión Http, la aplicación web puede invocar otros servlets que pueden utilizar o finalizar un contexto de la sesión de actividad existente o, si no existen sesiones de actividad, arrancar una nueva. Cuando la aplicación web invoca un servlet que finaliza una sesión Http, la sesión de actividad finaliza automáticamente. Esto se muestra en el diagrama siguiente:
Figura 2. Control de aplicación web de ActivitySessions,. Esta figura se describe en el texto circundante.
Una aplicación web puede invocar servlets configurados para cualquier modelo de uso.
Los puntos siguientes se aplican a ambos modelos de uso:
- Para finalizar una sesión Http (y cualquier sesión de actividad asociada), la aplicación web debe invalidar dicha sesión. Esto hace que se compruebe la sesión de actividad.
- Cualquier enterprise bean en sentido descendente dentro del contexto de una sesión de actividad puede permanecer en la memoria en lugar de desactivarse entre invocaciones de servlet porque el cliente se convierte efectivamente en el cliente HTTP de web.
- Las aplicaciones web pueden estar formadas por varios servlets, pero cada servlet de la aplicación web debe tener configurado un valor para ActivitySessionControl. ActivitySessionControl determina si el servlet o su contenedor inicia cualquiera de las sesiones de actividad.
- Un contexto de sesión de actividad que encapsule un contexto de transacción activa no puede asociarse con un objeto de sesión Http porque una transacción puede contener bloqueos de base de datos y normalmente se diseña para que tenga una corta duración. Si una aplicación traslada una transacción activa a una sesión Http, la transacción se retrotrae y la sesión de actividad se suspende en la sesión HTTP. En general, debe diseñar aplicaciones de modo que utilicen sesiones de actividad u otras construcciones como las entidades de larga duración y transacciones ACID, como las entidades de corta duración contenidas en éstas.
- En una sesión de actividad, sólo se puede asociar una sesión de actividad con un objeto de sesión Http cada vez. Una sesión de actividad asociada con un objeto de sesión Http permanece asociada mientras dure la sesión de actividad y no puede sustituirse por otra hasta que la primera sesión de actividad se haya completado. Varios servlets pueden acceder a la sesión de actividad si tienen acceso compartido a la sesión Http.
- Las sesiones de actividad no son persistentes. Si un objeto de sesión Http persistente existe durante más tiempo que el servidor que lo aloja, cuando éste finaliza, toda sesión de actividad almacenada en memoria caché terminará.
- Si la sesión Http sobrepasa el tiempo de espera antes que termine la
sesión de actividad asociada, la sesión de actividad se restablece1.
Esto retrotrae los recursos de la sesión de actividad al
último punto de coherencia:
- Si la aplicación web ha invocado a un servlet que se ha configurado para el control de contenedores de sesiones de atividad, los recursos de la sesión de actividad se retrotraen completamente.
- Si la aplicación web ha invocado a un servlet que se ha configurado para el control de aplicaciones de sesiones de actividad, los recursos de la sesión de actividad se retrotraen al último punto de control tomado por el servlet, o completamente si no se ha tomado ningún punto de control.
- Si se cumple el tiempo de espera de la sesión de actividad, se restablece al último punto de coherencia (ver elemento anterior), y finaliza la sesión Http.