Uso de CICS con DB2 pureXML

Escenarios y casos de uso

Este artículo le ofrece una introducción al uso de DB2® pureXML® con aplicaciones CICS® redactadas en Common Business Oriented Language (COBOL). XML cumple con una función cada vez más importante en las aplicaciones CICS. Por lo tanto, la necesidad de almacenar y consultar XML en las aplicaciones CICS está creciendo cada vez más. Este artículo describe dos escenarios para el uso de CICS con DB2 pureXML. El primer escenario le muestra cómo almacenar mensajes entrantes de servicios web XML en DB2 pureXML sin necesidad de analizar los mensajes en CICS. El segundo escenario le muestra cómo una aplicación CICS puede recuperar datos XML desde DB2 y transmitirlos por medio de un servicio web. Este artículo le presenta un código de muestra que usted podrá descargar de Internet.

Scott Clee, CICS Test Architect, IBM

Scott Clee es el CICS Test Architect de IBM en el Reino Unido. Se encarga de crear las pruebas buscando nuevas formas de impulsar tecnologías, procesos y técnicas de comprobación. Scott cuenta con experiencia en las áreas de CICS, Java, Common Business Oriented Language (COBOL), Linux y testeo. Además, Scott tiene un título en Matemática y Computación de la Universidad de Bath, Reino Unido.



Susan Malaika, Senior Technical Staff Member, IBM

Susan Malaika trabaja para el Information Management Group de IBM. Se especializa en tecnologías Web y XML, incluyendo computación distribuida. Publicó varios artículos y es coeditora de un libro en la Web. Es miembro de la IBM Academy of Technology.



29-07-2011

Introducción de CICS y pureXML

El soporte de servicios web CICS comenzó a estar disponible en CICS TS V3.1. Esta función hace que las aplicaciones CICS puedan solicitar servicios, prestar servicios o realizar ambas tareas, usando un transporte HTTP o un transporte WebSphere® MQ. Generalmente, los mensajes de servicios web están en XML y suelen incorporar encabezados SOAP. Por lo tanto, este artículo se refiere a ellos como mensajes SOAP. Para mayor información sobre el soporte de servicios web CICS, haga clic en los vínculos pertinentes en la sección Recursos al final de este artículo.

DB2 9.1 para z/OS® agregó soporte, denominado pureXML, para un tipo de datos XML que permite que los datos XML se almacenen e indexen nativamente. El soporte XML nativo significa que el XML se analiza una sola vez cuando se lo almacena. Los índices XML se conservan y ofrecen un rápido acceso al XML almacenado a través de consultas SQL / XML y XPath. Además, en DB2 10.1 (en su versión beta cuando se publicó este artículo), el XML almacenado también se puede actualizar por medio de XPath. Para mayor información sobre DB2 pureXML, haga clic en los vínculos pertinentes en la sección Recursos al final de este artículo.

Este artículo le muestra cómo usar el soporte de servicios web CICS para almacenar y recuperar mensajes SOAP usando CICS y DB2 pureXML. Los escenarios le ofrecen una descripción básica de la configuración y la implementación necesaria para conectar ambos extremos entre los servicios web CICS y un back-end de DB2 pureXML. La sección Descargas incluye un código de muestra. El código fuente de muestra está redactado en COBOL, pero resultaría bastante directo convertir el código en los lenguajes de programación PL/I o C.

Introducción de los dos escenarios

Los dos escenarios comparten la misma región CICS, que ejecuta CICS TS 4.1. Los datos XML se almacenan en una tabla de DB2 9.1 que tiene una sola columna para ingresar XML. El Listado 1 incluye el código SQL necesario para crear esta tabla.

Listado 1. Creación de una tabla con una sola columna para ingresar XML
CREATE
                TABLE REDBOOK.PUREXML (SOAP XML) CCSID EBCDIC IN DATABASE REDBOOK;

El código de muestra que se encuentra en la sección Descargas incluye el SQL completo que se usó para crear STOGROUP, TABLESPACE y TABLE en la base de datos.

El primer escenario le muestra cómo un programa COBOL CICS denominado WEBINST (un controlador de canalización y proveedor de servicios) inserta un mensaje XML que recibió desde un servicio web en una columna de DB2 pureXML. El segundo escenario le muestra cómo un programa COBOL CICS denominado WEBSLCT (que también es un controlador de canalización y proveedor de servicios) recupera el XML desde una columna de DB2 pureXML y lo devuelve como una respuesta a la invocación de un servicio web.

Escenario 1: Almacenamiento de datos entrantes por medio de servicios web CICS

Los pasos que forman parte de este escenario le muestran cómo configurar su región CICS para aceptar una solicitud de servicio web entrante y almacenar la carga útil SOAP en DB2. Con el objetivo de simplificar el ejemplo y seguirnos concentrando en la mecánica de la configuración del servicio web, el mensaje de entrada se devuelve como el mensaje de salida del servicio web.

En vez de usar el controlador de canalización provisto por CICS (DFHWS2LS0), que convierte los datos SOAP (el XML) en estructuras de lenguaje binario, este escenario usa un programa controlador de canalización personalizado (denominado WEBINST) para recibir el mensaje SOAP e insertarlo directamente en DB2. Esto mejora el rendimiento al eliminar la necesidad de hacer que CICS analice el XML.

Paso 1:—Creación de un archivo de configuración de canalización CICS

Copie el archivo de configuración de canalización que se puede observar en el Listado 2 en UNIX® System Services (USS) como /u/user/config/insert_pipeline.xml. Este archivo de configuración le informa a CICS que el programa controlador de canalización personalizado denominado WEBINST se debe usar para controlar las solicitudes de servicios web.

Listado 2. Archivo de configuración de canalización CICS
<?xml
                version="1.0" encoding="EBCDIC-CP-US"?> <provider_pipeline
                xmlns="http://www.ibm.com/software/htp/cics/pipeline">
                <service> <terminal_handler> <handler>
                <program>WEBINST</program>
                <handler_parameter_list/> </handler>
                </terminal_handler> </service>
                </provider_pipeline>

Paso 2:—Creación e instalación de recursos CICS

Cree e instale los siguientes recursos CICS en su región:

  • PIPELINE(WEBINST) CONFIGFILE(/u/user/config/insert_pipeline.xml) SHELF(/u/user/shelf)
  • URIMAP(WEBINST) USAGE(PIPELINE) PIPELINE(WEBINST) HOST( * ) PATH(/pureXML/insert)
  • PROGRAM(WEBINST) DATALOCATION(ANY)
  • TCPIPSERVICE(PUREXML) PORT(xxxxx) PROTOCOL(HTTP)

DB2 necesita los siguientes recursos, que también se pueden compartir con el programa WEBSLCT que se describe en el Escenario 2 de este artículo.

  • DB2ENTRY(PUREXML) ACCOUNTREC(TXid) AUTHTYPE(Userid) DRollback(Yes) PLAN(PUREXML)
  • DB2TRAN(PUREXML) ENTRY(PUREXML) TRANSID(CPIH)

Copie el programa COBOL que figura en el Listado 3 en z/OS y compílelo con el compilador DB2/CICS/COBOL integrado. El código de muestra que se incluye en la sección Descargas contiene un trabajo de compilación de muestra.

Listado 3. Programa COBOL
******************************************************************
IDENTIFICATION DIVISION. PROGRAM-ID. WEBINST. ENVIRONMENT DIVISION.
 CONFIGURATION SECTION. * DATA DIVISION. * WORKING-STORAGE SECTION.
 * 01 WSRESP PIC S9(8) COMP VALUE 0. 
 01 WSRESP2 PIC S9(8) COMP VALUE 0.
 01 WSFLENGTH PIC S9(8) COMP VALUE 1024.
01 XMLDATA PIC X(1024) VALUE SPACES. 
EXEC SQL INCLUDE SQLCA END-EXEC.LINKAGE
 SECTION. PROCEDURE DIVISION. MAINLINE SECTION. 
 * Get the SOAP data EXEC CICS GET
CONTAINER('DFHREQUEST') INTO(XMLDATA) FLENGTH(WSFLENGTH) 
RESP(WSRESP) RESP2(WSRESP2) END-EXEC. 
EXEC SQL INSERT INTO REDBOOK.PUREXML 
( SOAP ) VALUES ( :XMLDATA ) END-EXEC
* Respond with the original XML data by deleting DFHREQUEST 
* container and returning 
DFHRESPONSE container EXEC CICS 
DELETE CONTAINER('DFHREQUEST') END-EXEC.
EXEC CICS PUT CONTAINER('DFHRESPONSE') FROM(XMLDATA)
RESP(WSRESP) RESP2(WSRESP2)
END-EXEC. * Exit program EXEC CICS RETURN END-EXEC.
 MAINLINE-EXIT. EXIT.
*----------------------------------------------------------------*

Paso 3:—Prueba del servicio web desde Rational Developer for System z

Cree un proyecto en una IDE basada en Eclipse ( como, por ejemplo, Rational® Developer for System z® ) e importe el archivo SWITCH.wsdl desde el código de muestra hacia su proyecto.

Haga clic en el botón derecho del mouse sobre el archivo WSDL de muestra y seleccione Web Services (servicios web)> Test with Web Services Explorer (Probar con Web Services Explorer), como se observa en la Figura 1.

Figura 1. Prueba con web Services Explorer
Prueba con web Services Explorer

Desde el recuadro de diálogo de puntos finales (Figura 2), actualice la URI para que apunte hacia su imagen de z/OS usando el servicio TCP/IP especificado en el recurso CICS TCPIPSERVICE y haga clic en Go (Siguiente).

Figura 2. Agregado de punto final nuevo
Agregado de punto final nuevo

Ingrese los datos de la prueba en los campos del formulario denominado Invoke a WSDL Operation (Invocación de una operación WSDL) (Figura 3) y haga clic en Go.

Figura 3. Ingreso de los datos de la prueba para generar un mensaje SOAP
Ingreso de los datos de la prueba para generar un mensaje SOAP

Eclipse genera un mensaje SOAP basándose en los datos que usted ingresó en el formulario y lo envía a CICS. CICS transfiere el SOAP al controlador de canalización personalizado WEBINST que se creó en el Paso 1. WEBINST inserta los datos en la columna XML de la tabla de DB2 denominada REDBOOK.PUREXML. La aplicación WEBINST también devuelve el mensaje SOAP original como una respuesta, como se puede observar en la captura de pantalla de Web Services Explorer en la Figura 4.

Figura 4. Mensajes SOAP de solicitud y respuesta
Mensajes SOAP de solicitud y respuesta

Paso 4:—Demostración de que los datos se guardaron en la base de datos

Este último paso demuestra que los datos se insertaron en la tabla de DB2. Desde una herramienta como, por ejemplo, DB2 SPUFI, ejecute la instrucción SQL que figura en el Listado 4.

Listado 4. Instrucción SQL para mostrar los datos almacenados en la base de datos
SELECT * FROM REDBOOK.PUREXML

El Listado 5 le muestra los datos de DB2 que devolvió la instrucción SQL anterior.

Listado 5. Datos devueltos desde la instrucción SQL
---------+---------+---------+---------+---------+---------+---------+---------+
SELECT * FROM REDBOOK.PUREXML; 00010000 
---------+---------+---------+---------+---------+
---------+---------+---------+
....
 ---------+---------+---------+---------+-----
----+---------+---------+---------+
<?xml version="1.0" 
encoding="IBM285"?>
<soapenv:Envelope
xmlns:soapenv=
"http://s DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION DSNT418I
SQLSTATE = 01004 SQLSTATE
 RETURN CODE DSNT415I SQLERRP = DSN SQL PROCEDURE DETECTING
ERROR DSNT416I SQLERRD = 0 0 0 -1 0 0 
SQL DIAGNOSTIC INFORMATION DSNT416I SQLERRD =
X'00000000' X'00000000' X'00000000' X'FFFFFFFF'
 X'00000000' X'00000000' SQL
DIAGNOSTIC INFORMATION DSNT417I SQLWARN0-5 = W,W,,,,
 SQL WARNINGS DSNT417I
SQLWARN6-A = ,,,, 
SQL WARNINGS DSNE610I NUMBER OF ROWS DISPLAYED IS 1 DSNE612I DATA
FOR COLUMN HEADER .... 
COLUMN NUMBER 1 WAS TRUNCATED DSNE616I STATEMENT EXECUTION
WAS SUCCESSFUL, SQLCODE IS 100
---------+---------+---------+----
-----+---------+---------+---------+---------+
---------+---------+---------+----
-----+---------+---------+---------+---------+
DSNE617I COMMIT PERFORMED, 
SQLCODE IS 0 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL,
SQLCODE IS 0
---------+---------+---------+----
-----+---------+---------+---------+---------+
DSNE601I SQL STATEMENTS ASSUMED TO BE BETWEEN 
COLUMNS 1 AND 72 DSNE620I NUMBER OF
 SQL STATEMENTS PROCESSED IS 1 DSNE621I NUMBER OF
 INPUT RECORDS READ IS 1 DSNE622I
NUMBER OF OUTPUT RECORDS WRITTEN IS 26
********************************************************** 
Bottom of Data
******

Tenga en cuenta la declaración XML al comienzo de los datos. Ella indica que el XML es del tipo de codificación IBM285 (UK EBCDIC). El Escenario 2 describe la importancia de esto en mayor detalle.

Escenario 2: Consulta de datos pureXML y devolución de servicios web CICS

Los pasos que forman parte de este escenario le muestran cómo crear un programa COBOL CICS que actúa como un controlador de canalización y proveedor de servicios para recuperar el XML desde una columna de DB2 pureXML y devolverlo como un respuesta a una invocación de un servicio web.

Paso 1:—Creación del archivo de configuración de canalización CICS

Copie el archivo de configuración de canalización CICS que figura en el Listado 6 en Unix System Services (USS) como /u/user/config/select_pipeline.xml. Este archivo de configuración le informa a CICS que el programa controlador de canalización personalizado denominado WEBSLCT se debe usar para controlar las solicitudes de servicios web.

Listado 6. Archivo de configuración de canalización CICS
<?xml
                version="1.0" encoding="EBCDIC-CP-US"?> <provider_pipeline
                xmlns="http://www.ibm.com/software/htp/cics/pipeline">
                <service> <terminal_handler> <handler>
                <program>WEBSLCT</program>
                <handler_parameter_list/> </handler>
                </terminal_handler> </service>
                </provider_pipeline>

Paso 2:—Creación e instalación de recursos CICS

Cree e instale los siguientes recursos en su región CICS:

  • PIPELINE(WEBSLCT) CONFIGFILE(/u/user/config/select_pipeline.xml) SHELF(/u/user/shelf)
  • URIMAP(WEBSLCT) USAGE(PIPELINE) PIPELINE(WEBSLCT) HOST(*) PATH(/pureXML/select)
  • PROGRAM(WEBSLCT) DATALOCATION(ANY)

Para este escenario, usted puede reutilizar los recursos TCPIPSERVICE, DB2ENTRY y DB2TRAN que definió para WEBINST en el Escenario 1.

Copie el programa COBOL que figura en el Listado 7 en z/OS y compílelo con el compilador DB2/CICS/COBOL integrado. El código de muestra que se encuentra en la sección Descargas contiene un trabajo de compilación de muestra.

Listado 7. Programa COBOL
******************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. WEBSLCT. ENVIRONMENT DIVISION. CONFIGURATION
SECTION. * DATA DIVISION. * WORKING-STORAGE SECTION. 
* 01 WSRESP PIC S9(8) COMP
VALUE 0. 01 WSRESP2 PIC S9(8) COMP VALUE 0. 
01 WSFLENGTH PIC S9(8) COMP VALUE 1024.
01 XMLDATA PIC X(1024) VALUE SPACES. 
EXEC SQL INCLUDE SQLCA END-EXEC. LINKAGE
SECTION. PROCEDURE DIVISION. MAINLINE SECTION.
 * Get DB2 data EXEC SQL SELECT
XMLSERIALIZE(SOAP AS CLOB) INTO :XMLDATA FROM REDBOOK.PUREXML END-EXEC. * Respond
with the XML data by deleting DFHREQUEST 
* container and returning DFHRESPONSE
container EXEC CICS DELETE CONTAINER('DFHREQUEST') END-EXEC. EXEC CICS PUT
CONTAINER('DFHRESPONSE') FROM(XMLDATA) FLENGTH(WSFLENGTH) RESP(WSRESP)
RESP2(WSRESP2) END-EXEC.
* Exit program EXEC CICS RETURN END-EXEC. MAINLINE-EXIT.
EXIT. 
*----------------------------------------------------------------*

Tenga en cuenta que la función XMLSERIALIZE se usa en la instrucción SQL para SELECT. Esto se hace para que la declaración XML no se agregue al comienzo de la carga útil XML devuelta. Si usted usase SELECT * o SELECT SOAP sin XMLSERIALIZE, el XML devuelto tendría una declaración XML al comienzo. Esta declaración indicaría que el XML está codificado en la página de código local del sistema CICS. Generalmente, esta página de código local sería una de las páginas de código de EBCDIC. En algunos casos, esto puede ocasionar que la aplicación que recibe el XML lo rechace debido a que no soporta la página de código de EBCDIC.

Paso 3:—Prueba del servicio web desde su navegador

Utilice su navegador para dirigirse hacia la URL correspondiente al servicio web WEBINST. Por ejemplo, en el caso de muestra que usamos para crear este escenario, la URL sería la siguiente: http://winmvsa1.hursley.ibm.com:12345/pureXML/select.

El mensaje SOAP que inserta el programa WEBINST en el Escenario 1 se recupera y visualiza en su navegador, como se puede observar en la Figura 5.

Figura 5. Mensaje SOAP insertado por el programa WEBINST
Mensaje SOAP insertado por el programa WEBINST

Otros escenarios

Existen muchas variaciones posibles de los ejemplos que ilustran los dos escenarios que se describen en este artículo. Entre los ejemplos de esto, podemos incluir los siguientes:

  • Modificación del XML almacenado en DB2, usando la actualización del XML de SQL, en respuesta a una solicitud (como, por ejemplo, un cambio de domicilio).
  • Eliminación de parte del XML, usando SQL XMLTABLE, antes de almacenarlo (como, por ejemplo, por razones de seguridad).
  • Conversión del XML en columnas relacionales, usando SQL XMLTABLE, además del almacenado de datos como XML, o como una alternativa.

Estos escenarios pueden soportar una gran variedad de aplicaciones y servicios, como el inicio de sesión de la aplicación o aplicaciones basadas en formularios (como, por ejemplo, XHTML, XFORMS o formularios Lotus).

También es posible asegurar los servicios web CICS. La sección Recursos al final de este artículo incluye un vínculo hacia los detalles sobre este tema.

Conclusiones y perspectivas

Este artículo le mostró los pasos básicos involucrados en la inserción y la recuperación de contenidos XML en DB2 pureXML desde una aplicación CICS COBOL que se invoca a través de servicios web CICS. La inserción y la recuperación se realizan sin que exista ninguna necesidad de analizar o construir los datos XML en la aplicación CICS. El mensaje XML de entrada se almacena directamente en DB2. El mensaje XML de salida se crea a partir de la consulta de datos XML en DB2. Un servicio web CICS que usa DB2 pureXML para su almacenamiento puede transformarse en parte de una aplicación distribuida más grande con gran facilidad (como, por ejemplo, una aplicación de formularios XML o una aplicación de mensajería). La base de datos de pureXML también puede formar un registro de aplicación o auditoría consultable para los mensajes XML entrantes y salientes de servicios web CICS.

Agradecimientos

Deseamos agradecer a Maj-Britt Risager (y sus colegas) y a Lars Andersen Hylleberg (y sus colegas) por revisar este artículo y darnos su opinión al respecto.


Descargar

DescripciónNombretamaño
Sample codeMVSFiles.zip11KB

Recursos

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=491392
ArticleTitle=Uso de CICS con DB2 pureXML
publish-date=07292011