Desarrollo de un flujo de servicio convergente en el punto medio

Utilización de IBM Rational Developer for System z para crear un servicio web con un flujo de servicio CICS

Los proyectos de flujo de servicio brindan la capacidad de agregar múltiples transacciones a un servicio único. El enfoque de convergencia en el punto medio (Meet-in-the-middle o MIM), —es decir el mapeo de un programa existente a una interfaz de servicio existente, —es sencillo si se utilizan proyectos de servicio único. Por medio del entorno IBM ®Rational Developer for System z®usted aprenderá cómo hacer el mapeo de una interfaz de servicio existente a un flujo de servicio CICS ®para poder crear un servicio web utilizando el enfoque de convergencia en el punto medio.

Jonathan C. Gellin, Advisory Software Engineer, IBM

Jonathan Gellin is a software engineer who supports IBM Rational enterprise products. He has been developing IBM Rational Developer for System z since 2004.



29-07-2011

Introducción

La capacidad de las herramientas de servicio para empresas de IBM®Rational®Developer for System z®se utiliza para crear aplicaciones orientadas a servicios desde artefactos de la compañía. Los proyectos de servicio único se concentran en la capacidad de crear servicios web que invocan una transacción única. Los proyectos de flujo de servicio ayudan a habilitar a los usuarios a modelar un flujo que agrega múltiples transacciones a un servicio único.

Los escenarios más importantes de activación de servicios web, que son propios de la arquitectura orientada a servicios (SOA) son:

  • Desarrollo "ascendente" (activa aplicaciones existentes en la empresa como servicios web)
  • Desarrollo "convergente en el punto medio" (hace un mapeo de una interfaz de servicio existente)
  • "Desarrollo descendente" (crea una implementación de un servicio web para un servicio web)

Los proyectos de flujo de servicio brindan la capacidad de agregar múltiples transacciones a un servicio único y ofrecen una función potente a los desarrolladores que utilizan este enfoque. No obstante, los proyectos de flujo de servicio siempre utilizan un enfoque "ascendente" para generar una interfaz de servicio web. Aún si utiliza una interfaz de servicio existente para describir la interfaz de servicio de un flujo, un proyecto de flujo de servicio no generará la misma interfaz. Esto se debe a que los flujos de servicio se ejecutan en el tiempo de ejecución del flujo de servicio IBM CICS,®el cual requiere ciertos metadatos para invocar un flujo de servicio. Por lo tanto, cuando un proyecto de flujo de servicio genera una interfaz de servicio web, la interfaz contiene:

  • Los datos de negocios que se envían como datos de entrada al flujo y se reciben como datos de salida del flujo.
  • Metadatos que el tiempo de ejecución del flujo de servicio CICS utiliza para invocar el flujo.

Por razones relacionadas con la arquitectura o con ciertas directivas probablemente no se pueda modificar una interfaz de servicio existente. En ese caso es necesario un enfoque convergente en el punto medio (MIM), —es decir, donde se realiza el mapeo de una interfaz de servicio existente al flujo de servicio. Esta interfaz no contiene metadatos del tiempo de ejecución del flujo de servicio. Por medio de un enfoque convergente en el punto medio se puede crear una interfaz de servicio web para un flujo de servicio.

Requisitos previos

Antes de probar los métodos descriptos en este artículo, el desarrollador debe conocer IBM Rational Developer for System z, las herramientas de servicio para empresas, la función de flujo de servicio CICS, los conceptos relacionados con servicios web y el lenguaje COBOL. Para tener más aptitud en estas áreas, por favor lea la sección de recursos relacionados con este tema.

Los proyectos de este artículo se desarrollaron y probaron utilizando IBM Rational Developer for System z, versión 7.6 en una workstation /oficinal virtual Microsoft®Windows®XP Professional. Es posible que las capturas de pantalla que usted vea en este artículo reflejen las configuraciones particulares del entorno en el cual se desarrolló el artículo, por lo tanto pueden ser diferentes de sus configuraciones.


Visión general y enfoque

En este artículo se utilizará el enfoque "convergente en el punto medio" del desarrollo del servicio web para mapear XML de una definición de interfaz de servicio existente a estructuras de datos en los datos de salida COBOL generados de un proyecto de flujo de servicio. Este enfoque puede ser útil en cualquier situación en la cual se deba utilizar un flujo de servicio con una interfaz de servicio que no se pueda modificar; por ejemplo cuando se requiere un flujo de servicio que agregue aplicaciones múltiples terminales o no terminales existentes para procesar un documento XML descripto por un esquema que se origina en terceros (por ejemplo la comisión de estándares u otra herramienta).

Debido a que los servicios web generados por proyectos de flujo de servicio requieren datos de negocios y metadatos de tiempo de ejecución de flujo de servicio, el proyecto de flujo de servicio no puede utilizar una definición de interfaz de servicio preexistente de manera automática. Este artículo le mostrará cómo utilizar los proyectos de flujo de servicio para generar un programa solicitante de cliente que invoque el tiempo de ejecución del flujo de servicio con los metadatos necesarios, utilizando datos de negocios que se pasaron desde un servicio web. Este paso requiere algo de codificación COBOL. Desde allí, puede usar un proyecto de servicios web para CICS para completar el mapeo de la definición desde la interfaz existente y el programa solicitante de cliente. Finalmente, tendrá una implementación de servicio web que presentará una interfaz de servicios existente, sin modificaciones que se mapeó a un flujo de servicio.


Descargar la muestra de la descripción del servicio web y el proyecto de flujo de servicio

En la sección de Descargas de este artículo, encontrará un archivo de almacenamiento (SFFMIM.zip) que contiene un proyecto genérico Eclipse con un archivo que contiene el Lenguaje de Descripción de servicios web (WSDL) que describe un servicio web que incrementa un número de datos de entrada (SFFMIM.wsdl) y un proyecto de flujo de servicio con un flujo que implementa el incremento del un número de datos de entrada.

Comience descargando SFFMIM.zip. Abra la perspectiva de Herramientas de Servicios para Empresas en IBM Rational Developer for System z e importe SFFMIM.zip como archivo de intercambio del proyecto File (Archivo) > Import (Importar) > Project Interchange (Intercambio de proyecto). .

Figura 1. Se importa el proyecto de flujo de servicio SFFMIM después de SFFMIM.zip
Se importa el proyecto de flujo de servicio SFFMIM después de SFFMIM.zip

Examine la muestra de la descripción del servicio web

En la vista del Navegador, expanda el GenericProject y abra el archivo SFFMIM.wsdl. Observe que el servicio describe una operación denominada IncrementOperation que utiliza el mensaje IncrementRequest como dato de entrada y el mensaje IncrementResponse como dato de salida. El mensaje IncrementRequest se compone de un elemento entero único llamado requestNumber y el mensaje IncrementResponse se compone de un elemento integer / entero único llamado responseNumber.

Examine la muestra del proyecto de flujo de servicio

En la carpeta Flows (Flujos) del proyecto SFFMIM en la vista EST Project Explorer abra el archivo SFFMIM.seqflow en Flow Editor (Editor de flujo) El flujo es mínimo ya que sólo contiene un nodo de recepción, un nodo de asignación y un nodo de respuesta. Se ha creado la interfaz del flujo importando SFFMIM.wsdl y esto se refleja en los mensajes de entrada y de salida que corresponden a los nombres del nodo de recepción (IncrementOperationRequestMsg) y del nodo de respuesta (IncrementOperationResponseMsg). En general, un flujo es mucho más complejo porque contiene nodos de invocación de transacciones múltiples y nodos de decisión. En este ejemplo, el flujo se ha realizado de la manera más simple posible para que usted se pueda concentrar en la activación del servicio web MIM del flujo. Para obtener más información sobre modelado de flujos, consulte en la sección de recursos relacionados con este tema.

Figura 2. SFFMIM.seqflow en el editor de flujo
SFFMIM.seqflow en el editor de flujo

Vista más amplia de la Figura 2.

Haga doble clic en el nodo de asignación para abrir la rutina de mapeo asociada con ese nodo. Observe que la rutina de mapeo tiene una transformación única de mapeo que configura el mensaje de salida responseNumber según el mensaje de entrada requestNumber + 1. Este flujo incrementa el requestNumber y lo devuelve como responseNumber.

Figura 3. La rutina de mapeo del nodo de asignación
La rutina de mapeo del nodo de asignación

Vista más amplia de la Figura 3.

Cierre el Editor de mapeo y el Editor de flujo. Expanda la carpeta Generation del proyecto de flujo de servicio. Observe que el flujo ya se ha generado para el CICS Service Flow Runtime (tiempo de ejecución de flujo de servicio CICS) Level 2.0. Hay un archivo de generación de propiedades (SFFMIM_generation_props.sfgen), un programa generado COBOL (SFFMIMP.cbl) y un archivo de propiedades de flujo de servicio (SFFMIMR.sfp). El programa COBOL y el archivo de propiedades de flujo de servicio están listos para la implantación en CICS. La implantación incluye la compilación del programa COBOL, la definición de los recursos CICS, la ubicación del archivo de propiedades de flujo de servicio en el directorio de recogida de flujo de servicio y el escaneo del service flow pickup directory (directorio de captación de flujo de servicio). Nos concentraremos en desarrollar el servicio web MIM para este flujo y no en los pasos para la implantación. Para obtener más información sobre la implantación de los flujos del servicio, consulte la sección de recursos relacionados con este tema.


Cree un programa solicitante de cliente para el flujo de servicio.

Cuando se invoca un flujo de servicio, el programa generado por el proyecto de flujo de servicio no se invoca directamente. Se invoca el programa de interfaz de tiempo de ejecución del flujo de servicio CICS (DFHMADPL), el cual toma datos de entrada del negocio así como los metadatos específicos del tiempo de ejecución del flujo de servicio como sus datos de entrada. DFHMADPL utiliza los metadatos para invocar el programa generado COBOL. Para obtener más detalles sobre este proceso, consulte la sección de recursos relacionados con este tema.

Debido a que el tiempo de ejecución del flujo de servicio requiere metadatos y datos de negocios, es necesario implementar un paso intermedio entre la interfaz del servicio web (que solamente se encarga de los datos de negocios y la invocación del tiempo de ejecución. En esta sección se describe la creación de un programa solicitante de cliente para el flujo de servicio. El programa solicitante de cliente solamente aceptará datos de negocios como datos de entrada e invocará el tiempo de ejecución del flujo de servicio con los metadatos necesarios que se definieron estadísticamente. Así se elimina la necesidad de incluir metadatos en una definición de interfaz de un servicio web y se puede activar la definición de interfaz de un servicio existente que se va a utilizar para invocar el flujo de servicio.

Para crear el programa solicitante de cliente, cumpla con los siguientes pasos:

  1. Haga clic con el botón derecho en el archivo de generación de propiedades (SFFMIM_generation_props.sfgen) y seleccione Generate (Generar)> Client Requester (Solicitante de cliente). Con esta acción se iniciará un asistente que genera un programa COBOL que invoca el Service Flow Runtime (Tiempo de ejecución de flujo de servicio) para el flujo seleccionado.
Figura 4. Asistente Generate client requester (Generar solicitante de cliente)
Asistente Generate client requester (Generar solicitante de cliente)
  1. Acepte los valores predeterminados y presione Finish (Finalizar). Así se creará un programa COBOL en la carpeta Generation llamado SFFMIMR.cbl y se abrirá el nuevo programa en un editor.

Nota: El asistente genera el programa solicitante cliente basado en plantillas personalizables que se definen en Preferencias Window (Ventana)> Preferences (Preferencias)> Enterprise Service Tools (Herramientas de servicio para empresas)> Service Flow Projects (Proyectos de flujo de servicio) > COBOL Requester Templates (Plantillas de solicitantes en COBOL). Este procedimiento le puede resultar útil para personalizar estas plantillas.

  1. Examine el nuevo programa COBOL. Contiene estructuras de datos de solicitud y respuesta que corresponden a los datos de negocios del flujo. Aparece el encabezado Service Flow Runtime (Tiempo de ejecución del flujo de servicio) con metadatos relacionados con el flujo que está invocando. Invoca el programa de la interfaz de tiempo de ejecución del flujo de servicio DFHMADPL, que finalmente invocará el programa generado de flujo de servicio y configura una lógica de manipulación de errores luego de invocar el flujo. En este punto hay que tener cuidado porque el programa generado no especifica cómo aparecen los datos de entrada ni como se devuelven los datos de salida. Estos pasos deben estar codificados.
  2. Modifique SFFMIMR.cbl para que lea los datos de entrada y escriba los datos de salida en COMMAREA. En primer lugar, inserte la siguiente definición de datos en la sección de vínculos del programa:
    01 DFHCOMMAREA.
    05 INOUTDATA PIC S9(9) COMP-5 SYNC.
    Esto define la estructura de datos COMMAREA, que se utilizará para vincular los datos de entrada y de salida entre el programa solicitante de cliente y el mundo exterior.

    Ahora reemplace la línea que dice "*---->* code is required to get test input data from a source" por la siguiente instrucción de migración:
    MOVE DFHCOMMAREA TO CSFR-REQUEST.
    Así los datos enviados en COMMAREA se colocan dentro de la estructura de datos utilizada para datos de entrada del negocio.

    Finalmente, en la sección que verifica si el código de devolución es normal, inserte el siguiente código luego de la línea que dice "MOVE CSFR-DATA TO CSFR-RESPONSE":
    MOVE CSFR-RESPONSE TO DFHCOMMAREA
    Así los datos de salida del negocio se colocan en COMMAREA, desde donde los puede leer un programa externo.

En esta sección ha creado un programa solicitante de cliente para el flujo denominado SFFMIMR. Este programa tiene una interfaz COMMAREA. Acepta los datos de entrada del negocio como datos de entrada, llena los metadatos del tiempo de ejecución del flujo de servicio que sean necesarios, invoca la muestra del flujo de servicio y devuelve los datos se salida del negocio del servicio como datos de salida. El programa solicitante de cliente se encuentra listo para su compilación e implantación en CICS. Para su comodidad, la fuente para el programa solicitante de cliente (SFFMIMR.cbl) terminado se encuentra disponible en la sección Descargas. Por medio de este programa solicitante de cliente usted podrá completar el desarrollo MIM de un servicio web para este flujo de servicio.


Desarrollo de un servicio web MIM para el flujo de servicio.

En esta sección usted va a crear un proyecto de servicio único que generará artefactos de servicio web en CICS y un programa de conversión que mapea datos entre la carga útil XML de servicio web y las estructuras de datos de entrada y salida COBOL del programa solicitante de cliente que se generó en la sección anterior.

Para activar el servicio web, cumpla con los siguientes pasos:

  1. En la vista Enterprise Service Tools (herramientas de servicio para empresas) cree un nuevo Web Services for CICS Project (servicios web para proyecto CICS). File (Archivo) > New (Nuevo) > Web Services for CICS Project (servicios web para proyecto CICS). En la primera página del asistente, elija un nombre del proyecto de SFFMIM_CICSWS, un escenario de desarrollo de Map an Existing Service Interface (meet-in-middle) (Mapeo de una interfaz de servicio existente) – (convergente en el punto medio) Un modo de aplicación de Service Provider (Proveedor de servicios), y un tipo de conversión de Compiled XML Conversion (Conversión XML compilada) Presione Next (Siguiente) .
Figura 5. Nuevos servicios web para el asistente de proyecto CICS
Nuevos servicios web para el asistente de proyecto CICS

En la segunda página del asistente, seleccione el archivo de definición de la interfaz externa (SFFMIM.wsdl) y el programa solicitante de cliente (SFFMIMR.cbl) para que se importen como archivos fuente. Presione Finish.

Figura 6. Nuevos servicios web para el asistente de proyecto CICS, segunda parte
Nuevos servicios web para el asistente de proyecto CICS, segunda parte
  1. Seleccione el nuevo proyecto, haga clic con el botón derecho y seleccione Create mappings (Crear mapeos) .
Figura 7. Inicie el asistente para crear mapeos
Inicie el asistente para crear mapeos

En la primera página del asistente, seleccione un tipo de operación Request-response (Solicitud-respuesta). Presione Next

Figura 8. Asistente para crear mapeos
Asistente para crear mapeos

En la segunda página del asistente, seleccione SFFMIM.wsdl como fuente XML y SFFMIMR.cbl como lenguaje objetivo/de llegada para la solicitud a la operación del servicio web. Presione Next .

Figura 9. Asistente para crear mapeos – solicitud
Asistente para crear mapeos – solicitud

En la tercera página del asistente, elija el mensaje y la correspondiente estructura de datos para la solicitud a la operación del servicio web. Elija IncrementRequest como elemento fuente XML de la definición de servicio web y CSFR-REQUEST como estructura del lenguaje objetivo/de llegada. Presione Next .

Figura 10. Asistente para crear mapeos – solicitud, segunda parte
Asistente para crear mapeos – solicitud, segunda parte

En la cuarta página del asistente, acepte los valores predeterminados y presione Next .

Figura 11. Asistente para crear mapeos – solicitud, tercera parte
Asistente para crear mapeos – solicitud, tercera parte

En la quinta página del asistente, seleccione SFFMIMR.cbl como la fuente de idioma y SFFMIM.wsdl como XML de destino para la respuesta a la operación del servicio web. Presione Next .

Figura 12. Asistente para crear mapeos – respuesta
Asistente para crear mapeos – respuesta

En la sexta página del asistente, elija la estructura de datos y el mensaje correspondiente para la respuesta a la operación del servicio web. Elija CSFR-RESPONSE como estructura del lenguaje fuente e IncrementResponse como elemento XML de destino de la definición del servicio web. Presione Next

Figura 13. Asistente para crear mapeos – respuesta, segunda parte
Asistente para crear mapeos – respuesta, segunda parte

En la página 7 del asistente, acepte los valores predeterminados y presione Finish.

Figura 14. Asistente para crear mapeos – respuesta, tercera parte
Asistente para crear mapeos – respuesta, tercera parte

Los archivos denominados request.mapping y response.mapping que contienen fuentes y los destinos especificados se crearán y abrirán en el Mapping Editor (Editor de Mapeo).

  1. A continuación usted deberá definir el mapeo de la solicitud. En request.mapping, arrastre el elemento requestNumber de la fuente IncrementRequest hacia el elemento REQUESTNUMBER del destino CSFR-REQUEST. Esta acción realiza un mapeo de la fuente de la solicitud XML al destino de la estructura de datos COBOL. Guarde y cierre el archivo.
Figura 15. Definición del mapeo de la solicitud en el editor de mapeo
Definición del mapeo de la solicitud en el editor de mapeo

Vista más amplia de la Figura 15.

  1. Ahora deberá definir el mapeo de la respuesta. En Response.mapping, arrastre el elemento RESPONSENUMBER de la fuente CSFR-RESPONSE hacia el elemento responseNumber del destino IncrementResponse. Así se realiza el mapeo de la fuente de la estructura de datos COBOL al destino de la respuesta XML. Guarde y cierre el archivo.
Figura 16. Definición del mapeo de la respuesta en el editor de mapeo
Definición del mapeo de la respuesta en el editor de mapeo

Vista más amplia de la Figura 16.

  1. Ahora usted está listo para generar los recursos de los servicios web y el programa de conversión COBOL. Haga clic con el botón derecho en el proyecto SFFMIM_CICSWS y seleccione Generate Web Services for CICS resources (Generar servicios web para recursos CICS). Esta acción iniciará un nuevo asistente. En la primera página del asistente, verifique que los archivos de mapeo de solicitud y respuesta estén correctos y presione Next.
Figura 17. Asistente de Web services for CICS generation
Asistente de Web services for CICS generation

En la segunda página del asistente, seleccione SFFMIM como prefijo del nombre del programa de conversión y SFFMIMR (el solicitante de cliente) como nombre del programa de servicio. Presione Next.

Figura 18. Asistente de Web services for CICS generation, segunda parte
Asistente de Web services for CICS generation, segunda parte

En la tercera página del asistente, seleccione SFFMIM como nombre del archivo WSBind y SFFMIM como nombre del archivo log. Verifique que la interfaz del programa sea COMMAREA, ya que usted definió que SFFMIMR tuviera una interfaz COMMAREA. Acepte los valores predeterminados para lo que falta del asistente presionando Finish

Figura 19. Asistente de Web services for CICS generation, tercera parte
Asistente de Web services for CICS generation, tercera parte

En la carpeta Targets, observe que se han generado SFFMIM.wsbind y SFFMIMD.cbl, además de un archivo log. SFFMIM.wsbind es el artefacto de CICS que se asocia con el servicio web CICS y SFFMIMD.cbl es el programa de conversión COBOL que hace mapeos de datos entre la carga útil XML del servicio web y las estructuras de datos COBOL en el programa SFFMIMR.

En esta sección, usted ha utilizado un proyecto de un servicio único para activar un servicio web convergente en el punto medio que invoca la muestra del flujo de servicio. El proyecto completo de un servicio único (SFFMIM_CICSWS.zip) se puede encontrar en la sección Descargas Al crear el proyecto, los mapeos y ejecutar el asistente de generación, usted ha creado artefactos que activan el flujo de servicio al que se accederá por medio de una definición de interfaz de servicio existente. Lo que queda por hacer es compilar el programa de conversión COBOL, implantar el SFFMIM.wsbind en una canalización CICS y definir varios recursos CICS. Estos pasos relacionados con la implantación no se desarrollan en este artículo. Para obtener más información sobre la implantación de los servicios web, consulte la sección de recursos relacionados con este tema.


Conclusión

Si sigue el enfoque descripto anteriormente, podrá completar con éxito la activación del servicio web de un flujo de servicio con una definición de interfaz de servicio existente por medio de las herramientas de servicio para empresas en Rational Developer for System z. Como la generación de estilo "ascendente" existente de artefactos de servicios web en los proyectos de flujo de servicio incluye algunos metadatos de tiempo de ejecución de flujo de servicio, no es apropiado utilizarlo en definiciones de interfaces de servicios existentes. Usted ha creado un solicitante de cliente que invoca el flujo y maneja estadísticamente las necesidades de los metadatos de la función del tiempo de ejecución del flujo de servicio, por medio de un proyecto de servicio único convergente en el punto medio para generar artefactos de servicio web y un programa que hace mapeos entre su carga XML del servicio web y las estructuras del lenguaje del solicitante de cliente.


Descargas

DescripciónNombretamaño
Service Flow Project and interface definitionSFFMIM.zip15KB
Client requester Program for Service FlowSFFMIMR.zip24KB
Web Services for CICS ProjectSFFMIM_CICSWS.zip2KB

Recursos

Aprender

Obtener los productos y tecnologías

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=Rational, SOA y servicios web
ArticleID=457214
ArticleTitle=Desarrollo de un flujo de servicio convergente en el punto medio
publish-date=07292011