Contextos de sesión de actividad y de transacción
En este tema se describe la relación jerárquica entre los contextos de transacción y de sesión de actividad. Esta relación, definida por el servicio de sesión de actividad requiere que cualquier contexto de transacción esté totalmente dentro o totalmente fuera de un contexto de sesión de actividad.
Un contexto de sesión de actividad es muy parecido a un contexto de transacción y amplía las opciones de ciclo de vida de la activación de los enterprise beans; puede encapsular una o más transacciones. El contexto de sesión de actividad es un contexto distribuido que, como el contexto de transacción, puede ser gestionado por bean o por contenedor. Un cliente utiliza principalmente un contexto de sesión de actividad para determinar el ámbito del ciclo de vida de un enterprise bean utilizado con transacciones individuales iniciadas por dicho cliente o sin ellas.
Las sesiones de actividad tienen una actividad general más baja que las transacciones y pueden utilizarse en lugar de las transacciones que se utilizan sólo para determinar el ámbito del ciclo de vida de un enterprise bean. Para un bean con una política de activación de sesión de actividad, la duración de cualquier transacción local de gestor de recursos (RMLT) iniciada por dicho bean puede estar limitada por la duración de la sesión de actividad en lugar del método de bean en el que se inició la transacción RMLT. Esto proporciona flexibilidad y potencial para utilizar transacciones RMLT en un enterprise bean más allá de las situaciones descritas en las especificaciones EJB (Enterprise JavaBeans). Las especificaciones EJB definen que las transacciones RMLT deberán haberse completado antes del final del método de bean, porque el método de bean es el único límite de contención de transacciones locales disponible en dichas especificaciones.
- El contenedor de EJB o web utiliza siempre un contenedor de transacciones locales (LTC) si no hay presente ninguna transacción global. El LTC puede tener ámbito de método o de sesión de actividad.
- Antes de asignar el método, el contenedor se asegura de que haya siempre un contexto de transacción global o LTC, pero nunca ambos contextos.
- Las sesiones de actividad no pueden anidarse entre sí. Cualquier intento de iniciar una sesión de actividad anidada provocará una excepción com.ibm.websphere.ActivitySession.NotSupportedException en UserActivitySession.beginSession().
- Una sesión de actividad puede encapsular totalmente una o más transacciones globales.
- La aplicación puede finalizar la sesión de actividad con una operación para aplicar un punto de comprobación o para restaurar todos los recursos. La operación endSession(EndModeCheckpoint) comprueba los puntos del trabajo que se ha coordinado en ActivitySession y, después, finaliza el contexto. La operación endSession(EndModeReset) restablece, en el último punto de coherencia, el trabajo que se ha coordinado en la ActivitySession y, después, finaliza el contexto.
- Una transacción global no puede encapsular una sesión de actividad ni tampoco deben solaparse los límites de una sesión de actividad y una transacción global. Cualquier intento de iniciar una sesión de actividad en presencia de un contexto de transacción global provocará una excepción com.ibm.websphere.ActivitySession.NotSupportedException en UserActivitySession.beginSession(). Cualquier intento de llamar a endSession(EndModeCheckpoint) en una sesión de actividad que contenga una transacción global incompleta provocará una excepción com.ibm.websphere.ActivitySession.ContextPendingException. No se verán afectados ni el contexto de sesión de actividad ni el contexto de transacción global. Si se llama, endSession(EndModeReset), la ActivitySession se restablece y las transacciones globales se marcan como rollback_only.
- Cada transacción global totalmente encapsulada por una sesión de actividad es independiente de cualquier otra transacción global de esa sesión de actividad. Una retrotracción de una transacción global no afecta a las demás ni a la propia sesión de actividad.
- Los contextos de transacción global y de sesión de actividad pueden coexistir con una sesión de actividad que encapsule una o más transacciones globales que se ejecutan en serie.
- Los métodos iniciales EJB no pueden participar en una sesión de actividad porque esta situación podía ocasionar puntos muertos. Los métodos iniciales EJB se ejecutan en su propio LTC independiente.