![[z/OS]](../images/ngzos.gif)
Trabajo InFlight y posible modalidad de terminación anormal
La modalidad de terminación anormal se activa cuando ocurre un error antes de que una transacción distribuida empiece a confirmarse.
Si tiene una transacción distribuida que abarca varios servidores, los gestores
de recursos implicados en el trabajo pueden mantener bloqueos transaccionales. Cuando se produce una anomalía antes de que se haya empezado a confirmar esa transacción distribuida, el producto y los gestores de recursos pasan a una supuesta modalidad de terminación anormal. En esta modalidad, los gestores de recursos retrotraen la transacción.
- El efecto de una anomalía del servidor o un error de comunicaciones variará dependiendo de qué servidor esté ejecutando el trabajo en el momento del error.
- Puede que se necesite un tiempo de espera de OTS para retrotraer las ramas subordinadas del árbol de transacciones distribuidas.
Ejemplo: Un caso muy común es cuando tiene un cliente web de un servidor B que controla un bean de sesión en el mismo servidor. Ese bean de sesión ha ejecutado
trabajo con beans de entidad en los servidores C y D. Todos los servidores están
implicados en la misma transacción global distribuida. De repente, el servidor B
falla cuando el bean de sesión está en InFlight (todavía no se ha empezado a
confirmar). Los servidores C y D esperan más trabajo o el inicio del protocolo de
compromiso de dos fases pero, durante este estado, puede que los gestores de
recursos continúen manteniendo los bloqueos transaccionales. Por lo tanto, los
roles de servidor son los siguientes:
- Servidor A: se ha ejecutado el servlet/JavaServer Page
- Servidor B: se ha accedido al bean de sesión
- Servidor C: se ha accedido al bean de entidad
- Servidor D: se ha accedido al bean de entidad
Cuando hay implicados gestores de recursos locales, RRS comprueba que se llame a estos gestores para realizar el supuesto proceso de terminación anormal. En la recuperación, RRS trabaja con los gestores de recursos para garantizar que la recuperación se realice correctamente. Si se produce un error cuando el trabajo está en InFlight, RRS dirige los gestores de recursos implicados en el UR local para que retrotraigan la transacción.
El producto siempre supone que se debe
realizar alguna recuperación. Cada vez que se activa un servidor, hace
algo diferente dependiendo de la modalidad en la que se ejecute:
- Si el servidor se está ejecutando en la modalidad de reinicio/recuperación, el producto comprueba si se necesita alguna recuperación. Si la recuperación es necesaria, el producto intenta realizar la recuperación y la completa con éxito o se interrumpe.
- Si el servidor se ejecuta con normalidad, la transacción de reinicio/recuperación no tiene que terminar antes de que el servidor acepte nuevo trabajo. Después de que el servidor determine cuál es el trabajo de reinicio, empieza a aceptar nuevos elementos de trabajo. El proceso de la transacción de reinicio/recuperación continúa junto con el proceso de nuevos elementos de trabajo.