サービス・メッセージ・オブジェクト

サービス・メッセージ・オブジェクト (SMO) は、拡張サービス・データ・オブジェクト (SDO) です。SMO は、サービス間で交換されるメッセージを処理および操作するための抽象化層を提供します。

SMO モデル

SMO モデルは、SDO DataObject を使用してメッセージを表したパターンです。SMO には、以下のデータ・グループの表現が含まれます。
  • メッセージのビジネス・ペイロード。ペイロードは、サービス・エンドポイント間で交換されるアプリケーション・データです。
  • メッセージに関連付けられたヘッダー情報。例えば、JMS API を使用してメッセージが伝達された場合は Java Message Service (JMS) ヘッダーになり、WebSphere MQ によってメッセージが生成される場合は MQ ヘッダーになります。
  • コンテキスト情報 (メッセージ・ペイロード以外のデータ)。

この情報はすべて SDO DataObject としてアクセスされます。また、SMO の全体構造を指定するスキーマ宣言があります。このスキーマは WebSphere Integration Developer によって生成されます。

すべての SMO の基本構造は同じです。この構造は、ServiceMessageObject と呼ばれるルート・データ・オブジェクトで構成されており、ルート・データ・オブジェクト内にヘッダー、本体、およびコンテキスト・データを表す他のデータ・オブジェクトが格納されています。SMO 本体にはメッセージ・ペイロードが格納されます。 ヘッダーには、特定のインポートまたはエクスポート・バインディングから生じる情報が格納されます。例えば JMS バインディングなどです。

SMO は、メッセージ・ヘッダーおよびメッセージ・ペイロードへのアクセスおよび変更を行うためのインターフェースを提供します。SMO によって、さまざまなタイプのメッセージの論理コンテンツを表現できます。

図 1. SMO 構造の概要. ServiceMessageObject のヘッダー、コンテキスト、および本体ServiceMessageObject には、context (出現回数 1)、headers (出現回数 1)、および body (出現回数 0..1) が含まれます。context には、correlation (出現回数 0..1)、transient (出現回数 0..1)、failInfo (出現回数 0..1)、および primitiveContext (出現回数 0..1) が含まれます。headers には、SMOheader (出現回数 0..1)、JMSheader (出現回数 0..1)、SOAPheader (出現回数 0..無限)、SOAPFaultInfo (出現回数 0..1)、properties (出現回数 0..無限)、および MQHeader (出現回数 0..1) が含まれます。

WebSphere Process Server と SMO

WebSphere Process Server は、対話エンドポイント間で送信途中にあるメッセージを操作します。WebSphere Process Server 内部では、メディエーション・フローはメッセージを SMO として処理します。

動的ルーティングを提供するために、Websphere Service Registry and Repository (WSRR) を使用して対話エンドポイントを検索できます。WSRR による照会の結果は SMO に保管されます。

メッセージは複数のソースから送信される可能性があるので、SMO は異なる種類のメッセージ・ヘッダーを保持できなければなりません。 WebSphere Process Server によって処理されるメッセージ・ヘッダーの種類は以下のとおりです。
  • Web Services メッセージ・ヘッダー
  • Service Component Architecture (SCA) メッセージ・ヘッダー
  • Java Message Service (JMS) メッセージ・ヘッダー
  • WebSphere Adapter メッセージ・ヘッダー
  • WebSphere MQ メッセージ・ヘッダー

WebSphere Process Server SMO ランタイム

WebSphere Process Server は SMO オブジェクトを作成します。この SMO オブジェクトはメディエーション・フローに使用できます。

メディエーション・フローを作成するときに、WebSphere Integration Developer は各端末 (入力、出力、または失敗) のメッセージ本体のタイプと、オプションでコンテキスト情報のタイプを指定します。WebSphere Process Server は、この情報を使用してメッセージを指定のタイプの SMO オブジェクトに変換します。

SMO 内の MQ ヘッダー・データ

SMO 構造は、MQ ヘッダー情報を /headers/MQHeader に保管します。これには、以下の 3 つのエレメントが含まれます。
  • md メッセージの MQ メッセージ記述子 (MQMD) を表します。
  • control メッセージ本体に関連したフォーマット情報が含まれます。
  • header WebSphere MQ メッセージ内に含まれるヘッダー構造を表します。オプションで、繰り返すことができます。
md エレメントには、MQMD 定義のすべてのフィールドが含まれます (WebSphere MQ の資料を参照)。ただし、有用なデータを含まない特定の制御フィールド (StrucIdVersion など)、およびメッセージ・フォーマット・フィールド (EncodingCodedCharSetId、および Format) は除きます。

control エレメントには、メッセージ本体を記述する EncodingCodedCharSetId、および Format フィールドがあります。WebSphere MQ メッセージに何らかのメッセージ・ヘッダー (例えば、MQRFH2) が含まれる場合、ヘッダーを記述する EncodingCodedCharSetId、および Format フィールドが header エレメントに組み込まれます。

header エレメントは、メッセージ・ヘッダー (MQRFH2 など) を表します。各ヘッダーは、以下のいずれかです。
  • SMO 内で明示的にモデル化されたヘッダー: RFH バージョン 1 または 2。
  • 標準の MQ ヘッダー構造に従っているが、明示的にモデル化されていないヘッダー。これらのヘッダーの MQ フォーマット ID は、MQH で始まります。 これらのヘッダーは、SMO 内で非構造化バイナリー・データとして表されます。
  • ユーザー提供の MQ ヘッダー・データ・バインディングによって処理されるヘッダー。

header エレメントには、ヘッダーを記述する EncodingCodedCharSetId、および Format フィールドが含まれます。特に Format フィールドは正確に設定する必要があります (例えば、MQRFH2 ヘッダーの場合は MQHRF2)。また、CodedCharSetId および Encoding フィールドは、型が不明なデータの場合は重要です。WebSphere MQ メッセージとして提供される場合、このフォーマット情報が直前の MQ ヘッダー (直前のヘッダーがない場合は MQMD) に書き込まれます。

ヘッダーのサブエレメント

header エレメントには、モデル化された各ヘッダー用のサブエレメント (rfh および rfh2)、モデル化されていない標準の MQ ヘッダー用のサブエレメント (opaque)、ユーザー提供の MQ ヘッダー用のサブエレメント (value) も含まれます。これらの 4 つのエレメントのうち、1 つのみを設定する必要があります。どのヘッダー・エレメントでも、これらのエレメントのうちの複数を設定するとエラーになります。value サブエレメントは、ユーザー提供のヘッダー・データ・バインディングによって使用される構造を保管します。残りの 3 つのエレメント (rfhrfh2、および opaque) については後述します。

RFH ヘッダー

WebSphere MQ RFH ヘッダーには、名前と値のペアのストリングが含まれます。それぞれの名前と値は単純にテキスト・ストリングです。これは、SMO では、名前と値のエレメントを含む反復プロパティー・エレメントとして表されます。

RFH2 ヘッダー

WebSphere MQ RFH2 ヘッダーには、ゼロ個以上の名前付きフォルダーが含まれます。それぞれの名前付きフォルダーには、一連のプロパティーおよびグループが含まれます。プロパティーには、名前、オプションのタイプおよび値 (すべて string として表される) があります。グループには、名前があり、一連のプロパティーおよびグループが含まれます。RFH2 ヘッダーの SMO 表記にも、NameValueCCSID エレメントが含まれます。これは、WebSphere MQ メッセージのフォルダーをエンコードするための CCSID を決定します。

モデル化されていない標準の WebSphere MQ ヘッダー

opaque エレメントは、標準構造を持つ任意の WebSphere MQ ヘッダーを表します。このようなすべてのヘッダー (StrucIdVersion、および Flags) に共通のフィールドは、エレメントとして表されます。ヘッダーのモデル化されていない部分を hexBinary データとして含む data エレメントもあります。 通常、opaque エレメントを使用する場合は、データが破損しないようにするため、ヘッダーに関連付けられた正しい Encoding および CodedCharSetId 値を保持することが重要です。

WebSphere MQ ヘッダー情報のタイプ

WebSphere MQ ヘッダーのフィールドは、WebSphere MQ で使用されているのと同じタイプ・セットを使用して定義されます。MQLONG フィールドは int として表され、MQBYTEnn フィールドは長さが nn に制限された hexBinary データとして表され、MQCHARnn フィールドは長さが nn 文字に制限された string データとして表されます。


(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。