Sobre o Fluxo de Mensagens XML_Reservation
O fluxo de mensagens XML_Reservation reserva assentos no vôo listado na mensagem de entrada e gera mensagens de resposta para os passageiros, para confirmar suas
reservas. As mensagens de resposta são colocadas na fila XML_RESERVATION_OUT.
A figura a seguir mostra o fluxo de mensagens XML_Reservation.

A tabela a seguir lista os tipos de nós que são utilizados no fluxo de mensagens XML_Reservation.
Tipo de Nó |
Nome do Nó |
MQInput |
XML_RESERVATION_IN |
Banco de Dados |
UpdateFlightTable |
Compute |
UpdatePassengerTable; BuildSingleMessage; PropagateMultipleMessages |
Filter |
MultipleOrSingleMessage
|
Throw |
InvalidRequest |
MQOutput |
XML_RESERVATION_FAIL; XML_RESERVATION_OUT |
Trace |
LogException |
Para obter informações adicionais, leia sobre os nós no fluxo de mensagens XML_Reservation na documentação do WebSphere Message Broker. Para consultar o ESQL utilizado nesse fluxo de mensagens, consulte Criando o fluxo de mensagens XML_Reservation.
O fluxo de mensagens XML_Reservation executa as seguintes ações:
- O nó XML_RESERVATION_IN obtém a mensagem de entrada da fila XML_RESERVATION_IN e identifica a mensagem como sendo uma mensagem XML autodefinida.
- O nó XML_RESERVATION_IN analisa completamente a mensagem utilizando o analisador XML, então, transmite a mensagem de entrada, através do terminal de Saída, ao nó UpdateFlightTable. Como alternativa, se houver uma exceção lançada no recebimento de dados e a mensagem for retrocedida, o nó transmitirá a mensagem de entrada, através do terminal Capturar, ao nó XML_RESERVATION_FAIL, que transmite a mensagem para o nó LogException.
O nó LogException, então, grava o erro no registro de erros local, que é o Visualizador de Eventos no Windows ou o syslog no Linux.
- O nó UpdateFlightTable verifica a tabela XMLFLIGHTTB para ver se os assentos solicitados estão disponíveis, então, atualiza a tabela XMLFLIGHTTB para mostrar que os assentos estão sendo alocados e agora menos assentos estão disponíveis.
- O nó UpdateFlightTable insere o valor de RESERVATIONSEQNO da tabela XMLFLIGHTTB em uma Variável de Ambiente, que é transmitida para o nó UpdatePassengerTable.
O nó UpdatePassengerTable também coloca em uma Variável de Ambiente o número de assentos restantes em cada classe.
- O nó UpdateFlightTable transmite a mensagem de entrada, através do terminal Saída, para o nó UpdatePassengerTable.
- O nó UpdatePassengerTable obtém a lista de passageiros da mensagem de entrada e os dados do vôo na árvore Ambiente e inclui os nomes e informações sobre reservas dos novos passageiros na tabela XMLPASSENGERTB no banco de dados RESERVDB.
- O nó UpdatePassengerTable cria e designa um número de reserva exclusivo a cada passageiro. O número de reserva é composto de:
FlightNumber + FlightDate + RESERVATIONSEQNO
O valor de RESERVATIONSEQNO é obtido da variável de Ambiente recebida do nó UpdateFlightTable. Por exemplo, o Número de Reserva de Mary Smith é CA937200305251. O nó UpdateFlightTable atualiza a tabela XMLPASSENGERTB com esses números de reserva.
- O nó UpdatePassengerTable transmite a mensagem de entrada, através do terminal Saída, para o nó MultipleOrSingleMessage.
- O nó MultipleOrSingleMessage verifica o campo de mensagem de entrada chamado Request e determina onde transmitir a mensagem:
- O campo Pedido na primeira mensagem de entrada XML_Reservation (reservation1.enqueue)
contém o valor 'M', de modo que o nó transmite a mensagem através do terminal True para o nó PropagateMultipleMessages.
- O campo Pedido na segunda mensagem de entrada XML_Reservation (reservation2.enqueue)
contém o valor 'S', de modo que o nó transmite a mensagem através do terminal False para o nó BuildSingleMessage.
- Se o nó não puder determinar o valor do campo Pedido, ele transmitirá
a mensagem, através do terminal Desconhecido, para o nó Invalid Request. O nó InvalidRequest gera uma mensagem de erro que inclui o
Catálogo de Mensagens, o Número da Mensagem e o Texto da Mensagem, todos obtidos da
árvore ExceptionList.
- Se a mensagem for para o nó PropagateMultipleMessages, o nó PropagateMultipleMessages criará uma mensagem de resposta para um dos passageiros listados na mensagem de entrada e, em seguida, transmitirá a resposta, através do terminal Saída, para o nó XML_RESERVATION_OUT. O nó PropagateMultipleMessages cria uma mensagem de resposta como esta para cada passageiro listado na mensagem de entrada.
- Se a mensagem for para o nó BuildSingleMessage, o nó BuildSingleMessage criará uma única mensagem de resposta contendo uma lista dos passageiros e seus números de reserva, então, transmitirá a resposta, através do terminal Saída, para o nó XML_RESERVATION_OUT.
- O nó XML_RESERVATION_OUT coloca as mensagens de resposta na fila XML_RESERVATION_OUT.
As mensagens de entrada para o fluxo de mensagens XML_Reservation manipulam os dados no banco de dados RESERVDB.
Essas manipulações incluem a adição de dados à tabela
XMLPASSENGERTB. Os outros fluxos de mensagens recuperam alguns dos dados armazenados
no banco de dados RESERVDB pelo fluxo de mensagens XML_Reservation. Para que haja dados
suficientes armazenados no banco de dados para os outros fluxos de mensagens consultarem, duas
mensagens de entrada são fornecidas para executar o fluxo de mensagens XML_Reservation. Você deve executar
XML_Reservation com as duas mensagens antes de executar qualquer outro fluxo de
mensagens.
Sugestão de Design: Utilizando um Único Nó Compute
O fluxo de mensagens XML_Reservation tem dois nós separados para atualizar as tabelas XMLFLIGHTTB
e XMLPASSENGERTB no banco de dados RESERVDB:
- UpdateFlightTable (um nó Database)
- UpdatePassengerTable (um nó Compute)
UpdateFlightTable atualiza XMLFLIGHTTB com o número de reservas solicitadas para um
determinado vôo. Ele coloca os detalhes do vôo na árvore Ambiente para transmitir ao nó UpdatePassengerTable. O nó UpdatePassengerTable atualiza XMLPASSENGERTB com os
detalhes dos passageiros que fizeram as reservas e inclui seus
números de reserva exclusivos. Em seguida, o nó inclui os números de
reserva exclusivos dos passageiros na mensagem.
É possível combinar os dois nós em um único nó Compute para aprimorar o
desempenho do fluxo de mensagens.
No entanto, você não pode combiná-los em um único nó Database porque o nó Database não pode fazer alterações na mensagem.
O fluxo de mensagens mostrado aqui utiliza dois nós separados para mostrar o que os nós
Compute e Database podem fazer.
Voltar para Sobre a Amostra Reservas Aéreas