XML_CancelReservation メッセージ・フローの作成

XML_CancelReservation メッセージ・フローを作成するには、次のようにします。 詳細な指示については、各ステップの終わりにあるリンクをクリックしてください。

XML_CancelReservation メッセージ・フローを作成および構成するには、次のようにします。

  1. XML_CancelReservation という新規メッセージ・フローを作成します。
    手順については、WebSphere Message Broker 資料の メッセージ・フローの作成を参照してください。
  2. メッセージ・フロー・エディターで、次の表にリストされているノードを追加して名前変更します。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの追加を参照してください。
    パレット・ドロワー ノードのタイプ ノード名
    WebSphere MQ MQInput XML_CANCELRESERVATION_IN
    WebSphere MQ MQOutput XML_CANCELRESERVATION_OUT
    WebSphere MQ MQOutput XML_CANCELRESERVATION_FAIL1_1
    WebSphere MQ MQOutput XML_CANCELRESERVATION_FAIL1_2
    WebSphere MQ MQOutput XML_CANCELRESERVATION_FAIL2
    Transformation Compute DeleteReservation
    Transformation Compute IncrementSeat
    Construction Trace Trace
    Construction Trace Trace1
    Construction Trace Trace2
  3. 次の表に示されているように、ノードを接続します。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの接続を参照してください。
    ノードが正しく接続されたかどうかを確認する には、『XML_CancelReservation メッセージ・フローについて』の図を参照してください。
    ノード名 ターミナル 接続先
    XML_CANCELRESERVATION_IN Out DeleteReservation
    Catch XML_CANCELRESERVATION_FAIL1_1
    DeleteReservation Failure Trace
    Out Trace1
    Trace Out XML_CANCELRESERVATION_FAIL1_2
    Trace1 Out IncrementSeat
    IncrementSeat Failure Trace2
    Out XML_CANCELRESERVATION_OUT
    Trace2 Out XML_CANCELRESERVATION_FAIL2
  4. 次の表に示されているように、ノードのプロパティーを構成します。 この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの構成を参照してください。
    ノード名 ページ プロパティー
    XML_CANCELRESERVATION_IN 基本 キュー名 XML_CANCELRESERVATION_IN
    (この値は、メッセージ・フローがメッセージを取り出すローカル・キューです。)
    入力メッセージ構文解析 メッセージ・ドメイン XMLNSC : XML メッセージの場合 (ネームスペースが有効、妥当性検査、メモリー使用量が少ない)
    (この値は、最適化汎用 XML パーサーを使用するようにブローカーに指示します。)
    DeleteReservation 基本 データ・ソース RESERVDB
    (この値は、このノードで使用されるデータベースです。)
    基本 ESQL モジュール DeleteReservation
    (この値は、処理中にこのノードによって使用される ESQL モジュールの名前です。この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    基本 データベース・エラー時に例外を送出 (Throw exception on database error) チェック・ボックスをクリアして、メッセージ・フローがデータベース・エラーを扱う方法を ESQL で指定できるようにします。 チェック・ボックスが選択されている場合、データベース・エラーが発生すると、デフォルトではメッセージ・フローが例外を生成して、メッセージを FAIL キューに渡します。
    Trace 基本 宛先 (Destination) ローカル・エラー・ログ
    (この値は、トレース情報をローカル・エラー・ログに書き込むように、ノードに指示します。 Windows 上では、ローカル・エラー・ログはイベント・ビューアーです。Linux 上では、ローカル・エラー・ログは syslog です。)
    基本 パターン (Pattern) ==== Error from Delete Reservation node ==================
    ${ExceptionList}

    (この値はメッセージの ExceptionList ツリー部分をログ記録します。)
    基本 メッセージ番号 3051
    XML_CANCELRESERVATION_FAIL1_1 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_FAIL1
    (この値は、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    XML_CANCELRESERVATION_FAIL1_2 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_FAIL1
    (この値は、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    Trace1 基本 宛先 (Destination) ローカル・エラー・ログ
    (この値は、トレース情報をローカル・エラー・ログに書き込むように、ノードに指示します。 Windows 上では、ローカル・エラー・ログはイベント・ビューアーです。Linux 上では、ローカル・エラー・ログは syslog です。)
    基本 パターン (Pattern) ========== Message after Delete Reservation node ===================
    ${Root}
    ${Environment}

    (この値はメッセージの Message および Environment ツリー部分をログ記録します。)
    基本 メッセージ番号 3051
    IncrementSeat 基本 データ・ソース RESERVDB
    (この値は、このノードで使用されるデータベースです。)
    基本 ESQL モジュール IncrementSeat
    (この値は、処理中にこのノードによって使用される ESQL モジュールの名前です。 この名前は、XML_CancelReservation.esql ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    Trace2 基本 宛先 (Destination) ローカル・エラー・ログ
    (この値は、トレース情報をローカル・エラー・ログに書き込むように、ノードに指示します。 Windows 上では、ローカル・エラー・ログはイベント・ビューアーです。Linux 上では、ローカル・エラー・ログは syslog です。)
    基本 パターン (Pattern) ======== Error from Increment Seat node ===================
    ${ExceptionList}


    (この値はメッセージの ExceptionList ツリー部分をログ記録します。)
    基本 メッセージ番号 3051
    XML_CANCELRESERVATION_FAIL2 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_FAIL2
    (この値は、処理が失敗した場合にメッセージ・フローがメッセージを書き込むローカル・キューです。)
    XML_CANCELRESERVATION_OUT 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_CANCELRESERVATION_OUT
    (この値は、メッセージ・フローがメッセージを書き込むローカル・キューです。)
  5. XML Airline Message Flows プロジェクトで、ESQL ファイルをダブルクリックして、ESQL エディターで開きます。以下の ESQL コード・モジュールを ESQL ファイルにコピー、および貼り付けし、ファイルを保存します。詳しくは、WebSphere Message Broker 資料の ESQL の開発を参照してください。
    -- ************************************************
    -- * ESQL for the XML_CancelReservation message flow
    -- ************************************************
    
    CREATE COMPUTE MODULE DeleteReservation
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		DECLARE SQLState1 CHARACTER;
    		DECLARE SQLErrorText1 CHARACTER;
    		DECLARE SQLCode1 INTEGER;
    		DECLARE SQLNativeError1 INTEGER;
    
    		SET OutputRoot = InputRoot;
    		DECLARE cancel REFERENCE TO InputRoot.XMLNSC.CancelReservation.ListOfReservations;
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(cancel.ReservationNumber[]);
    		WHILE I <= J DO -- loop through the reservations to be cancelled
    			-- check that the requested reservation exists
    			SET Environment.ListOfReservations.Info[I] =
    				THE(SELECT T.CLASSTYPE, T.FLIGHTNO, T.FLIGHTDATE
    					FROM Database.XMLPASSENGERTB AS T
    					WHERE T.RESERVATIONNO = cancel.ReservationNumber[I]);
    			IF (SELECT COUNT(*) FROM Environment.ListOfReservations.Info[I].*[] AS I1) IS NULL THEN
    				THROW USER EXCEPTION CATALOG 'MyCatalog' MESSAGE 1234 VALUES('No record to delete');
    			END IF;
    
    			-- delete the record from the database
    			DELETE FROM Database.XMLPASSENGERTB AS T WHERE T.RESERVATIONNO = cancel.ReservationNumber[I];
    			SET I = I + 1;
    
    			SET SQLCode1 = SQLCODE;
    			IF SQLCode1 <> 0 THEN
    				SET SQLState1 = SQLSTATE;
    				SET SQLErrorText1 = SQLERRORTEXT;
    				SET SQLNativeError1 = SQLNATIVEERROR;
    				THROW USER EXCEPTION MESSAGE 2950 VALUES('The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1);
    			END IF;
    		END WHILE;
    		RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE IncrementSeat
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		DECLARE SQLState1 CHARACTER;
    		DECLARE SQLErrorText1 CHARACTER;
    		DECLARE SQLCode1 INTEGER;
    		DECLARE SQLNativeError1 INTEGER;
    
    		SET OutputRoot = InputRoot;
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(Environment.ListOfReservations.*[]);
    		-- loop through the cancellations, updating the seat availability
    		WHILE I <= J DO
    			IF Environment.ListOfReservations.Info[I].CLASSTYPE = 'Y' THEN
    				UPDATE Database.XMLFLIGHTTB AS T 
    					SET ECONOMICCLASS = T.ECONOMICCLASS-1, TOTALECONOMIC = T.TOTALECONOMIC+1
    					WHERE T.FLIGHTNO = Environment.ListOfReservations.Info[I].FLIGHTNO
    					AND T.FLIGHTDATE = Environment.ListOfReservations.Info[I].FLIGHTDATE;
    			END IF;
    			IF Environment.ListOfReservations.Info[I].CLASSTYPE = 'F' THEN
    				UPDATE Database.XMLFLIGHTTB AS T 
    					SET FIRSTCLASS = T.FIRSTCLASS-1, TOTALFIRST= T.TOTALFIRST+1
    					WHERE T.FLIGHTNO = Environment.ListOfReservations.Info[I].FLIGHTNO
    					AND T.FLIGHTDATE = Environment.ListOfReservations.Info[I].FLIGHTDATE;
    			END IF;
    			SET I = I + 1;
    
    			SET SQLCode1 = SQLCODE;
    			IF SQLCode1 <> 0 THEN
    				SET SQLState1 = SQLSTATE;
    				SET SQLErrorText1 = SQLERRORTEXT;
    				SET SQLNativeError1 = SQLNATIVEERROR;
    				THROW USER EXCEPTION MESSAGE 2950 VALUES('The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1);
    			END IF;
    		END WHILE;
    		RETURN TRUE;
    	END;
    END MODULE;
    
  6. メッセージ・フローを保存します。
これで、XML_CancelReservation メッセージ・フローの作成が終わりました。 このメッセージ・フローは、以前に XML_Reservation メッセージ・フローが以前に行った予約を取り消します。

Airline Reservations サンプルの作成に戻る