Acerca del flujo de mensajes XML_Reservation
El flujo de mensajes XML_Reservation reserva asientos en el vuelo
listado en el mensaje de entrada y genera mensajes de respuesta para los
pasajeros confirmando las reservas. Los mensajes de respuesta se transfieren a la cola XML_RESERVATION_OUT.
La siguiente figura muestra el flujo de mensajes XML_Reservation.

La siguiente tabla lista los tipos de nodos que se utilizan en el flujo de mensajes XML_Reservation.
Tipo de nodo |
Nombre de nodo |
MQInput |
XML_RESERVATION_IN |
Database |
UpdateFlightTable |
Compute |
UpdatePassengerTable; BuildSingleMessage; PropagateMultipleMessages |
Filter |
MultipleOrSingleMessage
|
Throw |
InvalidRequest |
MQOutput |
XML_RESERVATION_FAIL; XML_RESERVATION_OUT |
Trace |
LogException |
Si desea ver más información, lea lo referente a
los
nodos en el flujo de mensajes XML_Reservation en la documentación de WebSphere Message Broker.
Para ver el ESQL que se utiliza en el flujo de mensajes, consulte
Crear el flujo de mensajes XML_Reservation.
El flujo de mensajes XML_Reservation realiza las siguientes operaciones:
- El nodo XML_RESERVATION_IN obtiene el mensaje de entrada en la cola
XML_RESERVATION_IN y lo identifica como mensaje XML autodefinido.
- El nodo XML_RESERVATION_IN analiza completamente el mensaje utilizando el analizador XML y, después pasa el
mensaje de entrada a través del terminal de salida, al nodo
UpdateFlightTable. De forma alternativa, si se genera una excepción en sentido descendente y el mensaje se restituye,
el nodo pasa el mensaje de entrada, a través del terminal de captación, al nodo XML_RESERVATION_FAIL, que pasa el mensaje al nodo LogException. El nodo LogException graba entonces el error en las anotaciones de error locales, que son el visor de sucesos en Windows y el syslog en Linux.
- El nodo UpdateFlightTable comprueba la tabla XMLFLIGHTTB para saber si los asientos solicitados están disponibles y después
actualiza la tabla XMLFLIGHTTB para mostrar que los asientos se están asignando y que ahora quedan
menos asientos disponibles.
- El nodo UpdateFlightTable inserta el valor de RESERVATIONSEQNO desde la tabla XMLFLIGHTTB en una variable de
entorno, que se pasa al nodo UpdatePassengerTable. El nodo UpdateFlightTable también transfiere a una variable de entorno el número de asientos que quedan en cada clase.
- El nodo UpdateFlightTable pasa el mensaje de entrada, a través del terminal de salida, al nodo UpdatePassengerTable.
- El nodo UpdatePassengerTable obtiene la lista de pasajeros en el mensaje de entrada y los datos del vuelo
en el árbol Environment, y añade los nombres e información de la reserva de los nuevos pasajeros a la tabla XMLPASSENGERTB
de la base de datos RESERVDB.
- El nodo UpdatePassengerTable crea y asigna un número de reserva exclusivo a cada pasajero. El número de reserva se
genera a partir:
FlightNumber + FlightDate + RESERVATIONSEQNO
El valor de RESERVATIONSEQNO se toma de la variable de entorno recibida del nodo UpdateFlightTable. Por ejemplo, el número de reserva de Mary Smith es CA937200305251. El nodo
UpdatePassengerTable actualiza la tabla XMLPASSENGERTB con estos números de reserva.
- El nodo UpdatePassengerTable pasa el mensaje de entrada, a través del terminal de salida, al nodo
MultipleOrSingleMessage.
- El nodo MultipleOrSingleMessage comprueba el campo del mensaje de entrada llamado Petición y determina dónde
ha de pasarse el mensaje a continuación:
- El campo Petición del primer mensaje de entrada de XML_Reservation (reservation1.enqueue) contiene el valor
'M', por lo que el nodo pasa el mensaje al nodo PropagateMultipleMessages.
- El campo Petición del segundo mensaje de entrada de XML_Reservation
(reservation2.enqueue) contiene el valor 'S', por lo que el nodo pasa el mensaje, a través del terminal
False, al nodo BuildSingleMessage.
- Si el nodo no puede determinar el valor del campo Petición, pasa el mensaje, a través del terminal
desconocido, al nodo Invalid Request. El nodo InvalidRequest genera un mensaje de error que incluye el Catálogo de
mensajes, el Número de mensaje y el Texto del mensaje, tomados todos del árbol
ExceptionList.
- Si el mensaje va al nodo PropagateMultipleMessages, el nodo PropagateMultipleMessages crea un mensaje de
respuesta para uno de los pasajeros listados en el mensaje de entrada y después pasa la respuesta, a través del terminal de salida,
al nodo XML_RESERVATION_OUT. El nodo PropagateMultipleMessages crea un mensaje de respuesta como éste para cada pasajero
listado en el mensaje de entrada.
- Si el mensaje va al nodo BuildSingleMessage, el nodo BuildSingleMessage crea un solo mensaje de respuesta que contiene
una lista de los pasajeros y sus números de reserva y, a continuación, pasa la respuesta, a través del terminal de salida, al nodo
XML_RESERVATION_OUT.
- El nodo XML_RESERVATION_OUT transfiere el mensaje de respuesta a la cola XML_RESERVATION_OUT.
Los mensajes de entrada para el flujo de mensajes XML_Reservation manipulan los datos en la base de datos
RESERVDB. Estas
manipulaciones incluyen la adición de datos a la tabla XMLPASSENGERTB. Los otros flujos de mensajes recuperan algunos
de los datos almacenados en la base de datos RESERVDB por el flujo de mensajes XML_Reservation. Para que
haya suficientes datos almacenados en la base de datos de forma que puedan
consultarla los otros flujos de mensajes, se proporcionan dos mensajes de
entrada para ejecutar el flujo de mensajes XML_Reservation. Antes de ejecutar otro flujo de mensajes, debe ejecutar
XML_Reservation con ambos mensajes.
Sugerencia de diseño: utilizar un solo nodo Compute.
El flujo de mensajes XML_Reservation tiene dos nodos aparte para actualizar las tablas XMLFLIGHTTB y
XMLPASSENGERTB en la base de datos RESERVDB:
- UpdateFlightTable (un nodo Database)
- UpdatePassengerTable (un nodo Compute)
UpdateFlightTable actualiza XMLFLIGHTTB con el número de reservas solicitadas para un vuelo
específico. Pone los detalles del vuelo
en el árbol Environment para pasar al nodo UpdatePassengerTable. El nodo UpdatePassengerTable actualiza XMLPASSENGERTB
con los detalles de los pasajeros que han hecho reservas, y añade sus números de reserva exclusivos. El nodo añade entonces al mensaje los números de reserva exclusivos de los pasajeros.
Sería posible combinar los dos nodos en un solo nodo Compute para mejorar el rendimiento del flujo de
mensajes. Sin embargo, no podría combinarlos en un solo nodo Database porque el nodo
Database no puede realizar cambios en el mensaje. El flujo de mensajes
que se muestra aquí utiliza dos nodos aparte para mostrar lo que pueden
hacer los nodos Compute y Database.
Volver al ejemplo Acerca de la Reserva de vuelos