A amostra Resposta de Pedido Coordenado é um aplicativo de amostra do fluxo de mensagens baseado no cenário de um aplicativo contemporâneo e estabelecido que se comunica através do uso de mensagens do WebSphere MQ em um padrão de processamento de pedido/resposta. O aplicativo contemporâneo utiliza mensagens XML autodefinidas e emite uma mensagem de pedido. O aplicativo estabelecido utiliza mensagens CWF (Custom Wire Format). Ele recebe uma mensagem de pedido, a processa e entrega uma mensagem de resposta. Para os aplicativos se comunicarem com êxito, os formatos da mensagem devem ser transformados para as mensagens de pedido e resposta.
A amostra demonstra como a conversão pode ser atingida entre as mensagens XML autodefinidas e as mensagens CWF. Além disso, a amostra demonstra como é possível armazenar informações em um fluxo de mensagens e recuperá-las em outro. Na amostra há uma necessidade de preservar ReplyToQ e ReplyToQMgr da mensagem de pedido inicial para uso quando a mensagem de resposta correspondente for recebida. No cenário, uma mensagem do WebSphere MQ é utilizada para armazenar os detalhes.
O processamento na amostra consiste em três fluxos de mensagens e um conjunto de mensagens. Os fluxos de mensagens são:
Lê uma mensagem Pedido de um aplicativo que está apto a gravar a mensagem de teste para essa amostra, transforma a carga útil do XML em CWF e grava uma mensagem de saída que contém uma carga útil de formato CWF. Essa mensagem é lida e processada pelo fluxo de mensagens Resposta de Backend, que simula um aplicativo estabelecido.
Simula um aplicativo estabelecido que recebe uma mensagem do WebSphere MQ que contém uma carga útil no formato CWF, executa algum processamento no conteúdo e grava uma mensagem de resposta do WebSphere MQ contendo uma carga útil no formato CWF.
Lê as mensagens de resposta do fluxo de mensagens Resposta de Backend, transforma a carga útil de CWF para XML e grava uma mensagem de saída que contém uma carga útil de formato XML. Essa mensagem é lida e processada pelo aplicativo de origem.
O conjunto de mensagens MSET de Amostra com a definição de mensagem SaleListMessage é utilizado na conversão da mensagem do formato XML para CWF na seção de pedido do processamento e na conversão de CWF para XML na seção de resposta do processamento.
Os detalhes dos fluxos de mensagens e o processamento que eles executam estão descritos abaixo.
O fluxo de mensagens Pedido executa o seguinte processamento:
O fluxo de mensagens Pedido consiste em um dos seguintes nós:
O nó MQInput GetRequestMsg lê a mensagem XML. Como a mensagem que chega está em um formato XML autodefinido, não existe necessidade de especificar um conjunto de mensagens ou formato para ela ser analisada com êxito.
O subfluxo StoreOriginalMQMD_Sub encapsula o armazenamento dos valores ReplyToQ e ReplyToQMgr em uma mensagem do WebSphere MQ. Isso é feito por duas razões: Primeiro, para permitir que o processamento lógico seja facilmente reutilizado em outros fluxos de mensagens e, segundo, para permitir que implementações alternativas sejam substituídas. Por exemplo, uma implementação alternativa que utiliza um nó de banco de dados poderá ser criada.
O nó Compute TransformAndSetReplyTo executa as seguintes ações:
O nó MQOutput OutputRequestMsg grava a mensagem de saída do WebSphere MQ.
O fluxo de mensagens Resposta de Backend executa o seguinte processamento:
O fluxo de mensagens Resposta de Backend consiste em um dos seguintes nós:
O nó MQInput GetRequestMsg lê a mensagem CWF. O conjunto de mensagens, o formato e o domínio que são necessários para analisar a mensagem que chega são especificados no nó MQInput.
O nó Compute Backend_Computation executa as seguintes ações:
O nó MQOutput PutReplyMsg grava a mensagem de saída do WebSphere MQ.
O fluxo de mensagens Resposta executa o seguinte processamento:
O fluxo de mensagens Resposta consiste em um dos seguintes nós:
O nó MQInput GetBackendReply lê a mensagem CWF. O conjunto de mensagens, o formato e o domínio que são necessários para analisar a mensagem que chega são especificados no nó MQInput.
O nó Compute MapToRequestor executa as seguintes ações:
O subfluxo RestoreOriginalMQMD_Sub encapsula a recuperação dos valores ReplyToQ e ReplyToQMgr. Ele lê a mensagem do WebSphere MQ que contém os valores de ReplyToQ e ReplyToQMgr que foram especificados na mensagem de pedido original e os copia para a mensagem de resposta. Ele faz a leitura utilizando o nó MQGet. O nó MQGet está configurado para selecionar a mensagem correspondente por CorrelId e para copiar o MQMD do pedido original para o MQMD da mensagem que está sendo processada. Isso é feito para direcionar a mensagem de resposta do aplicativo estabelecido para o aplicativo do solicitante correto. O nó MQGet também recupera a carga útil da mensagem do WebSphere MQ que foi utilizada para armazenar os valores originais de ReplyToQ e ReplyToQMgr.
O nó MQOutput PutOriginalReply grava a mensagem de saída do WebSphere MQ.
A mensagem de teste utilizada na amostra Resposta de Pedido Coordenado é uma mensagem XML simples que contém detalhes de fatura para um cliente. Durante a execução da amostra, essa mensagem XML é convertida para o formato CWF. O valor do campo CompletionTime é o único valor a ser alterado durante a execução da amostra. A mensagem é mostrada abaixo.
<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>00.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>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.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.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>