La segmentación se refiere a la forma en que un programa interactúa con su entorno antes de emitir una sentencia converse.
Por omisión, un programa que presenta formularios de texto está
no segmentado,
lo que significa que el programa se comporta como si estuviera siempre en memoria y proporcionando un servicio sólo a un usuario. Se aplican las siguientes normas antes de que un programa no segmentado emita una sentencia
converse:
- No se comprometen las bases de datos y otros recursos recuperables
- No se liberan los bloqueos
- Se conservan las posiciones de archivo y de base de datos
- Las tablas EGL de un solo usuario no se renuevan; sus valores son los mismos antes y después de emitirse la sentencia converse
- De forma parecida, no se renuevan las variables de sistema
Un programa llamado siempre está no segmentado
Un programa no segmentado puede ser más fácil de codificar. Por ejemplo, no es necesario volver a adquirir un bloqueo en una fila SQL después de una sentencia converse.
Un inconveniente es que las filas SQL están retenidas mientras el usuario está pensando, un comportamiento que causa problemas de rendimiento para otros usuarios que necesitan acceder a la misma fila SQL.
Existen dos técnicas para liberar o renovar los recursos antes de que se emita una sentencia converse en un programa no segmentado:
- Puede establecer la variable de sistema ConverseVar.commitOnConverse
en 1. Los resultados son los siguientes antes de una sentencia converse:
- Se comprometen las bases de datos y otros recursos recuperables
- Se liberan los bloqueos
- No se conservan las posiciones de archivo y de base de datos
- No se conservan las posiciones de archivo y de base de datos, excepto cuando la sentencia open de la base de datos incluye la opción withHold, ya que ésta sólo está disponible para programas COBOL
El valor de ConverseVar.commitOnConverse no afecta nunca a las
variables de sistema ni a las tablas EGL.
- Una segunda técnica para manejar la sentencia converse consiste en establecer la propiedad
segmentado del programa de texto en sí, ya sea
cambiando una propiedad de programa durante el desarrollo o bien estableciendo la variable de
sistema ConverseVar.segmentedMode en 1 durante la ejecución. La segmentación produce los siguientes resultados antes de que se emita una sentencia converse:
- Se comprometen las bases de datos y otros recursos recuperables
- Se liberan los bloqueos
- No se conservan las posiciones de archivo y de base de datos
- No se conservan las posiciones de archivo y de base de datos, incluso cuando la sentencia open de la base de datos incluye la opción withHold
- Se renuevan las tablas EGL de un solo usuario; sus valores siguen siendo los mismos que cuando empezó el programa
- Se renuevan las variables de sistema; sus valores siguen siendo los mismos que cuando empezó el programa, excepto para un subconjunto de variables cuyos valores se guardan a lo largo de los segmentos
El comportamiento de un programa segmentado no se ve afectado por el valor de la variable
de sistema ConverseVar.commitOnConverse.
Para obtener detalles adicionales que son significativos para los programas CICS, consulte la sección Comportamiento de un programa segmentado en CICS.
La ventaja de utilizar un programa segmentado en CICS para z/OS es la siguiente:
- En ausencia de EGL, el desarrollador de un programa segmentado escribe código para analizar el estado del programa en cada invocación. Con EGL, la lógica de la aplicación es más simple ya que el desarrollador escribe código como si el usuario estuviera manteniendo una conversación continuada con un programa que siempre está en memoria.
- Los recursos limitados, como por ejemplo la memoria, se utilizan de forma más eficiente de modo que un número mayor de terminales pueden ejecutar programas EGL al mismo tiempo.
La ventaja de utilizar un programa no segmentado en CICS para z/OS es que el tiempo de respuesta para cada usuario es menor que en un programa segmentado ya que el estado del programa no se guarda y restaura.