メッセージ処理

コネクターは、各ビジネス・オブジェクトの動詞に基づいた InterChange Server Express によって、渡されるビジネス・オブジェクトを処理します。サポートするビジネス・オブジェクトを処理するために、コネクターはビジネス・オブジェクト・ハンドラーを使用します。ビジネス・オブジェクト・ハンドラーには、アプリケーションと対話し、ビジネス・オブジェクト要求をアプリケーション操作に変換するメソッドがあります。

コネクターは以下のビジネス・オブジェクトの動詞をサポートします。

Create

Create を含むビジネス・オブジェクトの処理は、オブジェクトが非同期または同期のどちらの方式で発行されているかによって異なります。

非同期デリバリー

Create の動詞を含むビジネス・オブジェクトに関しては、これがデフォルトのデリバリー・モードです。メッセージは、データ・ハンドラーを使用してビジネス・オブジェクトから作成され、出力キューに書き込まれます。メッセージが配信されると、コネクターは BON_SUCCESS、さもなければ BON_FAIL を戻します。

注:
コネクターには、メッセージが受信されたかどうか、あるいはアクションが実行されたかどうかを確認する手段はありません。

同期確認通知

コネクター・プロパティーに replyToQueue が定義されていて、ビジネス・オブジェクトの変換プロパティーに responseTimeout が存在する場合、コネクターは同期モードで要求を発行します。コネクターはその後で応答を待機して、受信アプリケーションによって適切なアクションが実行されることを確認します。

WebSphere MQ の場合、コネクターは最初に、表 3 に示すヘッダーを持つメッセージを発行します。

表 3. 要求メッセージ記述子ヘッダー (MQMD)
フィールド 説明
Format フォーマット名 変換プロパティーで定義された出力フォーマット。IBM 要件に合わせて 8 文字までに切り捨てられます (例: MQSTR)。
MessageType メッセージ・タイプ MQMT_DATAGRAMa
Report 必要なレポート・メッセージのオプション。

応答メッセージが期待される場合、このフィールドには次のように値が取り込まれます。

処理が成功した場合の肯定処理レポートが必要なことを示す、MQRO_PANa

処理が失敗した場合の否定処理レポートが必要なことを示す、MQRO_NANa

生成されるレポートの相関 ID が始めに発行された要求のメッセージ ID と等しくなければならないことを示す、MQRO_COPY_MSG_ID_TO_CORREL_IDa

ReplyToQueue 応答キューの名前 応答メッセージが期待される場合は、このフィールドにはコネクター・プロパティー ReplyToQueue の値が取り込まれます。
Persistence メッセージのパーシスタンス (永続性) MQPER_PERSISTENTa
Expiry メッセージの存続時間 MQEI_UNLIMITEDa
a は、IBM によって定義されている定数を示します。

表 3 に示したメッセージ・ヘッダーの後ろに、メッセージ本文が続きます。メッセージ本文は、データ・ハンドラーを使用して直列化されたビジネス・オブジェクトです。

Report フィールドは、受信側アプリケーションからの肯定処理レポートと否定処理レポートの両方の返送が期待されていることを示すよう、設定されます。メッセージを発行したスレッドは、受信アプリケーションが要求を処理できるかどうかを示す応答メッセージを待機します。

アプリケーションは、コネクターから同期要求を受信すると、ビジネス・オブジェクトを処理して、表 4表 5、および表 6 に示すレポート・メッセージを発行します。

表 4. 応答メッセージ記述子ヘッダー (MQMD)
フィールド 説明
Format フォーマット名 変換プロパティーに定義された busObj の入力フォーマット。
MessageType メッセージ・タイプ MQMT_REPORTa
a は、IBM によって定義されている定数を示します。

表 5. 応答メッセージに含まれるデータ
動詞 フィードバック・フィールド メッセージ本文
Create SUCCESS VALCHANGE (オプション) 変更を反映する直列化されたビジネス・オブジェクト

VALDUPES FAIL (オプション) エラー・メッセージ

表 6. フィードバック・コードおよび応答値
WebSphere MQ フィードバック・コード 同等な WebSphere Business Integration Server Express の応答a
MQFB_PANまたは MQFB_APPL_FIRST SUCCESS
MQFB_NANまたは MQFB_APPL_FIRST + 1 FAIL
MQFB_APPL_FIRST + 2 VALCHANGE
MQFB_APPL_FIRST + 3 VALDUPES
MQFB_APPL_FIRST + 4 MULTIPLE_HITS
MQFB_APPL_FIRST + 5 適用されない
MQFB_APPL_FIRST + 6 適用されない
MQFB_APPL_FIRST + 7 UNABLE_TO_LOGIN
MQFB_APPL_FIRST + 8 APP_RESPONSE_TIMEOUT (コネクターが即時終了します)
MQFB_NONE 応答メッセージにフィードバック・コードが指定されていない場合にコネクターが受け取る情報
a 詳細については、「システム・インプリメンテーション・ガイド」を参照してください。

ビジネス・オブジェクトが処理できた場合、アプリケーションはフィードバック・フィールドを MQFB_PAN (または特定の WebSphere Business Integration Server Express システムの値) に設定して、レポート・メッセージを作成します。オプションで、アプリケーションはメッセージ本文に変更箇所を含むビジネス・オブジェクトを直列化して取り込むことができます。ビジネス・オブジェクトが処理されなかった場合、アプリケーションはフィードバック・フィールドを MQFB_NAN (または特定の WebSphere Business Integration Server Express システムの値) に設定して、レポート・メッセージを作成します。その後、オプションでメッセージ本文にエラー・メッセージを組み込みます。どちらの場合でも、アプリケーションはメッセージの correlationID フィールドをコネクター・メッセージの messageID に設定し、ReplyTo フィールドで指定されたキューにメッセージを発行します。

コネクターは、デフォルトでは、応答メッセージを検索する際に 応答メッセージの correlationID と要求メッセージの messageID とを付き合わせます。次に、コネクターは要求を発行したスレッドを通知します。応答のフィードバック・フィールドによって、コネクターはメッセージ本文に、ビジネス・オブジェクトかエラー・メッセージのいずれかが含まれていることを、予測します。ビジネス・オブジェクトが要求され、メッセージ本文に値が含まれていない場合、コネクターは単に、Request 操作で最初に InterChange Server Express によって発行されたものと同じビジネス・オブジェクトを戻します。エラー・メッセージが要求され、メッセージ本文に値が含まれていない場合、汎用エラー・メッセージが応答コードとともに InterChange Server Express に戻されます。ただし、メッセージ・セレクターを使用して、要求に対する応答メッセージの識別、フィルター操作、およびアダプターでの識別方法を制御することもできます。このメッセージ・セレクターの機能は JMS の機能です。これは、同期要求処理のみに適用されます (下記参照)。

メッセージ・セレクターを使用した応答メッセージのフィルター操作

コネクターは、同期要求処理の対象となるビジネス・オブジェクトを受信するときに、動詞のアプリケーション固有情報に response_selector ストリングが存在するかどうかを検査します。response_selector が定義されていない場合は、コネクターは、上記の相関 ID を使用して応答メッセージを識別します。

response_selector が定義されている場合は、名前と値の組が以下の構文で格納されている必要があります。

response_selector=JMSCorrelationID LIKE 'selectorstring'

メッセージ・セレクター・ストリングは応答を一意的に識別しなければならず、値は以下のように単一引用符で囲まれていなければなりません。

response_selector=JMSCorrelationID LIKE 'Oshkosh'

上記の例では、要求メッセージを発行した後、アダプターは correlationID が「Oshkosh」に等しい応答メッセージが あるかどうか ReplyToQueue をモニターします。アダプターはこのメッセージ・セレクターに一致する最初のメッセージを検索し、応答としてディスパッチします。

オプションで、アダプターは実行時置換を行い、要求ごとに固有のメッセージ・セレクターを生成できるようにします。メッセージ・セレクターの代わりに、整数を中括弧で囲んだ形式 (例: '{1}') でプレースホルダーを指定します。この後にコロンを置き、置換に使用する属性をコンマで区切ってリストします。プレースホルダーの整数は、置換に使用する属性に対する指標として機能します。例えば、以下のメッセージ・セレクターを見てください。

response_selector=JMSCorrelationID LIKE '{1}': MyDynamicMO.CorrelationID

このメッセージ・セレクターでは、{1} をセレクターの最初の属性 (この例では 子オブジェクト MyDynamicMO の属性 CorrelationId) の値で置換するように アダプターに指示します。属性 CorrelationID の値が 123ABC の場合は、アダプターは以下の基準で作成されたメッセージ・セレクターを生成し、使用します。

JMSCorrelation LIKE '123ABC'

これにより、応答メッセージを識別します。

以下のように複数の置換を指定することもできます。

response_selector=PrimaryId LIKE '{1}' AND AddressId LIKE '{2}' : PrimaryId, Address[4].AddressId

この例では、アダプターは {1} をトップレベルのビジネス・オブジェクトの属性 PrimaryId の値で置換し、{2} を 子コンテナー・オブジェクト Address の 5 番目の AddressId の値で置換します。この方法では、応答メッセージ・セレクターでビジネス・オブジェクトおよびメタオブジェクトの任意の属性を参照できます。Address[4].AddressId を使用した深い検索の方法については、JCDK API のマニュアル (getAttribute メソッド) を参照してください。

以下の場合は、実行時にエラーが報告されます。

例えば、リテラル値「{」または「}」をメッセージ・セレクターに含める場合は、それぞれ「{{」または「{}」を使用してください。また、これらの文字を属性値に入れることもできますが、この場合は最初の「{」は不要です。エスケープ文字の使用例を以下に示します。response_selector=JMSCorrelation LIKE '{1}' and CompanyName='A{{P': MyDynamicMO.CorrelationID

コネクターは、このメッセージ・セレクターを以下のように解決します。

JMSCorrelationID LIKE '123ABC' and CompanyName='A{P'

コネクターは、属性値で「{」、「}」、「:」、「;」などの特殊文字を検出した場合は、それらの文字を照会ストリングに直接挿入します。これにより、アプリケーション固有情報の区切り文字としても機能する特殊文字を照会ストリングに含めることができます。

属性値からリテラル・ストリング置換を抽出する方法を 次の例に示します。

response_selector=JMSCorrelation LIKE '{1}' and CompanyName='A{{P': MyDynamicMO.CorrelationID

MyDynamicMO.CorrelationID に値 {A:B}C;D が含まれている場合は、コネクターは、このメッセージ・セレクターを JMSCorrelationID LIKE '{A:B}C;D' and CompanyName='A{P' と 解決します。

応答セレクター・コードの詳細については、JMS 1.0.1 仕様を参照してください。

カスタム・フィードバック・コードの作成

コネクター・プロパティー FeedbackCodeMappingMO を指定することにより、WebSphere MQ フィードバック・コードを拡張して表 6 に示されたデフォルトの解釈をオーバーライドすることができます。このプロパティーを使用すると、すべての WebSphere Business Integration Server Express システム固有の戻り状況値が WebSphere MQ のフィードバック・コードにマップされるメタオブジェクトを作成できます。(メタオブジェクトを使用して) フィードバック・コードに割り当てられた戻り状況は、InterChange Server Express に渡されます。詳細については、"FeedbackCodeMappingMO"を参照してください。

Retrieve

Retrieve 動詞を持つビジネス・オブジェクトは、同期デリバリーのみをサポートします。コネクターはこの動詞を含むビジネス・オブジェクトを、Create 用に定義された同期デリバリーの場合と同様に処理します。ただし、Retrieve 動詞を使用している場合、responseTimeoutreplyToQueue が必要になります。さらに、トランザクションを完了するには、メッセージ本文に直列化ビジネス・オブジェクトが取り込まれる必要があります。

表 7 に、これらの動詞に対応する応答メッセージを示します。

表 7. 応答メッセージに含まれるデータ
動詞 フィードバック・フィールド メッセージ本文
Retrieve FAIL FAIL_RETRIEVE_BY_CONTENT (オプション) エラー・メッセージ

MULTIPLE_HITS SUCCESS 直列化ビジネス・オブジェクト

Copyright IBM Corp. 2004