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.

Una captura de pantalla del 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:

  1. El nodo XML_RESERVATION_IN obtiene el mensaje de entrada en la cola XML_RESERVATION_IN y lo identifica como mensaje XML autodefinido.
  2. 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.
  3. 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.
  4. 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.
  5. El nodo UpdateFlightTable pasa el mensaje de entrada, a través del terminal de salida, al nodo UpdatePassengerTable.
  6. 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.
  7. 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.

  8. El nodo UpdatePassengerTable pasa el mensaje de entrada, a través del terminal de salida, al nodo MultipleOrSingleMessage.
  9. 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:
  10. 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.
  11. 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.
  12. 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 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.

Icono de la página principal   Volver al ejemplo Acerca de la Reserva de vuelos