XML_Reservation メッセージ・フローについて
XML_Reservation メッセージ・フローは、入力メッセージ内にリストされているフライトでの座席を予約し、乗客が予約を確認するための応答メッセージを生成します。
応答メッセージは XML_RESERVATION_OUT キューに書き込まれます。
下の図は XML_Reservation メッセージ・フローを示しています。

下の表では、XML_Reservation メッセージ・フローで使用されるノードのタイプをリストしています。
ノード・タイプ |
ノード名 |
MQInput |
XML_RESERVATION_IN |
Database |
UpdateFlightTable |
Compute |
UpdatePassengerTable; BuildSingleMessage; PropagateMultipleMessages |
Filter |
MultipleOrSingleMessage
|
Throw |
InvalidRequest |
MQOutput |
XML_RESERVATION_FAIL; XML_RESERVATION_OUT |
Trace |
LogException |
詳しくは、WebSphere Message Broker 資料で XML_Reservation メッセージ・フローのノードについて調べてください。このメッセージ・フローで使用される ESQL については、
XML_Reservation メッセージ・フローの作成を参照してください。
XML_Reservation メッセージ・フローは以下のアクションを実行します。
- XML_RESERVATION_IN ノードは入力メッセージを XML_RESERVATION_IN キューから取得し、そのメッセージが自己定義型 XML メッセージであることを確認します。
- XML_RESERVATION_IN ノードは、メッセージを XML パーサーを使用して完全に構文解析し、Out ターミナルを介して入力メッセージを UpdateFlightTable ノードに渡します。
あるいは、例外がダウンストリームに発行され、メッセージがロールバックされたなら、このノードは、Catch ターミナルを介して入力メッセージを XML_RESERVATION_FAIL ノードに渡し、このノードから LogException にメッセージが渡されます。
次いで LogException ノードはエラーをローカル・エラー・ログに書き込みます。これは Windows 上ではイベント・ビューアーで、Linux 上では syslog です。
- UpdateFlightTable ノードは、XMLFLIGHTTB 表で、要求された座席が予約可能かどうかを確認し、次いで XMLFLIGHTTB 表を更新し、座席が割り振られて、残りの座席数が減ったことを示します。
- UpdateFlightTable ノードは、RESERVATIONSEQNO の値を XMLFLIGHTTB 表から環境変数に挿入し、この値を UpdatePassengerTable ノードに渡します。
UpdateFlightTable ノードでは、各クラスの空席数も環境変数に入れます。
- UpdateFlightTable ノードは、Out ターミナルを通じて、入力メッセージを UpdatePassengerTable ノードに渡します。
- UpdatePassengerTable ノードは、入力メッセージから乗客リストを取得し、Environment ツリーからフライト・データを取得し、新しい乗客の名前と予約情報を RESERVDB データベースの XMLPASSENGERTB 表に追加します。
- UpdatePassengerTable ノードは、各乗客に固有の予約番号を作成して割り当てます。
予約番号の構成は次のようになります。
FlightNumber + FlightDate + RESERVATIONSEQNO
RESERVATIONSEQNO の値は、UpdateFlightTable ノードから受け取った環境 (Environment) 変数から取られます。
たとえば、Mary Smith の予約番号を CA937200305251 とします。
それらの予約番号により、UpdatePassengerTable ノードは XMLPASSENGERTB 表を更新します。
- UpdatePassengerTable ノードは、Out ターミナルを通じて、入力メッセージを MultipleOrSingleMessage ノードに渡します。
- MultipleOrSingleMessage ノードは、Request という入力メッセージ・フィールドを確認し、次にメッセージを渡す場所を以下のように判別します。
- 最初の XML_Reservation 入力メッセージ (reservation1.enqueue) の Request フィールドの値は 'M' なので、
ノードは True ターミナルを介してそのメッセージを PropagateMultipleMessages ノードに渡します。
- 2 番目の XML_Reservation 入力メッセージ (reservation2.enqueue) の Request フィールドの値は 'S' なので、
ノードは False ターミナルを介してそのメッセージを BuildSingleMessage ノードに渡します。
- Request フィールドの値を判別できないなら、メッセージを Unknown ターミナルを介して Invalid Request (無効な要求) ノードに渡す。
InvalidRequest ノードは、メッセージ・カタログ、メッセージ番号、およびメッセージ・テキスト (すべて ExceptionList ツリーから取られたもの) を含むエラー・メッセージを生成します。
- メッセージが PropagateMultipleMessages ノードに送られると、PropagateMultipleMessages ノードは入力メッセージにリストされた乗客の 1 人についての応答メッセージを作成し、次いで Out ターミナルを介してその応答を XML_RESERVATION_OUT ノードに渡します。
PropagateMultipleMessages ノードは、入力メッセージにリストされている各乗客に対して、これと似た応答メッセージを作成します。
- メッセージが BuildSingleMessage ノードに送られると、BuildSingleMessage ノードは乗客およびその予約番号のリストを含む単一の応答メッセージを作成し、次いで Out ターミナルを介してその応答を XML_RESERVATION_OUT ノードに渡します。
- XML_RESERVATION_OUT ノードは、応答メッセージを XML_RESERVATION_OUT キューに書き込みます。
XML_Reservation メッセージ・フローのための入力メッセージは、RESERVDB データベース内のデータを操作します。
これらの操作には、XMLPASSENGERTB 表へのデータの追加が含まれます。
その他のメッセージ・フローは、XML_Reservation メッセージ・フローによって RESERVDB データベース内に保管されているデータの一部を検索します。
その他のメッセージ・フローが照会するためにデータベース内に十分なデータが保管されているようにするため、2 つの入力メッセージが XML_Reservation メッセージ・フローを実行するために提供されます。
その他のメッセージ・フローのいずれかを実行する前に、両方のメッセージで XML_Reservation を実行しなければなりません。
設計上の提案: 単一の Compute ノードの使用
XML_Reservation メッセージ・フローは、RESERVDB データベース内の XMLFLIGHTTB 表および XMLPASSENGERTB 表を更新するために以下の 2 つの別々のノードを持っています。
- UpdateFlightTable (Database ノード)
- UpdatePassengerTable (Compute ノード)
UpdateFlightTable は、特定のフライトに要求された予約の数で XMLFLIGHTTB を更新します。
そして、UpdatePassengerTable ノードに渡すために Environment ツリーにその便の詳細情報を書き込みます。
UpdatePassengerTable ノードは、予約を行った乗客に関する詳細情報によって XMLPASSENGERTB を更新し、乗客の固有の予約番号を追加します。
次いでノードは、乗客の固有の予約番号をメッセージに追加します。
メッセージ・フローのパフォーマンスを改善するために、2 つのノードを単一の Compute ノードに結合することができます。
ただし、Database ノードはメッセージへの変更を行うことができないので、2 つのノードを単一の Database ノードに結合することはできません。
ここに示されているメッセージでは、計算 (Compute) ノードとデータベース (Database) ノードで実行可能なことを示すために、2 つの別個のノードを使用しています。
『Airline Reservations サンプルについて』に戻る