Acerca del ejemplo Solicitud y respuesta coordinadas con memoria caché global

El ejemplo Solicitud y respuesta coordinadas con memoria caché global contiene la aplicación Respuesta coordinada con memoria caché globaly la aplicación Solicitud y respuesta coordinadas de fondo. Las dos aplicaciones tienen una referencia de biblioteca a la Biblioteca de Solicitud y respuesta coordinadas.

El ejemplo Solicitud y respuesta coordinadas con memoria caché global demuestra el uso de una memoria caché global para almacenar información para utilizarla en dos flujos de mensajes, un flujo de solicitud y uno de respuesta, que se ejecutan en la aplicación Solicitud y respuesta coordinadas con memoria caché global. Un flujo de mensajes BackendReplyApp que se ejecuta en la aplicación Solicitud y respuesta coordinadas de fondo simula una aplicación establecida en este ejemplo. Las secciones siguientes describen los detalles de los flujos de mensajes y el proceso que llevan a cabo.

Flujo de mensajes de solicitud

El flujo de mensajes de solicitud realiza este proceso:

  1. El flujo lee un mensaje de WebSphere MQ que contiene una carga de trabajo XML.
  2. Un nodo FlowOrder controla el orden del proceso.
  3. El flujo realiza primero estas acciones:

    El flujo realiza a continuación la siguiente acción:

El flujo de mensajes Request contiene los dos nodos siguientes:

El flujo de mensajes de solicitud contiene un nodo MQInput, un nodo FlowOrder, un nodo JavaCompute, un nodo de subflujo, un nodo Compute y un nodo MQOutput.

El nodo MQInput GetRequestMsg lee el mensaje XML. El mensaje entrante es en formato XML autodefinido, para que no tenga que especificar ningún conjunto de mensaje o formato para el mismo para que se analice satisfactoriamente.

El nodo FlowOrder controla el orden del proceso.

En primer lugar, el subflujo TransformXMLtoMRM_Sub copia las cabeceras del mensaje de entrada en el árbol de mensaje de salida, y convierte el mensaje de entrada del formato XML a CWF estableciendo el conjunto de mensajes, el tipo y el formato para el mensaje de salida.

El nodo SetReplyTo Compute completa las acciones siguientes:

  1. Copia las cabeceras de mensaje del mensaje de entrada al árbol de mensajes de salida
  2. Copia el cuerpo del mensaje de entrada en el árbol de mensajes de salida.
  3. Establece la ReplyToQ para que el nuevo mensaje sea el de la cola de entrada para el flujo del mensaje de respuesta.

El nodo MQReply OutputRequestMsg graba el mensaje de salida de WebSphere MQ.

A continuación, el nodo Java Compute StoreOriginalMQMD guarda el MQMD en la memoria caché global, manteniendo ReplyToQ y ReplyToQMgr para su uso en el flujo de respuesta. El MsgId se utiliza como clave para almacenar datos en la memoria caché global para su posterior recuperación. Los datos se colocan en la memoria caché una vez que el flujo de mensajes principal se ha procesado satisfactoriamente.

Flujo de mensajes Backend Reply

El flujo de mensajes de respuesta de fondo completa este proceso:

  1. Lee un mensaje de WebSphere MQ.
  2. Añade la hora en que se modificó el mensaje a la carga útil del mensaje.
  3. Graba un mensaje de WebSphere MQ.

El flujo de mensajes Backend Reply contiene los nodos siguientes:

El flujo de mensajes Backend Reply contiene un nodo MQInput, un nodo Compute y un nodo MQReply.

El nodo MQInput GetRequestMsg lee el mensaje CWF. El formato, el conjunto de mensajes y el dominio necesarios para analizar el mensaje entrante se especifican en el nodo MQInput.

El nodo Compute Modify_CompletionTime completa estas acciones:

  1. Copia todo el mensaje de entrada en el árbol de mensajes de salida.
  2. Obtiene la hora actual de IBM Integration Bus y le da un nuevo formato
  3. Añade el tiempo de nuevo formato al árbol de mensajes de salida.

El nodo PutReplyMsg MQReply escribe el mensaje de salida WebSphere MQ, copiando el MsgId del mensaje de solicitud en el campo CorrelId de la respuesta.

Flujo de mensajes de respuesta

El flujo de mensajes de respuesta completa este proceso:

  1. El flujo lee un mensaje de WebSphere MQ que contiene un mensaje en formato CWF.
  2. El flujo convierte el mensaje en el formato XML equivalente.
  3. Un nodo JavaCompute obtiene los detalles ReplyToQ y ReplyToQMgr del mensaje de solicitud original recuperando el flujo de solicitud MQMD de la memoria caché global.
  4. El flujo crea un mensaje de WebSphere MQ que contiene el mensaje transformado y los valores ReplyToQ y ReplyToQMgr recuperados.
  5. El flujo elimina los datos MQMD de la memoria caché global.

El flujo de mensajes Reply contiene los nodos siguientes:

El flujo de mensajes de respuesta contiene un nodo MQInput, un nodo de subflujo, dos nodos JavaCompute y un nodo MQReply.

El nodo MQInput GetBackendReply lee el mensaje CWF. El formato, el conjunto de mensajes y el dominio necesarios para analizar el mensaje entrante se especifican en el nodo MQInput.

El subflujo TransformMRMtoXML_Sub copia las cabeceras de mensaje del mensaje de entrada en el árbol de mensajes de salida y convierte el mensaje de entrada del formato CWF a XML.

El nodo JavaCompute RestoreOriginalMQMD recupera el mensaje de solicitud original MQMD, que contiene los valores ReplyToQ y ReplyToQMgr, de la memoria caché global. El nodo utiliza el CorrelId (que contiene el ID de mensaje de solicitud original) como clave. El MQMD existente en el mensaje se sustituye por el MQMD de solicitud original.

El nodo MQReply PutOriginalReply graba el mensaje de salida de WebSphere MQ.

RemoveMQMDFromCache elimina los datos MQMD del mensaje de memoria caché global. La memoria caché se borra una vez que el flujo de mensajes principal ha completado el proceso satisfactoriamente.

Mensaje de prueba

El mensaje de prueba utilizado en el ejemplo Solicitud y respuesta coordinadas con memoria caché global es un simple mensaje XML que contiene detalles de facturación para un cliente. Este ejemplo convierte el mensaje XML en el formato CWF. El valor del campo CompletionTime es el único valor modificado por el ejemplo. El mensaje se muestra en el ejemplo siguiente:

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36</Price>
<Quantity>01</Quantity>
</Item>
<Balance>80</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

Volver a la página inicial del ejemplo