Implementación de funciones 4GL como servicios web

Aprenda cómo las funciones IBM® Informix® 4GL se pueden implementar como servicios web. Conozca las generalidades de una herramienta de interfaz de usuario (UI) denominada "w4gl" y de una herramienta de back-end denominada "w4glc" y utilizada por "'w4gl".

Srinivasan R. Mottupalli, Advisory Software Engineer, Informix Database Server Development, IBM

Author Photo: Srinivasan MottupalliSrinivasan R. Mottupalli is an advisory software engineer at IBM, ISL, Bangalore. He has worked on IDS, Extended Parallel Server (XPS), and Informix 4GL (I4GL) as a design and development engineer.



Gagan Maheshwari, Technical Lead, IBM

Gagan Maheshwari photoGagan Maheshwari is a technical lead at IBM. He has worked on IDS and Informix 4GL (I4GL) as a design and development engineer.



Vishwas T. Mahadevaiah, Software Engineer, IBM

Vishwas MahadevaiahVishwas T Mahadevaiah has worked in the IBM IDS Team as a software engineer for one year. Vishwas was also involved in implementing UTF8 support for Informix 4GL and SOA support to Informix 4GL. Vishwas holds a Bachelor's degree in Computer Science from RV College of Engineering, Bangalore, affiliated to Visveshwaraiah Technological University, Karnataka.



08-08-2011

Informix 4GL

Informix 4GL (o simplemente I4GL) soporta un lenguaje de programación para interactuar con los servidores de la base de datos Informix. Además, ofrece un entorno rico que incluye el lenguaje de los informes y los formularios necesario para lograr el fácil desarrollo de las aplicaciones de base de datos relacionales. I4GL soporta compiladores que pueden convertir las aplicaciones 4GL en lenguaje C y en los códigos P independientes de la máquina que luego se pueden ejecutar utilizando un corredor. Para más información sobre 4GL, vea el Manual de referencia 4GL.


servicios web y Service-Oriented Architecture (SOA)

Service-Oriented Architecture (SOA) es un estilo de arquitectura que ofrece métodos para el desarrollo y la integración de sistemas, lo que permite que aplicaciones diferentes intercambien datos entre sí. El objetivo principal consiste en lograr el acoplamiento holgado de servicios con los sistemas operativos, sus lenguajes de programación y demás tecnologías con aplicaciones subyacentes. Los servicios web son funciones vendibles que se pueden acceder independientemente de las plataformas y los lenguajes de programación. Estas funciones toman un conjunto de datos de entrada y entregan un conjunto de datos de salida con el objetivo de cumplir una tarea específica. Por ejemplo, cuando varios terceros proveen el servicio de validación de tarjeta de crédito, cada utilización de estos servicios web ocasiona costos que el consumidor debe abonar. SOA hace que esta tarea que consiste en vincular los procesos de negocios de las compañías con sus proveedores y otros socios de negocios sea menos engorrosa.


I4GL dentro de un entorno SOA

Al utilizar el gran soporte de lenguaje de Infomix 4GL, es fácil implementar la interfaz de usuario y la lógica de negocios que probablemente involucre la incorporación de las expresiones SQL para acceder a los objetos de la base de datos. Muchos clientes de Informix utilizan I4GL como su herramienta de front-end para redactar las aplicaciones de la base de datos. Estas aplicaciones contienen tanto los aspectos interactivos como la lógica de negocios. Muchas otras aplicaciones también pueden utilizar esta lógica de negocios. SOA complementa el diseño de I4GL con el objetivo de implementar su función como servicios web.

La Figura 1 presenta las generalidades de arquitectura de I4GL-SOA.

Figura 1. Generalidades de arquitectura de I4GL-SOA
Generalidades de arquitectura de I4GL-SOA

I4GL está diseñado de forma tal que una aplicación 4GL se puede convertir en programas C que, luego, se pueden vincular con otro programa C. De igual forma, es posible invocar las funciones I4GL desde cualquier aplicación C con la ayuda de los API. Esta flexibilidad abre un abanico de oportunidades para que las funciones 4GL implementen o utilicen servicios web por medio del API de servicio web AXIS2 C de Apache.

Para poder utilizar o implementar funciones 4GL como servicios web, I4GL ofrece una herramienta interactiva denominada "w4gl" que reúne la información necesaria del usuario y la registra en la base de datos. Después de esto, toda la información necesaria se transfiere a una herramienta no interactiva denominada "w4glc", que es un script PERL que puede llevar a cabo las operaciones solicitadas. Como la herramienta hace que la base de datos siga guardando la información reunida con W4GL, también es posible regenerar los servicios para la implementación o el uso según lo que sea necesario.

I4GL como proveedor de servicios

A causa de la función 4GL que se va a implementar como servicio web, W4GL genera automáticamente los esqueletos, los encabezados y los archivos de envoltura requeridos. Usted deberá proporcionar la especificación del servicio web usando un archivo de configuración.


Arquitectura de 4GL-SOA

La Figura 2 presenta la arquitectura de 4GL dentro de un entorno SOA. La responsabilidad de la interfaz de usuario w4gl consiste en aceptar las definiciones de los servicios web del usuario y generar el archivo de configuración. El script PERL de back-end, "w4glc", hará referencia a este archivo de configuración, generará el código y ofrecerá el entorno para implementar o utilizar los servicios web (según las instrucciones que figuran en el archivo de configuración.

Figura 2. Arquitectura 4GL-SOA
Arquitectura 4GL-SOA

Prerrequisitos

  • Informix 4GL 7.50.xC2 (Actualmente soportada sólo en plataforma Linux®. Esta limitación se debe principalmente a la falta de disponibilidad de AXIS2C en otras plataformas.)
  • JRE 1.4.2 o una versión posterior
  • AXIS2C 1.5 (junto con 4GL 7.50.xC2 y sus versiones posteriores.)
  • Herramienta PERL
  • IDS 9 o sus versiones posteriores (XPS también debería poder soportar esto.)

Base de datos de diseño del programa

La base de datos de diseño del programa no es nueva para I4GL. Esta base de datos contiene algunas tablas especiales que utiliza la herramienta I4GL.

La herramienta W4GL utiliza la misma base de datos para almacenar sus tablas especiales. Estas tablas contienen la información del usuario obtenida de w4gl con respecto a los servicios web y a sus definiciones y la almacenan en las tablas para todo tipo de generación futura.

En forma predeterminada, el nombre de la base de datos de diseño del programa es "syspgm4gl". Sin embargo, es posible crear el nombre requerido de la base de datos por medio de una variable de entorno denominada PROGRAM_DESIGN_DBS. El nombre que especifique esta variable de entorno tendrá una precedencia más alta. A continuación, se incluye el diseño de la base de datos.

Por ejemplo:

export PROGRAM_DESIGN_DBS=mydb
Figura 3. Base de datos de diseño del programa
Base de datos de diseño del programa

Archivo de configuración

El archivo de configuración contiene las especificaciones de un servicio web en particular. La herramienta w4glc utiliza estas especificaciones para generar el código y llevar a cabo las tareas solicitadas (como la implementación o el packaging).

La herramienta W4GL genera este archivo de configuración (con la extensión .4cf) y los parámetros en este archivo de configuración se completan al leer la base de datos de diseño del programa (vea el archivo de configuración a modo de ejemplo en la Listado 1).

Todos los valores de estos parámetros se completan a través de la herramienta W4GL antes de generar el archivo de configuración. Al solicitarse la implementación, este archivo de configuración se transfiere al script PERL (w4glc) con el objetivo de implementar la función 4GL determinada como servicio web.

Cuando estos datos sean constantes en la base de datos de diseño del programa, usted podrá regenerar el archivo de configuración y volver a realizar la implementación cuando lo considere necesario. Esto resulta muy útil durante la actualización del servidor Web.

El Listado 1 presenta un archivo de configuración a modo de ejemplo creado por W4GL.

Listado 1. Archivo de configuración
    [SERVICE]
            TYPE=publisher
            INFORMIXDIR=/tools_4xpm/sqldist
            DATABASE=i4glsoa
            CLIENT_LOCALE=en_us.utf8
            DB_LOCALE=en_us.utf8
            I4GLVERSION=7.50.xC2
            WSHOME=/work/axisdist
            WSVERSION=AXIS2C
            TMPDIR= /tmp/w4gl
            PORTNO= 9090
            INFORMIXSERVER = ids_11.50
            INFORMIXSQLHOSTS = /work/env/sqlhosts
            SERVICENAME= ws_visa_valid
            [FUNCTION]
                 NAME= validate_visa_card
                 INPUT= CHAR(16), CHAR(5), CHAR(3)
                 OUTPUT= CHAR(8)
            [END-FUNCTION]
            [DIRECTORY]
                 NAME= /work/4glApp
                 FILE= visaverify.4gl
            [END-DIRECTORY]
       [END-SERVICE]

Analicemos los parámetros en el archivo de configuración:

  • [SERVICE] … [END-SERVICE]: Este bloque contiene todos los parámetros necesarios para implementar una única función como servicio web.
  • TYPE: Determina el tipo de operación—"publicador" o "consumidor".
  • DATABASE: Nombre de la base de datos que la función 4GL puede haber usado.
  • I4GLVERSION: La versión de 4GL (para propósitos de auditoría).
  • WSHOME: Ruta del directorio de instalación del servicio web.
  • WSVERSION: Versión del servidor Web (para propósitos de auditoría).
  • TMPDIR: Directorio de trabajo temporario donde permanecen los archivos intermedios generados.
  • PORTNO: Número de puerto que escucha el servidor axis.
  • SERVICENAME: Representa el nombre del servicio a publicar.
  • [FUNCTION] … [END-FUNCTION]: Un bloque que contiene detalles de la función que se está implementando.
    • NAME: Nombre de la función 4GL.
    • INPUT: Tipos de datos de los argumentos de entrada que ingresan a esta función 4GL. Deben tener una correspondencia uno a uno de izquierda a derecha y deben condecirse con el conteo de argumentos (como en la definición de la función).
    • OUTPUT: Tipos de datos que salen de esta función 4GL. Deben tener una correspondencia uno a uno de izquierda a derecha y deben condecirse con el conteo de argumentos (como en la definición de la función).
  • [DIRECTORY] … [END-DIRECTORY]: Un bloque que contiene la lista de archivos que se necesitan compilar y sus objetos que se deben agrupar para la implementación del servicio web.
    • NAME: Ruta completa del directorio que incluye el archivo fuente (archivos 4gl, C o ESQL/C).
    • FILE: Nombre del archivo o de los archivos (archivos 4gl, C, o ESQL/C) incluidos en el directorio que se menciona con anterioridad.
  • CLIENT_LOCALE: Representa la ubicación de 4GL.
  • DB_LOCALE: Representa la ubicación de la base de datos.
  • INFORMIXSERVER: Nombre del servidor Informix.
  • INFORMIXSQLHOSTS: Ruta completa del archivo sqlhosts de Informix.

Script PERL

El script Perl (w4glc) ubicado en el directorio $INFORMIXDIR/bin es la parte de la herramienta W4GL que trabaja detrás de cámaras. Se trata de un programa no interactivo. También lo puede utilizar de manera independiente si sabe cómo redactar su propio archivo de configuración. Sin embargo, se recomienda popular la base de datos de diseño del programa y generar el archivo de configuración utilizando la herramienta W4GL, para que se puedan generar y volver a implementar los mismos archivos de configuración en caso de pérdida o migración de los servicios web implementados.

Listado 2. Sintaxis
      	w4glc { [-help] [-version] | [-silent] [-force] [-check] [-generate]
  [-compile] [-deploy] [-package] } <cfgfile>

Nota: Es posible que w4glc tenga opciones adicionales relacionadas con el uso, pero este artículo no se ocupa de ninguna de ellas.

  • silent- La opción "silent" suprime todos los mensajes del compilador.
  • force- Esta opción fuerza la reutilización de los archivos o los directorios existentes que se puedan volver a usar de manera silenciosa.
  • check- Esta opción realiza la verificación básica de racionalidad del archivo de configuración provisto. Estas verificaciones garantizan la existencia del directorio y del archivo fuente o de los archivos fuente y el hecho de que el entorno se haya configurado de manera correcta.
  • generate- Esta opción genera el código (implementación o uso) y depende del TYPE que se haya colocado en el archivo de configuración. Estos archivos son necesarios para soportar el servicio web propuesto.
  • compile– Esta opción realiza la compilación de todos los archivos generados y crea archivos objeto. Además, también genera el objeto compartido que se puede implementar de manera inmediata.
  • deploy– Esta opción copia los objetos y los demás archivos necesarios al directorio de servicios web. El servidor Web, cuando se lo reinicia, se dirigirá a este directorio y reconocerá el nuevo servicio web implementado.
  • package– Esta opción le permite preparar materiales en una máquina de desarrollo para luego implementarlos en una máquina de producción. Los archivos se colocan en un archivo comprimido tar (gzip o bzip2) o en un archivo zip para que el material se pueda copiar a la máquina nueva.

Herramienta W4GL

La herramienta W4GL se escribe utilizando Informix 4GL. Esta herramienta lo ayuda a gestionar datos dentro de la base de datos de diseño del programa. Además, también le ofrece opciones para colocar el servicio web en un paquete y así poder copiar dicho servicio a otra máquina (siempre que ésta tenga la misma configuración y plataforma). Como los datos están disponibles en la base de datos, la idea es que se pueda generar el mismo servicio para varias plataformas utilizando W4GL en dichas plataformas.

Figura 4. Disposición del menú jerárquico de la herramienta W4GL
Disposición del menú jerárquico de la herramienta W4GL

Populación de la información del servicio web

La herramienta interactiva W4GL le permite popular la información del servicio web en la base de datos. Además, también le brinda la interfaz necesaria para generar archivos de configuración e implementarlos como un servicio web. Antes de agregar un servicio web, usted debe agregar el nombre de host del servidor de aplicación donde es necesario implementar el servicio en cuestión.

¿Cómo agregar un nombre de host?

Es necesario que agregue el nombre de host donde se corre el servidor de aplicación y donde es necesario implementar el servicio, como se puede observar en la Listado 3. El nombre de host puede ser un nombre DNS o una dirección IP. También es necesario que indique la ruta completa del directorio temporario donde se crearán los archivos intermedios del servicio web. Al apretar la tecla "escape" (Esc), para realizar las modificaciones, la ID de la máquina se genera de forma automática.

Listado 3. ¿Cómo agregar un nombre de host?
+------------------------------------------------------------------------------+
|HOST NAME:   Query  Next  Previous  Add  Modify  Remove  Exit                 |
|See existing Host name details.                                               |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
|                                                                              |
|                              HOST INFORMATION                                |
|                                                                              |
| Machine ID           [          3]                                           |
| Host Name            [service.server.test.com                    ]           |
| Temporary Directory  [/tmp/w4gl                                          ]   |
|                      [                                                   ]   |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
| A new host name was added.                                                   |
+------------------------------------------------------------------------------+

¿Cómo agregar un servidor de aplicación?

Los detalles del servidor de aplicación también se deben popular en el entorno adecuado y el nombre de host que se agregó antes donde se corre el servidor de aplicación.

¿Cómo agregar un servicio web?

El Listado 4 ilustra la adición de un nuevo servicio web denominado "ws_visa_valid". Esta pantalla toma toda la información necesaria sobre el servicio web (como, por ejemplo, el nombre de la función 4GL que es necesario implementar como servicio web), sus parámetros de entrada, los parámetros de salida y los archivos de los que depende esta función 4GL. Luego de proporcionar todos los detalles, la opción"exit"le permite guardar o descartar los cambios realizados.

Listado 4. ¿Cómo agregar un servicio web?
+------------------------------------------------------------------------------+
|ADD:   Detail  Input  Output  File  Exit                                      |
|Add the files associated with this web service.                               |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| Service ID       [    2]                                                     |
| Service Name     [ws_visa_valid                                            ] |
| Function Name    [validate_visa_card                                       ] |
| Notes            [                                                         ] |
|                  [                                                         ] |
|                  [                                                         ] |
|                  [                                                         ] |
| [ 3] Input parameters                 [ 1] Output parameters                 |
| [ 1][CHAR(16)                        ][ 1][CHAR(8)                         ] |
| [ 2][CHAR(5)                         ][  ][                                ] |
| [ 3][CHAR(3)                         ][  ][                                ] |
| [  ][                                ][  ][                                ] |
| [  ][                                ][  ][                                ] |
| [  ][                                ][  ][                                ] |
| [  ][                                ][  ][                                ] |
| [  ][                                ][  ][                                ] |
|                                                                              |
| 1 output parameters added.                                                   |
+------------------------------------------------------------------------------+

Este ejemplo agregó un servicio web denominado "ws_visa_valid" con tres parámetros de entrada y un parámetro de salida.


Generación del archivo de configuración

Luego de agregar la información sobre el servicio web, usted deberá generar el archivo de configuración para implementar el servicio web en cuestión. Todos estos detalles se pueden recuperar activando una ventana emergente.

Listado 5. Generación del archivo de configuración
+------------------------------------------------------------------------------+
|INSTALL:   Generate  Deploy  Package  Exit                                    |
|Generate the configuration file for a web service.                            |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
|                                                                              |
|                           GENERATE CONFIGURATION                             |
|                                                                              |
| Service ID [   2]   Machine ID [   3]   Server ID [   0]  Database ID [   1] |
|                                                                              |
| Service Name    [ws_visa_valid                                             ] |
| Host Name       [service.server.test.com                                   ] |
| Temp Directory  [/tmp/w4gl                                                 ] |
|                 [                                                          ] |
| App-Server Name [axis_server                                               ] |
| Port Number     [  9090]                                                     |
| Database Name   [i4glsoa                                                   ] |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
| Ctrl+B = List of Web services. Press Esc to Accept or Ctrl+C to Cancel.      |
+------------------------------------------------------------------------------+

Implementación de la función 4GL

Luego de configurar todos los detalles maestros y la información del servicio web y de generar el archivo de configuración, la opción denominadadeployle permite implementar el servicio web requerido.

Utilice el archivo de configuración generado con anterioridad para implementar el servicio web, como se lo puede observar en el Listado 6.

Listado 6. Implementación del servicio web
+------------------------------------------------------------------------------+
|INSTALL:   Generate  Deploy  Package Exit                                     |
|Deploy the web service.                                                       |
+------------------------------------------------------------------------------+
|                                                                              |
|                     CONFIGURATION TO DEPLOY                                  |
|                                                                              |
| File Name [ws_visa_valid_ service.server.test.com.4cf           ]            |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
| Configuration file ws_visa_valid_ service.server.test.com.4cf deployed       |
|                                                                              |
+------------------------------------------------------------------------------+

Luego de cada implementación, es necesario reiniciar el servicio web para que el nuevo servicio implementado quede disponible para que lo utilicen otras aplicaciones.


Utilización de la función 4GL implementada como servicio web

El servicio web implementado se puede usar desde cualquier aplicación escrita en otros lenguajes (como, por ejemplo, Java™, C, PHP y otros lenguajes modernos). 4GL 7.50.xC2 incluye un programa de demostración denominado "i4glsoademo", que utiliza una interfaz C para usar el servicio web. Luego de configurar el entorno, ejecute el programa denominado "i4glsoademo", que transfiere un código zip y recupera la ciudad y el estado correspondiente desde la función 4GL implementada como servicio web.


Packaging del servicio web

La opción de packaging lo ayuda a migrar sus servicios web a diferentes hosts del mismo sistema operativo y la misma configuración. Esta opción toma el nombre del servicio web y lo coloca en un archivo capaz de ser enviado.

Listado 7. Packaging del servicio web
+------------------------------------------------------------------------------+
|INSTALL:  Generate   Deploy   Package   Exit                                  |
|Package the web service.                                                      |
+------------------------------------------------------------------------------+
|                                                                              |
|                     SERVICE NAME TO PACKAGE                                  |
|                                                                              |
| Service Name [ws_visa_valid                                        ]         |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
| The web service has been successfully packaged.                              |
|                                                                              |
+------------------------------------------------------------------------------+

Procedimientos almacenados como servicios web

La habilitación de la función 4GL como servicio web también creó la posibilidad de usar los procedimientos almacenados como servicio web utilizando las funciones 4GL. El Listado 8 presenta un ejemplo de esto.

Listado 8. Procedimiento almacenado
CREATE FUNCTION  LOG10(val  INTEGER)
     DEFINE retval DECIMAL(16,10);

     CALL SPL_LOGN(val, 10) RETURNING retval;

     RETURN retval;
END FUNCTION

Limitaciones

  • En la actualidad, esto sólo está disponible para la plataforma Linux (pero se espera que pronto esté disponible para otras plataformas).
  • Los tipos de datos complejos que soporta 4GL todavía no tienen el soporte necesario como para que se los implemente como un servicio. Por ejemplo, RECORD y BLOB.

Conclusión

Utilizar las funciones 4GL ya existentes como servicios web crea muchas posibilidades para usarlas en cualquier lenguaje moderno. Los clientes actuales de Informix 4GL siguen disfrutando de una fácil codificación gracias al uso de 4GL, que está disponible en el lenguaje que deseen con el fin de soportar sus aplicaciones Web mediante el acceso a estos servicios web. El uso de estos servicios web desde el código 4GL es otra forma de potenciar los servicios web actuales que probablemente se hayan codificado en otros lenguajes.

Recursos

Aprender

Obtener los productos y tecnologías

  • Cree su próximo proyecto de desarrollo usando el software de prueba de IBM, que se puede descargar de manera gratuita directamente de developerWorks.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt, SOA y servicios web
ArticleID=395426
ArticleTitle=Implementación de funciones 4GL como servicios web
publish-date=08082011