トレース出力に論理メッセージ・ツリーを表示する

メッセージ・フロー内の任意の場所の論理メッセージ・ツリー構造を表示するためには、 Trace ノードを作成して、一部または全部のメッセージ (ヘッダー、 および 4 つのメッセージ・ツリーすべてを含む) をトレース出力先に書き込みます。

ノードによるメッセージ変更前と変更後のメッセージの内容、 あるいは入力ノードがメッセージを受信した時点のメッセージ内容を検査または記録する場合には、 この方法が役立ちます。 たとえば、LocalEnvironment 内に宛先リストを作成する Compute ノードを組み込む場合、 監査証跡の一部として、 作成された構造を記録する必要があるかもしれません。または、 Compute ノードが期待どおりに動作していることを検査する必要があるかもしれません。

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. メッセージを表示したいメッセージ・フローを開きます。 これは既存のメッセージ・フローの場合もありますし、 新しいメッセージ・フローを作成することもできます。
  3. メッセージ・ツリー構造の一部または全部を表示したいすべての箇所に、 Trace ノードを組み込んでください。 組み込める Trace ノードの数に制限はありませんが、 各ノードはメッセージ・フロー処理にいくらかのオーバーヘッドを生じさせます。
  4. Trace ノード・プロパティーを、表示したいメッセージまたはメッセージの一部をトレースするように設定します。 メッセージの一部を指定するには、ESQL フィールド参照を使用します。 以下にいくつかの例を示します。
  5. メッセージ・フローの特定の動作を調べるために Trace ノードを追加した場合で、 問題が解決されたか、メッセージ・フローが正しく機能していることを確認できた場合は、 Trace ノードを除去し、メッセージ・フローを再デプロイします。

WebSphere MQ キューの MQInput ノードで XML メッセージを受信するメッセージ・フローを構成したとします。 入力メッセージには MQRFH2 ヘッダーが含まれます。 メッセージの内容は以下のとおりです。

<Trade type='buy'
 Company='IBM'
 Price='200.20'
 Date='2000-01-01'
 Quantity='1000'/>

ここで、このメッセージから作成される 1 つまたは複数のツリー (メッセージ本文、 Environment ツリー、LocalEnvironment ツリー、 および Exception ツリー) を表示する出力を生成する Trace ノードを組み込み、 構成することができます。 メッセージ本文の内容を記録する場合、 プロパティー・ツリーおよびすべてのヘッダー (この例では、 少なくとも MQMD と MQRFH2) が含まれます。 Trace ノードの「パターン」 プロパティーを設定するとき、 何を記録すべきかを指定します。このパターンを定義するとき、 ほとんどの相関名を使用できます (Compute ノードに固有の名前は使用できません)。

メッセージ本文
プロパティーおよびすべてのヘッダーを含むメッセージ本文ツリーを Trace ノードで記録するには、「パターン」$Root に設定します。メッセージ・データだけを記録するには、「パターン」${Body} に設定します。

「パターン」$Root に設定した場合、 上記のメッセージのメッセージ・ツリーに関するトレース出力として、 たとえば以下のようになります。

Root
      Properties
         CreationTime=GMTTIMESTAMP '1999-11-24 13:10:00'          (a GMT timestamp field)
 
  ... and other fields ...
 
      MQMD
         PutDate=DATE '19991124'                                  (a date field)
 
         PutTime=GMTTIME '131000'                                 (a GMTTIME field)
 
  ... and other fields ...
 
      MQRFH
          mcd
          msd='xml'                                              (a character string field)
 
         .. and other fields ...
 
      XML
         Trade
          type='buy'                                             (a character string field)
 
         Company='IBM'                                           (a character string field)
 
         Price='200'                                             (a character string field)
 
         Date='2000-01-01'                                       (a character string field)
 
         Quantity='1000'                                         (a character string field)
Environment
環境ツリー内のすべてのデータをトレースで記録するには、「パターン」${Environment} に設定します。これにより、たとえば以下のような出力が生成されます。
 (0x1000000)Environment = (
      (0x1000000)Variables = (
        (0x1000000)MyVariable1 = (
          (0x2000000) = '3'
        )
        (0x1000000)MyVariable2 = (
          (0x2000000) = 'Hello'
        )
      )
  ) 

環境ツリーの変数フォルダー内の特定の変数をトレースするには、 より具体的なパターン (たとえば ${Environment.Variables.MyVariable1} を使用することができます。これにより、値だけが戻されます (たとえば、値 3 だけが戻されます )。

LocalEnvironment
LocalEnvironment ツリー内のデータをトレースで記録するには、「パターン」${LocalEnvironment} に設定します。これにより、たとえば以下のような出力が生成されます。 ここでは、LocalEnvironment ツリー内に宛先リストが作成されています。
(0x1000000)Destination        = (
    (0x1000000)MQ = (
      (0x1000000)DestinationData = (
        (0x3000000)queuename = 'MQOUT'
      )
    )
     (0x1000000)MQDestinationList = (
      (0x1000000)DestinationData = (
        (0x3000000)queuename = 'OLDMQOUT'
      )
    )
    (0x1000000)RouterList        = (
      (0x1000000)DestinationData = (
        (0x3000000)labelname = 'continue'
      )
      (0x1000000)DestinationData = (
        (0x3000000)labelname = 'custdetails'
      )
      (0x1000000)DestinationData = (
        (0x3000000)labelname = 'trade'
      )
    )
  )      

別の例として、 以下のように WrittenDestination フォルダーを含めることができます。 これは、MQOutput ノードの後にある Trace ノードによって記録されるトレースです。 MQOutput ノードの out ターミナルは、Trace ノードを含む一連のノードに接続されています。 out ターミナルが接続されると、LocalEnvironment には、 出力ノードがすでに実行したアクションに関する情報が追加されます。

(0x1000000)Destination        = (
    (0x1000000)MQ = (
      (0x1000000)DestinationData = (
        (0x3000000)queuename = 'MQOUT'
      )
    )
  (0x1000000)WrittenDestination = (
    (0x1000000)MQ = (
      (0x1000000)DestinationData = (
        (0x3000000)queueName        = 'MQOUT'
        (0x3000000)queueManagerName = 'MQSI_SAMPLE_QM'
        (0x3000000)replyIdentfier   = X'414d51204d5153495f53414d504c455f1f442f3b12600100'
        (0x3000000)msgId            = X'414d51204d5153495f53414d504c455f1f442f3b12600100'
        (0x3000000)correlId         = X'000000000000000000000000000000000000000000000000'
      )
    )
  )
)
ExceptionList
例外リストのデータをトレースするには、「パターン」${ExceptionList} に設定します。

さらに、フロー・デバッガーを使用するときにも、 メッセージ・フロー内のメッセージ構造その他の情報を表示することができます。

関連概念
メッセージ・フロー
論理メッセージ・ツリー
相関名
フロー・デバッガー

関連タスク
メッセージ・フローの設計
メッセージ本体の内容の操作
メッセージ・ツリーの他の部分の操作
メッセージ・フロー・アプリケーションのテストとデバッグ

関連資料
Trace ノード
例外リスト構造