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.
El diagrama siguiente 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 |
Para obtener más información sobre los nodos que se utilizan en este ejemplo, consulte
Nodos incorporados 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 XMLNSC 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 Catch (de captación) al nodo
XML_RESERVATION_FAIL, el cual 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 han asignado 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 XML_Reservation
(reservation1.mbtest) contiene el valor
M, por lo que el nodo pasa el mensaje a través del terminal True (verdadero) al nodo
PropagateMultipleMessages.
- El campo Petición del segundo mensaje de entrada XML_Reservation
(reservation2.mbtest) contiene el valor
S, por lo que el nodo pasa el mensaje a través del terminal False (falso) al nodo
BuildSingleMessage.
- Si el nodo no puede determinar el valor del campo Petición, pasa
el mensaje a través del terminal Unknown (desconocido) al nodo de petición no válida.
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 similar 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. Se proporcionan dos mensajes de entrada para ejecutar el flujo de mensajes XML_Reservation para que haya suficientes datos almacenados en la base de datos de los otros flujos de mensajes para consultar.
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)
El nodo UpdateFlightTable actualiza XMLFLIGHTTB con el número de reservas solicitadas para un determinado vuelo.
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.
Puede combinar los dos nodos en un solo nodo Compute para
mejorar el rendimiento del flujo de mensajes. Sin embargo, no puede
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 a Acerca del Ejemplo Reserva de vuelos