ユーザー定義のメッセージ処理ノードの計画

メッセージ処理ノードまたは出力ノードの書き方、およびノード内部でメッセージをナビゲートする方法を計画します。

設計上の要因

メッセージ処理ノードの開発およびインプリメント前に、次の点を考慮してください。

構文エレメント・ナビゲーション

ブローカーは、ノードがメッセージのツリー表記の全探索を呼び出すための関数に加えて、現行のエレメントから以下に挙げる他のエレメントへのナビゲーションをサポートする関数およびメソッドを提供します。
  • 最初の子
  • 最後の子
  • 直前の (または左の) 兄弟
  • 次の (または右の) 兄弟
これらの関係については下の図に示されています。
この図は構文エレメントを示す。これは他のエレメントに接続されている。他のエレメント: 直前の兄弟および
次の兄弟がエレメントの左と右、最初の子および最後の子がエレメントの下、親はエレメントの上。

他の関数およびメソッドがエレメント自体の操作をサポートします。 これには、エレメントを作成したり、エレメントの値を設定また照会したり、ツリーに新しいエレメントを挿入したり ツリーからエレメントを除去したりする関数やメソッドが含まれます。 詳細については、C ノード・ユーティリティー関数およびC パーサー・ユーティリティー関数、 または Javadoc 情報を参照してください。

次の図は、エレメント間の相互接続の全範囲を示す、単純な構文エレメント・ツリーです。
この図は構文エレメント・ツリーを示す。エレメント A が図の先頭、エレメント B の上にあり、B は
同じレベルにあるエレメント C、D、および E の上にある。

エレメント A がツリーのルート・エレメント です。 これがルートであるため、これには親がありません。エレメント A はエレメント B を 最初の子として持っています。A には他の子がないため、 エレメント BA の最後の子でもあります。

エレメント B は 3 つの子: エレメント CD、 および E があります。 エレメント CB の最初の子、 エレメント EB の最後の子です。

エレメント C には 2 つの兄弟: エレメント D および E があります。エレメント C の次の兄弟は エレメント D です。エレメント D の次の兄弟は エレメント E です。エレメント E の直前の兄弟は エレメント D です。エレメント D の直前の兄弟は エレメント C です。

下の図は、ブローカーが受信する典型的な WebSphere® MQ メッセージの構文エレメントの最初の生成を示します。 (すべてのメッセージに MQRFH2 ヘッダーがあるわけではありません。)
図の先頭に、ルートというボックスがある。線がこのボックスを、左下のプロパティーとマークされた
ボックスに接続し、別の線が右下の XML とマークされたボックスに接続している。
これら 2 つのボックスの間に、さらに 2 つの、MQMD および  MQRFH2 とマークされたボックスがある。

最初の生成におけるこれらのエレメントは、しばしばフォルダーと呼ばれ、 この中にメッセージ・ヘッダーおよびメッセージ内容のデータを表す構文エレメントが保管されています。 この例では、ルートの最初の子はプロパティー・フォルダーです。 プロパティーの次の兄弟が、MQMD ヘッダーのフォルダーです。 その次の 兄弟が MQRFH2 ヘッダーのフォルダーです。最後のフォルダーはメッセージ内容 (この例では XML メッセージとなっている) を表します。

上の図には MQMD および MQRFH2 ヘッダーが含まれています。WebSphere MQ を扱う処理ノードで受信されるメッセージにはすべて MQMD ヘッダーが組み込まれます。これに組み込めるヘッダーは他にも多数あります。

XML メッセージのナビゲーション

次の XML メッセージをご覧ください。
  <Business>
    <Product type='messaging'></Product>
    <Company>
      <Title>IBM</Title>
      <Location>Hursley</Location>
      <Department>WebSphere MQ</Department>
    </Company>
  </Business>
この例では、エレメントは以下のタイプです。
名前エレメント
Business、Product、Company、Title、Location、Department
値エレメント
IBM®、Hursley、WebSphere MQ
名前値エレメント
type='messaging'

メッセージをナビゲートするには、提供されているノード・ユーティリティー関数およびメソッド (または類似のパーサー・ユーティリティー関数) を使用してください。上記の XML メッセージを使用して、まず cniRootElement を、ノードがこの関数への入力として受信したメッセージと共に呼び出さなければなりません。Java™ では、着信の MbMessage オブジェクトに getRootElement を呼び出す必要があります。 この呼び出しは、エレメントのルートを表す MbElement を戻します。ユーザー定義ノードのこのルート・エレメントには変更を加えないでください。

ブローカーが受信する標準的なメッセージの構文エレメントが最初に生成される様子を示す図は、ルート・エレメントの最後の子が XML 構文解析ツリーを含むフォルダーであることを示しています。このフォルダーにナビゲートするには、C ノードで cniLastChild (この直前のコールの出力をこの関数の入力として) を呼び出すか、あるいは Java ノード内でメソッド getLastChild をルート・エレメントに対して呼び出します。

メッセージの最上位には、1 つだけエレメント (<Business>) があるので、cniFirstChild (Cで) または getFirstChild (Java で) を呼び出すとツリーのこの点に移動します。 cniElementType または getType を使用してそのタイプ (name) を入手し、その後に cniElementName または getName と続けて名前自体 (Business) を戻してください。

エレメント <Business> には 2 つの子、<Product> および <Company> があります。cniFirstChild または getFirstChild の後 cniNextSibling または getNextSibling を続けて使用して、それぞれの子へ順にナビゲートしてください。

エレメント <Product> には属性 (type='messaging') があり、これは子エレメントです。このエレメントへナビゲートするには cniFirstChild または getFirstChild を使用し、cniElementType または getType を使用してそのタイプ (name-value) を戻します。名前を得るには、cniElementName または getName を使用します。値を入手するには、cniElementValueType を呼び出してタイプを戻し、それに cniElementValue グループの中の適切な関数を続けます。この例では、 cniElementCharacterValue です。Java では、メソッド getValue を使用するとこれにより、そのエレメント値を表す Java オブジェクトが戻されます。

エレメント <Company> には 3 つの子があり、それぞれに値エレメントである子 (IBMHursley、および WebSphere MQ) があります。すでに説明された関数を使用してこれらにナビゲートしこれらの値にアクセスしてください。

他の関数が、エレメント・ツリー (またはその一部) をコピーするために使用可能です。 そのコピーにエレメントを追加または除去したり、エレメントの名前や値を変更したりして出力メッセージを 作成できます。 詳細については、C ノード・ユーティリティー関数およびC パーサー・ユーティリティー関数、 または Java ユーザー定義ノード API を参照してください。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:44:32

as01395_