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.
O diagrama 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 de Nó |
MQInput |
XML_RESERVATION_IN |
Banco de Dados |
UpdateFlightTable |
Compute |
UpdatePassengerTable; BuildSingleMessage; PropagateMultipleMessages |
Filter |
MultipleOrSingleMessage
|
Throw |
InvalidRequest |
MQOutput |
XML_RESERVATION_FAIL; XML_RESERVATION_OUT |
Rastrear |
LogException |
Para obter mais informações sobre os nós usados nesta amostra, consulte
Nós integrados 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 totalmente a mensagem usando o analisador
XMLNSC, então transmite a mensagem de entrada através do terminal Out para o nó UpdateFlightTable. Alternativamente,
se uma exceção for produzida por recebimento de dados e a mensagem for retornada, o nó
transmite a mensagem de entrada através do terminal Catch para o nó XML_RESERVATION_FAIL,
que analisa 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 se 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
Out 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
Out 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.mbtest) contém
o valor M, portanto 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.mbtest) contém o valor
S, portanto o nó transmite a mensagem através do terminal False para o nó BuildSingleMessage.
- Se o nó não pode determinar o valor no campo
Pedido, ele transmite a mensagem através do terminal
Unknown 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 vai para o nó PropagateMultipleMessages, o nó PropagateMultipleMessages
cria uma mensagem de resposta para um dos passageiros relacionados na mensagem de
entrada, então transmite a resposta através do terminal Out para o nó XML_RESERVATION_OUT. O
nó PropagateMultipleMessages cria uma mensagem de resposta semelhante para cada
passageiro relacionado na mensagem de entrada.
- Se a mensagem vai para o nó BuildSingleMessage, o nó BuildSingleMessage cria
uma mensagem de resposta única contendo uma lista dos passageiros e seus números de
reserva, então transmite a resposta através do terminal Out 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. As duas mensagens de
entrada são fornecidas para executarem o fluxo de mensagens XML_Reservation, de modo que
haja dados suficientes armazenados no banco de dados para os outros fluxos de mensagem
consultarem.
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)
O nó UpdateFlightTable atualiza XMLFLIGHTTB com o número de reservas requerido
por um vôo particular.
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.
Você pode combinar o dois nós em um único nó de Computador para melhorar o
desempenho do fluxo de mensagens. No entanto, você não pode combiná-los em um único nó Banco de Dados porque o nó Banco de Dados 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 a amostra Sobre as Reservas Aéreas