Uso de la función store-and-forward (guardar y reenviar) en WebSphere Process Server V7.0

Este tutorial explica la nueva función store-and-forward (guardar y reenviar) que se introdujo en WebSphere® Process Server V7 y usa diversos escenarios de aplicación para mostrarle cómo usar dicha función para facilitar el procesamiento de las solicitudes de aplicación.

Phani Madgula, Software Developer, IBM

author imagePhani Madgula trabaja actualmente para WebSphere Process Server Support en India Software Labs (ISL). Tiene 6 años de experiencia en IBM. Trabajó para varios equipos de productos, entre ellos WebSphere Application Server Community Edition, WebSphere Business Integration Adapters y DB2. También tiene experiencia en el desarrollo de aplicaciones JEE, soporte para productos y administración de bases de datos. Además, es profesional certificado en Oracle9i.



03-08-2011

Introducción

Al procesar solicitudes asíncronas en las versiones anteriores de WebSphere Process Server (de aquí en más, Process Server), se generaban eventos fallidos si había errores de tiempo de ejecución. El sistema de recuperación seguía generando eventos fallidos a medida que las solicitudes seguían fluyendo hacia un servicio fallido o no disponible que estuviese arrojando estos errores de tiempo de ejecución. Luego de resolver estos errores de tiempo de ejecución, el administrador debía volver a enviar los eventos fallidos usando la consola de administración o scripts que usasen la API de gestión del evento fallido (FEM). Esto era una operación que consumía muchos recursos al momento de generar y volver a enviar los eventos fallidos. En Process Server V7.0, se trata este problema de manera muy elegante mediante la introducción de la función store-and-forward.

Cuando un componente llama a un servicio y el servicio no está disponible, empiezan a generarse errores de tiempo de ejecución. Estos errores de tiempo de ejecución ocasionan la generación de eventos fallidos en el caso de las llamadas asíncronas. En vez de generar eventos fallidos para las llamadas subsiguientes del servicio, los usuarios pueden configurar la función store-and-forward en la importación o exportación o en el componente apropiado de manera tal que las solicitudes se guarden en las colas correspondientes. Estas solicitudes guardadas se dejarán de enviar al servicio objetivo no disponible o defectuoso. Esto evita la generación de una gran cantidad de eventos fallidos. Cuando el servicio objetivo vuelve a estar disponible, las solicitudes guardadas se pueden retransmitir usando el widget Store and Forward en Business Space.

En este tutorial

Este tutorial demuestra la configuración de esta función en aplicaciones que se ejecutan en Process Server V7.0. Además, se presentan diversos escenarios con aplicaciones de muestra que ilustran cómo la función trabaja durante el tiempo de ejecución. También se presentan los widgets de Business Space que corresponden a la función store-and-forward.

Este tutorial se encuentra dividido en las siguientes secciones:

  • Introducción a la función store-and-forward
  • La función store-and-forward en varios escenarios de aplicación de negocios
  • Especificación de excepciones en la configuración de store-and-forward

Requisitos previos

  • Buenos conocimientos de los conceptos de J2EE.
  • Conocimientos en el desarrollo de aplicaciones para WebSphere Process Server usando WebSphere Integration Developer (de aquí en más, Integration Developer) y realizando actividades administrativas en el entorno del servidor.
  • Conocimientos de WebSphere MQ y sus herramientas.

Requisitos de sistema

Es necesario contar con el siguiente entorno para poder ejecutar las muestras.

  • Un escritorio con Windows® XP® Service Pack 2 con 2 GB de memoria RAM como mínimo.
  • IBM® WebSphere Integration Developer V7.0.0.0 Fix Pack 1 con el entorno de prueba. Usted deberá aplicar el arreglo provisional IZ72101 para el entorno de prueba.
  • IBM WebSphere Process Server V7.0.0.0 Fix Pack 1
  • WebSphere MQ V6.0

Duración

3 horas


Introducción a la función store-and-forward

Esta sección describe la función store-and-forward y explica cómo configurarla en las aplicaciones. Además, también le ofrece lineamientos para configurar el calificador.

¿Cómo funciona la función store-and-forward?

Usted puede activar la función store-and-forward en las aplicaciones configurando el calificador store-and-forward en el componente que se invoca de manera asíncrona. Este componente puede ser una importación, una exportación SCA o un componente SCA. Usted puede configurarlo en todas las interfaces del componente, en una interfaz específica o en una operación específica. Como parte de esta configuración, también se especifica una excepción de tiempo de ejecución. Usted puede configurar la excepción de tiempo de ejecución de manera diferente para cada configuración de la función store-and-forward especificada en varias interfaces u operaciones del componente. Las configuraciones de store-and-forward, que se especifican en varias interfaces u operaciones, crean puntos de control de servicio en los widgets de Business Space.

La idea de la función store-and-forward es, cuando se presenta una excepción de tiempo de ejecución en el flujo de la solicitud, que la excepción se propagará hasta el primer punto asíncrono. Si se configura la función store-and-forward en el componente cerca del punto asíncrono, las solicitudes subsiguientes se guardarán en dicho punto asíncrono y no seguirán generando eventos fallidos de manera continua. Cuando se resuelvan las excepciones de tiempo de ejecución, se podrán volver a ejecutar los eventos guardados usando el widget Store and Forward. Los puntos asíncronos realizan un mapeo hacia los puntos de control de servicio.

Cuando se implanta una aplicación con la función store-and-forward en Process Server y se activa la validación del tiempo de ejecución, un validador de tiempo de ejecución confirma que el calificador esté configurado correctamente. Si hay algún error, se detiene la instalación de la aplicación. Si aparece alguna advertencia, ésta figura en el archivo de registro y se permite que la instalación de la aplicación continúe. Las reglas para la validación de este calificador se especifican por medio del validador de tiempo de ejecución de store-and-forward.

Cuando el componente en el que se configura la función store-and-forward llama un servicio sincrónico y dicho servicio arroja errores de tiempo de ejecución, se genera un evento fallido para la solicitud. Sin embargo, este evento fallido también iniciará el guardado para este componente. Si el evento fallido se recupera en la consola de administración, la columna del calificador de eventos mostrará el valor "initiated store" (guardado iniciado). El widget Store and Forward en Business Space indicará que se inició el guardado en los puntos de control de servicio del componente. El estado pasará a ser “storing” (guardando) para los puntos de control de servicio. Las solicitudes subsiguientes enviadas al mismo componente se guardarán en la cola correspondiente al componente en cuestión. Cuando el servicio objetivo vuelva a estar disponible o cuando se resuelvan los errores de tiempo de ejecución, el estado de los puntos de control de servicio podrá pasar a ser “forwarding” (reenviando) en el widget Store and Forward. Cuando el estado se encuentre en "reenviando", los eventos guardados se reenviarán al servicio objetivo para su procesamiento.

Configuración de la función store-and-forward para las aplicaciones

Se usa Integration Developer para configurar el calificador store-and-forward. Tenga en cuenta los siguientes puntos al momento de configurar el calificador store-and-forward:

  • El calificador se puede configurar en los siguientes componentes:
    • Exportación SCA (no se puede configurar en otras exportaciones)
    • Importaciones
    • Componente SCA
  • Además, en cada uno de los componentes que mencionamos con anterioridad, se puede configurar el calificador de manera independiente en todas las interfaces e independientemente en todas las operaciones de la interfaz.
  • Cada una de las configuraciones cuenta con un nombre y constituye un punto de control de servicio. Todos los puntos de control de servicio se visualizarán en el widget store-and-forward en Business Space. Vea el campo “Configuration name” (Nombre de la configuración) en la Figura 1.
  • Para cada configuración de store-and-forward, se debe incluir la especificación de la excepción. Esta indica qué excepción de tiempo de ejecución debe desencadenar el guardado. Si el componente recibe una excepción diferente a la especificada, no se desencadenará el guardado. De manera predeterminada, la excepción es ServiceUnavailableException. Para mayor información, vea Administración de Service Runtime Exception (Excepción de tiempo de ejecución del servicio). Vea la ilustración que se encuentra en la Figura 1.
  • La especificación de la excepción incluye una explicación de cómo se resuelve la excepción configurada en la excepción ajustada que recibe el componente. Generalmente, en la propagación de la excepción, la excepción raíz se ajusta en el nivel más alto de excepciones. El componente recibe esta excepción ajustada, que incluye una cadena de excepciones. La combinación denominada “Exception chain” (Cadena de excepciones) que se puede observar en la Figura 1 especifica este valor.
  • La especificación de la excepción incluye un mensaje para que exista correspondencia con la excepción recibida. Para desencadenar el guardado, el mensaje en la excepción recibida debe coincidir con el mensaje especificado. Esto resulta muy útil al momento de configurar las excepciones de tiempo de ejecución personalizadas. Vea el campo “Message to match” (Mensaje a corresponderr) que aparece en la Figura 1.
  • La especificación de la excepción también puede especificar que se desencadene el guardado si la excepción recibida es una subclase de la excepción especificada. Esto resulta muy útil al momento de configurar las excepciones de tiempo de ejecución personalizadas. Vea el campo “Match types that inherit from this type” (Corresponder los tipos que se heredan de este tipo) que aparece en la Figura 1.
  • La Figura 1 le ofrece varias opciones que están disponibles (como ya lo hemos explicado) mientras se configura el calificador store-and-forward. Haga clic en EmployeeServiceComponent en el diagrama de montaje y navegue hacia la pestaña Properties (Propiedades) > Details (Detalles) al final de la lista.
    Figura 1. Configuración de la función store-and-forward
    Configuración de la función store-and-forward

Tenga en cuenta que usted no puede usar la función store-and-forward para invocaciones sincrónicas. Para mayor información sobre cómo configurar el calificador store-and-forward, vea el tema intitulado Calificador store-and-forward en el Centro de Información.


Escenarios de aplicación para la función store-and-forward

Esta sección introduce varios escenarios de aplicaciones de negocios en los que usted puede usar la función store-and-forward. El comportamiento de esta función en cada escenario se ilustra con una aplicación de muestra que usted puede implantar en el entorno de Process Server. Todas estas aplicaciones están en formato de Project Interchange (PI) para que se las pueda importar a Integration Developer y ejecutar en el entorno de prueba.

Escenario 1: Store-and-forward en importaciones asíncronas (JMS, MQ, MQJMS, GenericJMS)

Esta sección discute cómo la función store-and-forward trabaja con importaciones que enlazan mensajes. Este escenario de negocios y esta aplicación de muestra se explican a continuación.

La compañía fabricante de computadoras, XYZ, cuenta con una unidad de montaje y una división de inventario. La división de inventario brinda información sobre la disponibilidad de los CPU. La unidad de montaje le consulta a la división de inventario sobre la disponibilidad de una cantidad específica de un CPU en particular. La división de inventario responde si la cantidad indicada de dicho CPU está o no disponible. Si dicha cantidad no está disponible, se responde con información sobre cuándo dicha cantidad estará disponible. La división de inventario acepta consultas a través del transporte WebSphere MQ. Los clientes tienen que enviar sus consultas a una cola especificada en WebSphere MQ y recuperar la respuesta en otro momento. Por lo tanto, el flujo de la consulta es una operación unidireccional. La Figura 2 le muestra el diagrama de montaje.

Figura 2. Diagrama de montaje del servicio de inventario
Diagrama de montaje del servicio de inventario

Desde el diagrama de montaje anterior, se exporta el componente CPUInventory como CPUInventoryExport con enlaces de exportación MQJMS. El componente AssemblyUnit llama al componente CPUInventory a través de CPUInventoryImport con enlaces de exportación MQJMS. El calificador store-and-forward se configura en CPUInventoryImport. La Figura 3 le muestra el calificador store-and-forward configurado en la importación.

Figura 3. Calificador store-and-forward en CPUInventoryImport
Calificador store-and-forward en CPUInventoryImport

A veces, existen interrupciones temporales no aceptadas, que hacen que el servicio de WebSphere MQ no esté disponible. En estas situaciones, si AssemblyUnit llama al componente CPUInventory a través de CPUInventoryImport, la importación no se conecta a WebSphere MQ. Esto genera un evento fallido. Como la función store-and-forward está configurada en la importación, el primer evento fallido también desencadenará el guardado. Las solicitudes subsiguientes desde la importación se guardan en la cola de importación. De esta forma, se generan solicitudes sin importar si el transporte WebSphere MQ está o no disponible. Luego de que el servicio WebSphere MQ vuelve a estar disponible, las solicitudes guardadas se reenvían usando el widget Store and Forward desde Business Space.

Para ejecutar la muestra:

  1. Descargue el archivo Example1.zip, que viene incluido en el archivo samples.zip. PI tiene dos módulos, AssemblyService e InventoryService, y una biblioteca.
  2. Importe la muestra a Integration Developer.
  3. Cree un gestor de colas con el nombre Test_QM. Cree un canal de conexión con el servidor con el nombre CHANNEL1 y configure el puerto escucha con el número de puerto 1414 en WebSphere MQ. La importación se conecta al gestor de colas usando enlaces cliente. Cree el nombre de cola inventory_export_queue en Test_QM. Usted puede usar MQ Explorer para realizar estas actividades. Observe las propiedades de la importación y la exportación en Integration Developer. Tenga en cuenta que CPUInventoryImport coloca las solicitudes en inventory_export_queue, que es donde escucha CPUInventoryExport. Estos valores se configuran en Import (Importación) y Export (Exportación). Coloque el valor adecuado para J2C authentication data entry (Entrada de datos de autenticación de J2C) en la sección de los atributos Security (Seguridad) de Import y Export. Para mayor información sobre los enlaces MQJMS, vea el tema intitulado JMS de WebSphere MQ.
  4. Implante la muestra en el servidor de prueba.
  5. Pruebe un flujo de solicitud usando el cliente de prueba de Integration Developer. Haga clic derecho en el componente AssemblyUnit. Haga clic en la opción Test component (Probar componente). Ingres los siguientes valores:
    CPU_item_no:1
                            Quantity:5
  6. Controle el archivo Systemout.log y busque los siguientes datos de salida:
    Status=Available
                                Available_date=Today CPU_details=Intel PENTIUM
  7. Detenga el gestor de colas Test_QM usando MQ Explorer. Envíe una solicitud como se indica a continuación:
    CPU_item_no:2
                                Quantity:12
  8. Se generará un evento fallido, como se puede observar en la Figura 4. Use la consola de administración para visualizar los eventos fallidos. Tenga en cuenta que el valor del calificador del Evento es Initiated store.
    Figura 4. Evento fallido generado cuando el gestor de colas no está disponible
    Evento fallido generado cuando el gestor de colas no está disponible
  9. Envíe dos solicitudes más con los siguientes valores de entrada:
    CPU_item_no:3 Quantity:16 and CPU_item_no:3
                                Quantity:29
  10. Observe que no se generen más eventos fallidos. Sin embargo, las solicitudes se guardarán en la cola de importación, como se puede observar en la Figura 5. Use el Service Integration Bus Explorer en la consola de administración para visualizar los puntos de cola en el bus de SCA-SYSTEM.
    Figura 5. Solicitudes guardadas en la cola de Import
    Solicitudes guardadas en la cola de Import
  11. Inicie Business Space y cree un espacio con el nombre StoreAndForward; agregue el widget Store and Forward y guarde todo esto. Este widget le muestra el estado de “Storing” (Guardando), como se puede observar en la Figura 6. Observe los puntos de control de servicio en el widget. Sólo existe un punto de control de servicio con el mismo nombre que el elegido para Configuration name durante la configuración de store-and-forward (vea la Figura 3). Inicie Business Space haciendo clic derecho en Server (Servidor), en la vista del servidor, y seleccionando la opción Launch (Iniciar) > Business Space (Espacio de negocios) en Integration Developer.
    Figura 6. Widget Store and Forward en Business Space
    Widget Store and Forward en Business Space
  12. Ejecute el Test_QM del gestor de colas. El en widget Store and Forward, tilde la casilla de verificación "store" (guardar) y haga clic en el botón Forward (Reenviar). Esto hará que se vuelvan a enviar todos los mensajes guardados al gestor de colas. El servicio CPUInventory procesará las solicitudes. Seleccione los archivos Systemout.log para los mensajes salientes. Sin embargo, se debe enviar el evento fallido generado inicialmente por medio de la consola de administración.
  13. El widget Store and Forward le muestra el estado del guardado como “Forwarding” (Reenviando), como se puede observar en la Figura 7.
    Figura 7. Widget Store and Forward que muestra el estado como “Forwarding”
    Widget Store and Forward que muestra el estado como “Forwarding”

Escenario 2: Store-and-forward en importaciones sincrónicas (WebServices)

En este escenario, el calificador store-and-forward se configura en una importación con enlaces de servicios web. Sin embargo, a la importación de servicio web se la llama de manera asíncrona. Esto desencadena el mensaje de guardado cuando el servicio web arroja errores de tiempo de ejecución (cuando no está disponible). El mensaje de guardado será la cola creada para la importación. Este escenario de negocios y la aplicación de muestra se explican a continuación.

La compañía fabricante de computadoras, ABC, cuenta con una división de montaje, que requiere monitores de computadora para las tareas de ensamblado. La división de montaje se pone en contacto con un proveedor para comprar dichos monitores de computadora. Este proveedor ofrece un servicio web a través del que los clientes pueden realizar sus pedidos. El pedido incluye el número de producto de los monitores requeridos y la cantidad necesaria. La respuesta del servicio web consiste en indicar si se puede satisfacer dicho pedido de manera inmediata o no. En este último caso, el servicio se encarga de indicar cuándo volverá a haber stock disponible. El diagrama de montaje que se puede observar en la Figura 8 incluye todos los detalles sobre esto.

Figura 8. Diagrama de montaje del proveedor del servicio web
Diagrama de montaje del proveedor del servicio web

En la Figura 8, el componente ComputerMonitorVendor se exporta usando enlaces WebService. El componente AssemblyDivision coloca el pedido a través de ComputerMonitorVendorImport, que llama al servicio web. El pedido es una secuencia de solicitud-respuesta asíncrona con devolución de llamada. El calificador store-and-forward se configura en ComputerMonitorVendorImport, como se puede observar en la Figura 9.

Figura 9. Store-and-forward configurado en la importación del servicio web
Store-and-forward configurado en la importación del servicio web

Es posible que haya inconvenientes relacionados con problemas de red u otros tipos de problemas dentro del entorno del proveedor, lo que puede ocasionar que el servicio web no esté disponible. Como el calificador store-and-forward se configura en ComputerMonitorVendorImport y se lo llama de manera asíncrona desde el componente AssemblyDivision, los pedidos se guardan en la cola de importación. Sólo el primer pedido, que fracasa, genera un evento fallido. Todos los pedidos subsiguientes se guardan en la cola de importación. De esta forma, la división de montaje puede continuar generando pedidos, sin importar si el servicio web del proveedor está disponible o no. Cuando el servicio web vuelve a estar disponible, se pueden volver a enviar los pedidos guardados usando el widget Store and Forward en Business Space. El componente ComputerMonitorVendor procesará estas solicitudes y se enviarán las respuestas correspondientes al componente AssemblyDivision.

Para ejecutar la muestra, haga lo siguiente:

  1. Descargue el archivo Example2.zip, que viene incluido en el archivo samples.zip. PI tiene dos módulos, AssemblyService y ComputerMonitorVendorService, y una biblioteca.
  2. Importe la muestra a Integration Developer. Cambie el número de puerto en el punto final del servicio web por un valor adecuado.
  3. Implante la muestra y pruebe el componente AssemblyDivision usando el cliente de prueba de Integration Devloper.
  4. Detenga el módulo ComputerMonitorVendorService en Integration Developer y envíe una solicitud. Se generará un evento fallido con el valor calificador de evento como “Initiated store” (Guardado iniciado).
  5. Envíe dos pedidos más. Estos pedidos no generarán eventos fallidos. Estas solicitudes se guardarán en la cola de importación del servicio web, como se puede observar en la Figura 10.
    Figura 10. Pedidos guardados en la cola de importación del servicio web
    Pedidos guardados en la cola de importación del servicio web
  6. Abra el widget Store and Forward en Business Space y observe que el estado del punto de control de servicio (ComputerMonitorVendorService_Unavailable) sea “Storing” (Guardando). Vea el Paso 11 en el Escenario 1 para mayor información sobre cómo abrir Business Space y visualizar el widget Store and Forward.
  7. Ejecute el módulo ComputerMonitorVendorService y vuelva a colocar el estado en “Forward” (Reenviar) en el widget Store and Forward.
  8. Vuelva a enviar el evento fallido que se generó en un principio.
  9. Observe los mensajes salientes en el archivo SystemOut.log.

Escenario 3: Store-and-forward en una exportación SCA

Hasta ahora, le hemos presentado la función store-and-forward en importaciones con enlaces de mensajes y enlaces del servicio web. De manera similar, usted puede configurar el calificador store-and-forward en una exportación SCA (aunque esto no es posible en otras exportaciones). Cuando se la configura en una exportación SCA, si la exportación llama un componente SCA de manera sincrónica y el componente arroja una excepción de tiempo de ejecución, la primera solicitud fallida generará un evento fallido y todas las solicitudes subsiguientes se guardarán en la cola de exportación SCA. La Figura 11 le muestra un escenario de aplicación a modo de ejemplo con una secuencia de llamadas que desencadenan el guardado. Tenga en cuenta que, de manera predeterminada, el tipo de interacción preferido para las importaciones o las exportaciones SCA es sincrónico. Para poder desencadenar el guardado, el tipo de interacción preferido para las importaciones o las exportaciones SCA debe ser "asincrónico". Usted puede simular este escenario fácilmente usando pasos muy similares a los que se siguen en los escenarios anteriores.

Figura 11. Calificador store-and-forward en la exportación SCA
Calificador store-and-forward en la exportación SCA

El paso 6 que se puede observar en la Figura 11 guarda las solicitudes en la cola de exportación.

Escenario 4: Store-and-forward con exportaciones asincrónicas (JMS, MQ, MQJMS, GenericJMS)

Las exportaciones de mensajería llaman a sus componentes correspondientes de manera asíncrona. Por lo tanto, cuando el calificador store-and-forward se configura en el componente y el componente experimenta errores de tiempo de ejecución, se desencadena el guardado y los mensajes se guardan en la cola del componente. La Figura 12 le muestra un escenario de aplicación a modo de ejemplo con una secuencia que desencadena el guardado. Usted puede simular este escenario con gran facilidad usando pasos muy similares a los que se siguen en los escenarios anteriores.

Figura 12. Calificador store-and-forward en el componente SCA
Calificador store-and-forward en el componente SCA

El paso 4 que se puede observar en la Figura 12 guarda las solicitudes en la cola del componente.

Escenario 5: Función store-and-forward con múltiples interfaces y referencias

En este escenario, el calificador store-and-forward se configura en un componente SCA, que llama dos servicios de manera sincrónica. Estos servicios son servicios web. Si alguno de estos servicios no está disponible, el componente recibe un error de tiempo de ejecución y genera un evento fallido. Todas las solicitudes subsiguientes se guardan en la cola del componente. Tenga en cuenta que, aunque sólo uno de los servicios no está disponible (mientras que el otro sí lo está), se guardan todas las solicitudes que se envían al componente. El escenario de negocios y la muestra se explican a continuación.

Una compañía fabricante de computadoras requiere monitores de computadora para las tareas de ensamblado. Por ello, se pone en contacto con un proveedor que vende monitores de computadora. Este proveedor ofrece dos servicios que se ocupan del procesamiento de pedidos. El primer servicio es ComputerMonitorVendorService, que acepta pedidos y devuelve información sobre si el producto solicitado está disponible o no en la cantidad requerida. De estar disponible en la cantidad requerida, el proveedor permite el pago con tarjeta de crédito. PaymentGatewayService se ocupa de proveer el servicio de pago.

Ambos servicios se ofrecen a través de servicios web. La compañía fabricante de computadoras primero tiene que verificar la disponibilidad del producto en la cantidad solicitada usando ComputerMonitorVendorService. Luego de esto, debe ponerse en contacto con PaymentGatewayService para efectuar el pago del monto correspondiente. La compañía fabricante de computadoras ha implantado ComputerMonitorBuyerService, que llama a los servicios ComputerMonitorVendorService y PaymentGatewayService de manera sincrónica en la secuencia necesaria para colocar los pedidos y pagar el monto correspondiente si el producto está disponible en la cantidad solicitada. La Figura 13 le muestra el diagrama de montaje correspondiente.

Figura 13. Diagrama de montaje de ComputerMonitorBuyerService
Diagrama de montaje de ComputerMonitorBuyerService

El calificador store-and-forward se configura en el componente ComputerMonitorBuyer, como se puede observar en la Figura 14.

Figura 14. Configuración de store-and-forward en el componente
Configuración de store-and-forward en el componente

Si uno de estos servicios, ComputerMonitorVendorService o PaymentGatewayService, no está disponible, se guardan todas las solicitudes que se envían a ComputerMonitorBuyer. Cuando el servicio vuelve a estar disponible, las solicitudes guardadas se vuelven a enviar a ambos servicios en la secuencia correspondiente. Por ejemplo, si PaymentGatewayService no está disponible, ComputerMonitorBuyer llamará a ComputerMonitorVendorService para averiguar si el stock correspondiente al pedido en cuestión está disponible o no.

Sin embargo, la llamada a PaymentGatewayService fracasa. Esto genera un evento fallido y se da comienzo al guardado. Por ende, se guardan todos los pedidos subsiguientes. Cuando PaymentGatewayService vuelve a estar disponible, se vuelven a enviar los pedidos. La muestra incluye Test.jsp, que usted puede usar para enviar pedidos al componente ComputerMonitorBuyer. Test.jsp llama a ComputerMonitorBuyer de manera asíncrona con la solicitud de pedido. La solicitud en cuestión es una operación unidireccional.

Store-and-forward con procesos de negocios prolongados

En este ejemplo, si ComputerMonitorBuyer es un proceso BPEL prolongado, la configuración de store-and-forward no funcionará. Esto significa que los procesos prolongados no soportan la función store-and-forward.

Para ejecutar la muestra, haga lo siguiente:

  1. Descargue el archivo Example3.zip, que se encuentra en el archivo samples.zip, e impórtelo a Integration Developer.
  2. Implante los módulos en el servidor de prueba. Modifique los números de puerto en los puntos finales del servicio web de manera apropiada.
  3. Acceda a Test.jsp, que se encuentra en el proyecto WebClient. Haga clic derecho en dicho archivo y seleccione Run as (Ejecutar como) > Run on server (Ejecutar en el servidor). Ingrese los valores de entrada como se lo puede observar en la Figura 15.
    Figura 15. Valores de entrada ingresados a través de Test.jsp
    Valores de entrada ingresados a través de Test.jsp
  4. En SystemOut.logs, observe los siguientes datos de salida:
    Inventory status=Available Available
        date=Today Computer monitor details=IBM Monitor Payment status=PAYMENT
        DONE Payment details=CREDIT CARD ACCEPTED
  5. Detenga el módulo PaymentGatewayService.
  6. Reenvíe la misma solicitud, como se puede observar en la Figura 15.
  7. Se generará un evento fallido, que iniciará el guardado.
  8. Envíe otra solicitud, como se puede observar en la Figura 16.
    Figura 16. Valores de entrada ingresados a través de Test.jsp
    Valores de entrada ingresados a través de Test.jsp
  9. Envíe otra solicitud, como se puede observar en la Figura 17.
    Figura 17. Valores de entrada ingresados a través de Test.jsp
    Valores de entrada ingresados a través de Test.jsp
  10. Verifique que no se generen eventos fallidos, pero que las solicitudes se guarden en la cola del componente, como se puede observar en la Figura 18.
    Figura 18. Solicitudes guardadas en la cola del componente
    Solicitudes guardadas en la cola del componente
  11. Diríjase al widget Store and Forward y verifique que el punto de control de servicio ComputerMonitorVendorService_Unavailable se encuentre en el estado “Storing” (Guardando).
  12. Ejecute el módulo PaymentGatewayService y vuelva a colocar el estado en "Forwarding" (Reenviando) en el widget Store and Forward.
  13. Vuelva a enviar el evento fallido creado en un principio.

Especificación de excepciones en la configuración de store-and-forward

En esta sección, se discute la especificación de excepciones en la configuración de store-and-forward. Vea Configuración de la función store-and-forward para aplicaciones para mayor información sobre la especificación de excepciones.

EmployeeServiceComponent llama a EmployeeDetailsServiceComponent para recuperar los detalles de un empleado determinado con el número de empleado (Empno) correspondiente. La invocación del servicio es una invocación sincrónica por medio de la importación SCA y la exportación SCA. Usted podrá observar los datos de salida en el archivo SystemOut.log. El calificador store-and-forward se configura en EmployeeServiceComponent. El módulo EmployeeService incluye la clase RuntimeException1 personalizada, que es una subclase de java.lang.RuntimeException.

Si el Empno no es {1, 2, 3, 4, 5, 6}, se arrojará “RuntimeException1” en EmployeeDetailsServiceComponent. Test.jsp llama a EmployeeServiceComponent de manera asíncrona. Ilustraremos cómo funciona store-and-forward con las diversas opciones en la especificación de excepciones. Importe el archivo Example4.zip, que se incluye en el archivo samples.zip, a Integration Developer y siga las instrucciones provistas en las siguientes secciones.

ServiceRuntimeException en el calificador store-and-forward

  1. La aplicación descargada tendrá configurado el calificador store-and-forward en EmployeeServiceComponent, como se puede observar en la Figura 19.
    Figura 19. ServiceRuntimeException especificada para store-and-forward
    ServiceRuntimeException especificada para store-and-forward
  2. Implante la aplicación en el servidor de prueba e invoque el flujo de solicitud usando Test.jsp. Test.jsp está incluido en el proyecto EmployeeServiceWebClient. Haga clic derecho en el archivo JSP y seleccione Run as > Run on server. Verifique que el flujo de solicitud funcione correctamente.
  3. Detenga el módulo EmployeeDetailsService y envíe una solicitud. Se generará un evento fallido y se guardarán todas las solicitudes subsiguientes.
  4. Ejecute EmployeeDetailsService y reenvíe las solicitudes usando el widget Store and Forward y vuelva a reenviar el evento fallido.
  5. Luego de ejecutar el módulo EmployeeDetailsService, envíe una solicitud a través de Test.jsp con Empno 10. EmployeeDetailsService arrojará una “RuntimeException1”. La RuntimeException1 estará incluida en ServiceRuntimeException, que está configurada en el calificador store-and-forward. Por lo tanto, se generará un evento fallido y se guardarán todas las solicitudes subsiguientes.

RuntimeException1 en el calificador store-and-forward

  1. Modifique el calificador store-and-forward con RuntimeException1, como se puede observar en la Figura 20.
    Figura 20. RuntimeException1 especificada para store-and-forward
    RuntimeException1 especificada para store-and-forward
  2. Vuelva a implantar la aplicación con la modificación anterior y pruebe que el flujo de solicitud funcione correctamente usando Test.jsp. Detenga el módulo EmployeeDetailsService y envíe un flujo de solicitud. Se generará un evento fallido que no desencadenará el guardado. Esto ocurre porque RuntimeException1 está configurada para el calificador store-and-forward. Sin embargo, la no disponibilidad de EmployeeDetailsService arroja una ServiceRuntimeException, que no está configurada para store-and-forward.
  3. Ejecute el módulo EmployeeDetailsService y reenvíe el evento fallido.
  4. Envíe una solicitud con Empno 11. Esto hará que EmployeeDetailsServiceComponent arroje una RuntimeException1, se generará un evento fallido y se desencadenará el guardado.

RuntimeException1 en el calificador store-and-forward con mensaje de excepción

  1. Modifique el calificador store-and-forward, como se puede observar en la Figura 21.
    Figura 21. Excepción y mensaje de excepción en store-and-forward
    Excepción y mensaje de excepción en store-and-forward
  2. Observe la propiedad “Message to match” (Mensaje a corresponder). Ahora cuenta con un valor “This is RuntimeException1” (Ésta es RuntimeException1), que es el mensaje de texto que incluye RuntimeException1 cuando se la arroja en EmployeeDetailsServiceComponent.
  3. Implante la aplicación y envíe una solicitud usando Test.jsp. Verifique si la solicitud se ejecuta de manera correcta. Envíe una solicitud con Empno 11. Esto generará un evento fallido y se desencadenará el guardado. Esto ocurre porque tanto la excepción como el mensaje de excepción son coincidentes.
  4. Modifique la propiedad “Message to match” (Mensaje a corresponder) y coloque RuntimeException1 Message. Vuelva a implantar la aplicación y envíe una solicitud con Empno 11. Esto generará un evento fallido, pero no se desencadenará el guardado, ya que el mensaje de excepción no se condice con lo especificado en el calificador store-and-forward.

Escenario 4: Configuración de la cadena de excepciones en el calificador store-and-forward

  1. Modifique el calificador store-and-forward en EmployeeServiceComponent, como se puede observar en la Figura 22.
    Figura 22. Configuración de la cadena de excepciones en store-and-forward
    Configuración de la cadena de excepciones en store-and-forward
  2. Observe el valor de la Exception chain (Cadena de excepciones). Se lo configuró como “Match only the top level exception” (Sólo corresponder con la excepción de más alto nivel). La excepción sigue siendo RuntimeException1.
  3. Envíe un flujo de solicitud con Empno 11. Esto hará que EmployeeServiceComponent arroje una RuntimeException1. Pero RuntimeException1 está incluida en la excepción de más alto nivel ServiceRuntimeException, como se puede observar en la Figura 23. Como se estableció que la configuración de store-and-forward sólo debe coincidir con la excepción de más alto nivel, se genera un evento fallido, pero no se desencadena el guardado. De manera similar, usted puede probar los otros valores de la cadena de excepciones. Además, usted también puede hacer que coincidan tipos que se heredan desde este tipo de opción con una aplicación simple.
    Figura 23. Seguimiento de pila de excepciones en el evento fallido
    Seguimiento de pila de excepciones en el evento fallido

Conclusión

Este tutorial describe cómo configurar el calificador store-and-forward en diversos componentes (como, por ejemplo, la importación, la exportación y el componente SCA). Las aplicaciones de muestra le mostraron cómo funciona store-and-forward y dónde se desencadena el guardado de mensajes. Además, se le brindó información sobre cómo transmitir los mensajes guardados usando los widgets del espacio de negocios. También se ilustró cómo las excepciones desencadenan el guardado con una aplicación de muestra abarcativa. La función store-and-forward resulta muy útil al momento de contribuir para que las aplicaciones regulen el flujo de solicitudes de aplicación cuando los servicios están o no disponibles.


Descargar

DescripciónNombretamaño
Code samplessamples.zip643KB

Recursos

Aprender

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=WebSphere
ArticleID=588259
ArticleTitle=Uso de la función store-and-forward (guardar y reenviar) en WebSphere Process Server V7.0
publish-date=08032011