8. acceso a bases de datos remotas: host ibm

Anuncio
Capítulo 8: Acceso a bases de datos remotas: Host IBM
8. ACCESO A BASES DE DATOS
REMOTAS: HOST IBM
8.1 INTRODUCCIÓN
El objetivo es acceder a la información almacenada en un Host IBM, situado en
el Rectorado de la Universidad Politécnica de Madrid, con el objetivo de desarrollar una
aplicación que permita a los usuarios conocer sus calificaciones en la última
convocatoria de exámenes.
A continuación se describen ciertas características del Host que resultan
relevantes para comprender la aplicación a desarrollar.
8.2 EL SISTEMA OPERATIVO VM/SP
El sistema operativo del Host IBM es el VM/SP versión 4 (Virtual
Machine/System Product). Se basa en el concepto de máquina virtual; dedica a cada
usuario parte de los recursos y dispositivos reales del Host, de forma que en la práctica
el usuario tiene la impresión de disponer de un ordenador (con sus periféricos
correspondientes) para él sólo, sin tener que preocuparse de cómo se gestiona el reparto
de dichos recursos.
Cada máquina virtual necesita su propio sistema operativo, que se denomina
CMS (Conversational Monitor System). También se necesita otro sistema operativo que
coordine las actividades de las diferentes máquinas virtuales, denominado CP (Control
Program).
Los mandatos correspondientes a CP empiezan con las letras ‘CP’, mientras que
los de CMS no llevan ningún prefijo.
Pág. 8-1
Capítulo 8: Acceso a bases de datos remotas: Host IBM
8.3 PROGRAMAS RESIDENTES EN EL HOST
Para acceder a la información contenida en el Host será necesario ejecutar
ciertos programas residentes en el Host, que serán los que se encarguen de acceder a las
bases de datos del mismo. En concreto, se ocuparán de verificar la identificación del
usuario y su clave de acceso, cambiar dicha clave y buscar la información que el usuario
demande.
8.4 MENSAJES DEL SISTEMA
La pantalla del Host se divide en dos zonas, separadas por una línea continua. La
zona bajo esa línea se denomina área de estado de la pantalla, y puede contener
diversos indicadores. Algunos reflejan el modo de utilización de la pantalla, y otros
diversas condiciones de error.
La parte superior se divide en tres áreas:
•
•
•
Area de entrada de datos: situada en las líneas inferiores de la pantalla. Es
la zona en la que se introducen los comandos.
Area de salida: toda la pantalla, excepto las dos últimas líneas. Contiene la
información generada por el Host y la introducida por el usuario, según el
orden de operación.
Area de estado de la máquina virtual: situada a la derecha de la última
línea e inmediatamente encima de la línea continua. Indica al usuario cuál es
el estado de la máquina virtual.
En el área de estado de la máquina virtual pueden aparecer diferentes mensajes.
De todos ellos sólo deberemos tener en cuenta un pequeño subconjunto, con el fin de
decidir diferentes acciones. Concretamente:
•
•
•
MAS...: aparece cuando las líneas introducidas o las producidas por el
programa que se haya ejecutado superan el tamaño de la pantalla. En este
caso hay que borrar la pantalla para que pueda aparecer la información que
falta. El borrado de la pantalla se realiza pulsando la tecla Pausa del teclado
del PC. Si no se pulsa dicha tecla, la pantalla se borrará automáticamente
transcurrido un minuto.
DE INTRO: indica al usuario que debe pulsar la tecla Intro que está situada
en la zona del teclado numérico del PC. Esta tecla ejerce las funciones del
Return convencional que está situado junto a la zona del teclado alfabético.
Listo: aparece cuando la máquina virtual está lista para recibir comandos del
usuario.
Pág. 8-2
Capítulo 8: Acceso a bases de datos remotas: Host IBM
8.5 COMENZANDO Y
SESIÓN CON EL HOST
FINALIZANDO
UNA
A continuación se describen cuáles son las acciones que debe realizar un usuario
para poder comenzar y finalizar una sesión con el Host. La secuencia a seguir es muy
importante, pues la aplicación desarrollada debe realizarlas en el mismo orden.
•
Comienzo de una sesión:
•
•
•
•
•
Después de poner en marcha el terminal aparecerá el logotipo de la
instalación en pantalla. En esta pantalla debemos elegir el área del Host
en el que vamos a trabajar, pues hay definidas varias, dependiendo del
tipo de aplicación, su fiabilidad y niveles de seguridad.
Para indicar el área del Host en que trabajaremos, primero borramos la
pantalla (tecla Pausa del teclado del PC) y después introducimos el
nombre del área deseada.
Una vez introducido el nombre, aparecerá una segunda pantalla en la que
se nos solicitará el identificador y la clave de acceso.
Una vez que el sistema compruebe que tenemos autorización para
acceder, nos informará de que está preparado para comenzar a trabajar
cuando aparezca el mensaje ‘Listo’ en el área de salida de datos de la
pantalla del Host.
Finalización de una sesión:
•
•
•
Desde cualquier pantalla podemos finalizar una sesión utilizando el
comando logoff.
Una vez ejecutado este comando, el Host presentará una pantalla en la
que debemos introducir el comando vmexit.
Después de ejecutada esta orden, el Host quedará en la pantalla inicial,
desde la cual podremos iniciar una nueva sesión de trabajo en cualquier
momento.
8.6 ACCESO A LAS BASES DE DATOS DEL HOST
El acceso se puede hacer de dos formas, según se describe a continuación.
8.6.1 Mediante comandos SQL introducidos directamente por
el usuario
Para ello, el Host dispone de un intérprete SQL, que puede ser invocado
tecleando en cualquier momento el comando isql.
Pág. 8-3
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Tiene la ventaja de permitir realizar consultas rápidas, en cualquier momento,
para comprobar los nombres de las tablas, columnas, etc. Pero, al mostrar todos los
datos en pantalla, y con un formato impredecible, resulta incómoda su utilización por
parte de una aplicación.
8.6.2 Utilizando programas escritos en PL/1
PL/1 es un lenguaje de cuarta generación que permite la ejecución de comandos
SQL sobre las bases de datos del sistema. Su utilización presenta la ventaja de que, si se
conocen previamente los comandos SQL a ejecutar, así como las acciones que
corresponden, estos resultan transparentes a la aplicación que los utiliza, pues a ésta le
basta con ejecutar el fichero ejecutable correspondiente, resultado de la compilación del
fichero con el programa PL/1.
En nuestro caso, se ha optado por utilizar este lenguaje, pues para la
funcionalidad que se pretende añadir sólo hacen falta unas cuantas sentencias SQL muy
concretas. Además, si en algún momento se modifican las tablas de la base de datos o se
debe variar la secuencia de acciones a realizar sobre ellas, no habrá que variar el código
de la aplicación telefónica, sino únicamente el programa en PL/1 residente en el Host, lo
cual resulta más sencillo.
Hay que señalar que cuando necesitamos ejecutar alguno de estos programas, lo
que se hace realmente es invocar en el Host un fichero, similar a los ficheros BAT de
MS/DOS, que es el que llama al ejecutable una vez que ha fijado ciertas condiciones,
como el fichero de entrada que se va a utilizar o el propio nombre del ejecutable. Esto
nos ha permitido no tener que cambiar los programas ejecutables para poder utilizar dos
sesiones.
8.7 CREACIÓN DE UN EJECUTABLE A PARTIR
DEL CÓDIGO EN PL/1
Para conseguir un programa ejecutable a partir del código fuente
programa en PL/1 hay que seguir los siguientes pasos:
de un
1.- PREP nombre_fichero
Esta instrucción compilará el fichero nombre_fichero, que será un programa en
código fuente PL/1, y generará un nuevo fichero, con el mismo nombre, pero con
extensión TXT. Este fichero objeto no puede utilizarse directamente, pues muchas de
las rutinas predefinidas, como las de entrada/salida de datos, no se encuentran
físicamente en él, sino que deben ser incorporadas al mismo.
Pág. 8-4
Capítulo 8: Acceso a bases de datos remotas: Host IBM
2.- LOAD nombre_fichero arirvtsc (start
Utiliza como nombre_fichero el fichero TXT generado en el punto anterior. Esta
instrucción realiza la ‘carga del programa’, es decir, incorpora las rutinas predefinidas
necesarias para la ejecución del programa.
El parámetro (start es opcional e indica que, una vez finalizada la carga, se
ejecute.
3.-GENMOD nombre_ejecutable (from plistart
Este comando crea un mandato del sistema cuyo nombre está indicado en
nombre_ejecutable. Es útil cuando se desea ejecutar un programa frecuentemente.
Generará un fichero de nombre nombre_ejecutable y de extensión MODULE, que
contendrá el código máquina necesario para ejecutar el programa.
A partir de este momento, el nombre_ejecutable es un comando más de los que
se dispone, y sin más que introducirlo desde el terminal comenzará a ejecutarse.
8.8 LA EMULACIÓN 3270
Para comunicarnos con el HOST utilizaremos un programa de emulación 3270
para entorno Windows y nuestro sistema realizará llamadas a una serie de funciones de
la API (contenidas en una DLL), con las que conseguiremos interactuar con el HOST,
enviando y recibiendo datos del mismo.
8.9 LLAMADA A FUNCIONES DE LA API
Dependiendo del lenguaje de programación que se utilice, la llamada variará. En
nuestro caso utilizamos el lenguaje C, en el cual la llamada a una función se compone
de:
• La palabra hllapi: es la función de la DLL que se invoca cuando se quiere
ejecutar una función de la API.
• Cuatro parámetros: código de la función, cadena de datos, longitud de la
cadena de datos y código de retorno. Estos cuatro parámetros se pasan
siempre por referencia, y se deben enviar siempre los cuatro, incluso aunque
la función no haga uso de todos ellos.
Los códigos de función y de retorno y la longitud de la cadena de datos son
enteros de dos bytes en todos los lenguajes que soporta la API, y la cadena de datos
contiene caracteres, no valores numéricos, tanto si se utiliza para enviar como para
recibir datos.
Pág. 8-5
Capítulo 8: Acceso a bases de datos remotas: Host IBM
A continuación se describen las funciones que desempeñan estos parámetros:
•
•
•
•
Código de función: valor entero que especifica cuál es la función de la API
que se quiere ejecutar. Cada función lleva asociado unívocamente un número
que es obligatorio especificar.
Cadena de datos: array de caracteres que se usa de diferente forma según la
función invocada.
Longitud de la cadena de datos: longitud del parámetro anterior. En él se
nos puede devolver o no información útil para la aplicación, dependiendo de
la función que hayamos invocado.
Código de retorno: informa sobre el resultado de la ejecución de la función.
Debe ser siempre chequeado por la aplicación para comprobar que la función
se ha realizado correctamente. Como parámetro de entrada sirve para
especificar, en algunas funciones, la posición en la pantalla del Host en la
cual, o a partir de la cual, se desea realizar cierta acción.
8.10 FUNCIONES PREDEFINIDAS
En el sistema monolínea se habían implementado como funciones internas. En
nuestro caso es necesario implementarlas como funciones predefinidas, pues necesitan
una función idle asociada.
Estas funciones están orientadas a tareas de búsqueda y recogida de información.
A continuación se presenta una breve descripción de estas funciones. Sus
diagramas de flujo se encuentran en la Sección PLANOS.
•
•
•
IBM_INICIALIZA_BD: se encarga de abrir la conexión con el Host,
conectándose al PS (Presentation Space), que es la pantalla del mismo, al
que se pueden enviar y del que se reciben datos. La API permite tener
abiertas, simultáneamente, diferentes conexiones con diferentes PS, pero no
se soporta el acceso simultáneo a ellas. La función no admite parámetros de
entrada, y devuelve 0 si la sesión con el Host se inició correctamente, 1 si la
sesión ya estaba abierta y un valor negativo si se ha producido algún error.
IBM_FINALIZA_BD: función que finaliza la conexión con el Host,
realizando el logout de la sesión. No necesita parámetros de entrada ni
devuelve ninguno de salida. Devuelve 0 si todo ha funcionado
correctamente, 1 si no había una conexión previa, 2 si la conexión no ha
podido finalizarse correctamente y un valor negativo si se ha producido
algún error.
IBM_BUSCA_ELEMENTO: utiliza uno de los programas residentes en el
Host para acceder a las bases de datos, extrae la información solicitada, la lee
de la pantalla del Host y la almacena en las listas creadas para tal fin. Como
parámetros de entrada necesita el DNI o pasaporte, sin caracteres alfabéticos,
la CLAVE de acceso, año académico y convocatoria. Devuelve 0 si se
ejecutó correctamente, 1 si no hay datos, 2 si el usuario no tiene acceso al
servicio y un valor negativo si se ha producido algún error.
Pág. 8-6
Capítulo 8: Acceso a bases de datos remotas: Host IBM
•
•
•
IBM_LEER_CAMPOS: lee la siguiente calificación sin leer, resultante de
la ejecución de la función anterior. No admite ningún parámetro de entrada y
los parámetros de salida son las variables en las que se guardarán los datos
asociados a la calificación. Devuelve 0 si todo ha funcionado correctamente,
1 si no hay más calificaciones que leer, y un valor negativo si no hubo
búsqueda inicial. No tiene función idle asociada.
IBM_COMPRUEBA_ALUMNO: Utiliza uno de los programas residentes
en el Host para acceder a las bases de datos y comprobar si el usuario está
autorizado para acceder al servicio. Como parámetros de entrada requiere el
DNI o pasaporte, sin caracteres alfabéticos, y su CLAVE de acceso. No
devuelve ningún parámetro de salida. Retorna 0 si el usuario tiene acceso al
sistema, 1 si no tiene permiso para utilizar el sistema, y un valor negativo si
se ha producido algún error.
IBM_CAMBIA_PASSWORD: Utiliza uno de los programas residentes en
el Host para acceder a las bases de datos y cambiar la clave de acceso de un
usuario del servicio. Como parámetros de entrada requiere el DNI o
pasaporte, sin caracteres alfabéticos, su CLAVE de acceso actual y la
CLAVE NUEVA. No devuelve ningún parámetro de salida. Retorna 0 si el
cambio se realizó correctamente, 1 si la nueva clave no es válida y un valor
negativo si se ha producido algún error.
Todas estas funciones escriben, en caso de que se produzca algún error en su
ejecución, la información relativa al error que se ha producido en un fichero llamado
‘sys_error.txt’, en el directorio en que esté funcionando la aplicación telefónica que
utilice estas funciones.
Pág. 8-7
Capítulo 8: Acceso a bases de datos remotas: Host IBM
8.11 SERVIDOR DEL HOST
Para enviar ficheros al Host ha sido necesario diseñar un servidor, pues esta
operación lleva unos dos segundos, tiempo en el que nuestra aplicación quedaría
bloqueada.
Su arquitectura es idéntica a la descrita para el servidor BDE/IDAPI descrito en
el capítulo anterior, por lo que no se repite aquí. En este caso hay detalles adicionales
que no estaban presentes en el caso del acceso a bases de datos locales, como los fallos
de comunicación, o la no atención por parte del Host remoto en un plazo de tiempo
razonable.
En estos casos la Librería de Enlace Dinámico (DLL) donde están las funciones
que utilizamos presenta un MessageBox indicando la causa del fallo. Como el sistema
está pensado para funcionar de manera desatendida, es necesario tratar este
MessageBox. La solución adoptada ha sido la siguiente:
•
•
•
•
•
Todas las funciones implementadas, lo primero que hacen en su función idle
de segundo nivel es comprobar la presencia del MessageBox.
Si una de esas funciones lo detecta, comprueba si es esa línea la responsable
de que aparezca, y si es así le envía un retorno de carro, con lo que
conseguimos que desaparezca, y retorna un código de error.
Para saber si una línea es la responsable de que aparezca (cada línea tiene
asignada una sesión de comunicación distinta con el Host, y en el
MessageBox no aparece información de la sesión que ha causado el error), se
comprueba la existencia del fichero de petición. Si no está presente, indica
que el servidor estaba atendiendo su petición, y como el servidor sólo puede
estar atendiendo una línea en un momento dado, el MessageBox se debe a
esa línea.
Si esa línea no es la causante del MessageBox continúa normalmente y no
toma ninguna acción. Dada la rapidez con que se itera entre las líneas, el
MessageBox, que no bloquea el sistema, se detectará inmediatamente. Hay
que tener presente que la línea que envía el retorno de carro para acabar con
el MessageBox retorna con un código de error. Es responsabilidad de la
aplicación actuar en consecuencia, normalmente expulsando al usuario
después de indicarle que se ha producido un fallo en el sistema. De ahí la
importancia de identificar la línea que lo ha originado, pues las demás
pueden continuar normalmente.
En el caso de funciones que no hacen uso del servidor (las que no envían
ficheros al Host), le enviará el retorno de carro la primera de las líneas que lo
detecte. En este caso, no tenemos un fallo al enviar un fichero, sino un fallo
de comunicación genérico, y no es posible saber la sesión que lo ha
ocasionado.
Pág. 8-8
Capítulo 8: Acceso a bases de datos remotas: Host IBM
8.12 SERVICIO DE NOTAS POR TELEFONO
8.12.1
Introducción
Este servicio permite a cualquier alumno autorizado que llame al servicio
conocer las calificaciones obtenidas en la última convocatoria de exámenes a través del
teléfono y de forma automática.
Para ello basta que el alumno introduzca su DNI o PASAPORTE y una CLAVE
de acceso y el sistema, tras comprobarlos, proporcionará todas sus notas disponibles,
indicando la asignatura y la calificación obtenida.
El sistema soporta tanto reconocimiento de voz como detección de tonos
multifrecuencia (DTMF), maneja un vocabulario compuesto por los dígitos del cero al
nueve y las palabras si, no, ayuda y cancelar, y es capaz de reconocer cadenas de
dígitos de una longitud determinada.
Para enviar mensajes al usuario se utiliza la reproducción de mensajes
pregrabados, por su mayor calidad, siempre que esto sea posible. También se utiliza la
conversión texto-habla para sintetizar palabras cortas que dependen del usuario, como
por ejemplo su nombre.
8.12.2
Funcionamiento
Cuando el sistema detecta una llamada descuelga y manda un mensaje de
bienvenida al usuario, al que se le da la posibilidad de escuchar una serie de mensajes
de ayuda sobre el funcionamiento del sistema.
A continuación el sistema pedirá al usuario su DNI o número de PASAPORTE,
que deberá introducir dígito a dígito (si su longitud es inferior a 8 dígitos deberá decir
cancelar después del último dígito). El proceso anterior se repetirá con la CLAVE de
acceso, que en este caso es una cadena de 4 dígitos.
En este momento el sistema comprobará que el usuario tiene acceso al servicio,
saludando al usuario y presentando el menú principal, dándole opción a conocer sus
calificaciones, cambiar su CLAVE de acceso o finalizar la llamada.
Si decide cambiar la CLAVE, se le pedirá la nueva clave. Después de realizar el
cambio, si ha sido posible, se vuelve a presentar el menú principal.
Si el usuario decide escuchar sus calificaciones, el sistema las buscará en la base
de datos del Host y le irá informando de las calificaciones obtenidas en las diferentes
asignaturas. Si no hubiera ninguna calificación disponible se informaría al alumno de
ello. Tras leer todas las calificaciones, el sistema despide al usuario con un mensaje de
despedida.
Pág. 8-9
Capítulo 8: Acceso a bases de datos remotas: Host IBM
A continuación se muestra el diagrama de bloques de la aplicación. El diagrama
de la subrutina VerifCad, encargada de verificar cadenas, se puede ver en el Apéndice A
Manual del Usuario.
Pág. 8-10
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-11
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-12
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-13
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-14
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-15
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-16
Capítulo 8: Acceso a bases de datos remotas: Host IBM
Pág. 8-17
Capítulo 8: Acceso a bases de datos remotas: Host IBM
8.
ACCESO A BASES DE DATOS REMOTAS: HOST IBM .............................. 8-1
8.1 INTRODUCCIÓN...................................................................................................8-1
8.2 EL SISTEMA OPERATIVO VM/SP .....................................................................8-1
8.3 PROGRAMAS RESIDENTES EN EL HOST .......................................................8-2
8.4 MENSAJES DEL SISTEMA ..................................................................................8-2
8.5 COMENZANDO Y FINALIZANDO UNA SESIÓN CON EL HOST..................8-3
8.6 ACCESO A LAS BASES DE DATOS DEL HOST ...............................................8-3
8.6.1
8.6.2
Mediante comandos SQL introducidos directamente por el usuario............................... 8-3
Utilizando programas escritos en PL/1.......................................................................... 8-4
8.7 CREACIóN DE UN EJECUTABLE A PARTIR DEL CóDIGO EN PL/1 ...........8-4
8.8 LA EMULACIóN 3270 ...........................................................................................8-5
8.9 LLAMADA A FUNCIONES DE LA API ..............................................................8-5
8.10
FUNCIONES PREDEFINIDAS .........................................................................8-6
8.11
SERVIDOR DEL HOST.....................................................................................8-8
8.12
SERVICIO DE NOTAS POR TELEFONO.......................................................8-9
8.12.1
8.12.2
Introducción................................................................................................................. 8-9
Funcionamiento ........................................................................................................... 8-9
Pág. 8-18
Descargar