Acerca del ejemplo Solicitud y respuesta coordinadas de JMS

El ejemplo Solicitud y respuesta coordinadas de JMS contiene la Aplicación de Solicitud y respuesta coordinadas de JMS. Esta aplicación tiene una referencia de biblioteca a la Biblioteca de Solicitud y respuesta coordinadas.

El ejemplo Solicitud y respuesta coordinadas de JMS muestra cómo utilizar el nodo JMSReceive. En las siguientes secciones se describen los flujos de mensajes y el procesamiento que llevan a cabo.

Flujo de mensajes de solicitud

El flujo de mensajes Request realiza el siguiente procesamiento:

  1. Lee un mensaje de JMS que contiene una carga útil XML
  2. Guarda los detalles de ReplyToQ originales en un mensaje de JMS independiente para la recuperación posterior por parte del flujo de mensajes de respuesta
  3. Convierte el mensaje en el formato CWF equivalente
  4. Crea un mensaje de JMS que contiene el mensaje transformado
  5. Establece los detalles de ReplyToQ para que sean la entrada del flujo de mensajes de respuesta
  6. Envía el mensaje al flujo de mensajes Backend Reply

El flujo de mensajes Request contiene los dos nodos siguientes:

El flujo de mensajes Request contiene un nodo JMSInput, dos nodos de subflujo, un nodo Compute y un nodo JMSOutput.

El nodo GetRequestMsg JMSInput lee el mensaje XML. El mensaje de entrada tiene un formato XML autodefinido, por lo que no es necesario especificar ningún conjunto de mensajes o formato para que se analice correctamente.

El subflujo StoreOriginalJMSHeader_Sub encapsula el almacenamiento de los valores de ReplyToQ y Correlation ID en un mensaje de JMS. El ID del mensaje se copia en el ID de correlación. Esta encapsulación se hace por dos motivos: para permitir que la lógica del proceso pueda reutilizarse fácilmente en otros flujos de mensajes y para permitir la sustitución de implementaciones alternativas. Por ejemplo, se puede crear una implementación alternativa que use un nodo de base de datos.

El subflujo TransformXMLtoMRM_Sub copia las cabeceras de mensaje del mensaje de entrada al árbol de mensajes de salida y realiza la conversión del mensaje de entrada desde el formato XML a CWF estableciendo el conjunto de mensajes, el tipo y el formato para el mensaje de salida.

El nodo SetReplyTo_CorrelID Compute realiza las acciones siguientes:

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

El nodo OutputRequestMsg JMSOutput escribe el mensaje de salida de JMS.

Flujo de mensajes Backend Reply

El flujo de mensajes Backend Reply realiza los siguientes procesos:

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

El flujo de mensajes Backend Reply contiene los nodos siguientes:

El flujo de mensajes Backend Reply contiene un nodo JMSInput, un nodo Compute un nodo JMSReply.

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

El nodo Compute Modify_CompletionTime realiza las siguientes acciones:

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

El nodo PutReplyMsg JMSReply escribe el mensaje de salida de JMS.

Flujo de mensajes de respuesta

El flujo de mensajes de respuesta ejecuta el siguiente proceso:

  1. Lee un mensaje de JMS que contiene un mensaje en formato CWF.
  2. Convierte el mensaje en el formato XML equivalente.
  3. Obtiene los detalles de ReplyToQ del mensaje de solicitud original leyendo el mensaje de JMS que se utilizó para almacenar esta información en el flujo de mensajes Request. Esta acción la lleva a cabo el nodo JMSReceive.
  4. Crea un mensaje de JMS que contiene el mensaje transformado y el valor de ReplyToQ recuperado.

El flujo de mensajes Reply consta de los siguientes nodos:

El flujo de mensajes Reply contiene un nodo JMSInput, dos nodos de subflujo y un nodo JMSReply.

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

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 flujo RestoreOriginalJMSHeader_sub contiene el nodo JMSReceive.

El subflujo RestoreOriginalJMSHeader_Sub encapsula la recuperación de los valores de ReplyToQ y Correlation ID. Utiliza un nodo JMSReceive para leer el mensaje de JMS que contiene los valores de ReplyToQ y Correlation ID que se han especificado en el mensaje de solicitud original y los copia en el mensaje de respuesta. En el flujo existe un nodo Compute antes del nodo JMSReceive. En el nodo Compute, la propiedad Correlation ID del nodo JMSReceive se sustituye en la variable de entorno por el valor de Correlation ID del mensaje de respuesta. El nodo JMSReceive está configurado para seleccionar el mensaje correspondiente según su Correlation ID, y para copiar la JMSHeader de solicitud original en la JMSHeader del mensaje que se procesa para dirigir el mensaje de respuesta de la aplicación establecida en la aplicación de solicitante correcta. El nodo JMSReceive también recupera la carga útil del mensaje de JMS que se utilizó para almacenar los valores originales de ReplyToQ.

Para obtener más información sobre el nodo JMSReceive, consulte Nodo JMSReceive en la documentación de WebSphere Message Broker.

El nodo PutOriginalReply JMSReply escribe el mensaje de salida de JMS.

Mensaje de prueba

El mensaje de prueba utilizado en el ejemplo Solicitud y respuesta coordinadas es un mensaje XML simple 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