動詞の処理

コネクターは、コラボレーションから渡されたビジネス・オブジェクトを、各ビジネス・オブジェクトの動詞に基づいて処理します。サポートするビジネス・オブジェクトを処理するために、コネクターはビジネス・オブジェクト・ハンドラーと doForVerb() メソッドを使用します。コネクターは、以下のビジネス・オブジェクトの動詞をサポートします。

注:
Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトは、非同期的にも同期的にも送信できます。デフォルト・モードは非同期送信です。コネクターは、Retrieve 動詞、Exists 動詞、Retrieve by Content 動詞のビジネス・オブジェクトの非同期送信をサポートしません。したがって、Retrieve 動詞、Exists 動詞、または Retrieve by Content 動詞のデフォルト・モードは同期送信です。

重要:
生成されたビジネス・オブジェクトで動詞が設定されていない場合、コネクターは、何らかの動詞を含む、このビジネス・オブジェクトに定義された変換プロパティーを検索します。変換プロパティーが 1 セットのみ検出された場合、コネクターは指定された動詞を割り当てます。複数のプロパティーが検出された場合は、コネクターは動詞を判別できないため、メッセージの処理が失敗します。

Create、Update、および Delete

Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトの処理は、ビジネス・オブジェクトが非同期的に送信されたか同期的に送信されたかによって決まります。

非同期デリバリー

これは、Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトのデフォルト・デリバリー・モードです。データ・ハンドラーを使用して、ビジネス・オブジェクトからメッセージが作成され、出力キューに書き込まれます。メッセージがデリバリーされると、コネクターは SUCCESS を戻します。それ以外の場合は FAIL を戻します。

注:
コネクターには、メッセージが受信されたかどうか、または、処置が行われたかどうかを確認する方法はありません。

同期デリバリー

コネクター固有のプロパティーで ReplyToQueue が定義されており、かつビジネス・オブジェクトの変換プロパティーに responseTimeout が存在する場合、コネクターは同期モードで要求を送信します。続いて、コネクターは、受信側のアプリケーションで適切な処置が行われたかどうかを確認するために応答を待ちます。

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

表 3. メッセージ・ヘッダー
フィールド 説明
Format フォーマット名 変換プロパティーに定義されている出力フォーマット。IBM の要件に合わせて、8 文字を超える部分が切り捨てられます (例 : MQSTR)
MessageType メッセージ・タイプ MQMT_DATAGRAM* 受信側のアプリケーションからの応答を予期しない場合。
MQMT_REQUEST* 応答を予期する場合
Report 要求されたレポート・メッセージのオプション 応答メッセージの返送が予測される場合、このフィールドには次の値が取り込まれます。処理が成功したときに肯定処理レポートが必要な場合は、MQRO_PAN*。処理が失敗したときに否定処理レポートが必要な場合は、MQRO_NAN*。生成されるレポートの相関 ID が最初に発行された要求のメッセージ ID と同じになる必要がある場合は、MQRO_COPY_MSG_ID_TO_CORREL_ID*
ReplyToQueue 応答キューの名前 応答メッセージの返送が予測される場合、このフィールドにはコネクター・プロパティー ReplyToQueue の値が取り込まれます。
Persistence メッセージのパーシスタンス MQPER_PERSISTENT*
Expiry メッセージの存続時間 MQEI_UNLIMITED*

* は、IBM によって定義される定数を示します。

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

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

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

表 4. レポート・メッセージ
フィールド 説明
Format フォーマット名 変換プロパティー内で定義された busObj の入力フォーマット
MessageType メッセージ・タイプ MQMT_REPORT*

* は、IBM によって定義される定数を示します。

表 5. レポート・メッセージ: 動詞
動詞 Feedback フィールド メッセージの本体
Create、Update、または Delete SUCCESS VALCHANGE (オプション) 変更を反映する、直列化されたビジネス・オブジェクト。
VALDUPES FAIL (オプション) エラー・メッセージ。

表 6. レポート・メッセージ: WebSphere MQ フィードバック・コード
WebSphere MQ フィードバック・コード 等値の応答*
MQFB_NONE (フィードバック・コードが指定されない場合のデフォルトです) VALCHANGE
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 FAIL_RETRIEVE_BY_CONTENT
MQFB_APPL_FIRST + 6 BO_DOES_NOT_EXIST
MQFB_APPL_FIRST + 7 UNABLE_TO_LOGIN
MQFB_APPL_FIRST + 8 APP_RESPONSE_TIMEOUT (この応答後、コネクター・エージェントは即時に終了します)

* 詳細については、「コネクター開発ガイド (Java 用)」を参照してください。

ビジネス・オブジェクトを処理できる場合、アプリケーションは、feedback フィールドが MQFB_PAN (または特定の WebSphere Business Integration システムの値) に設定されたレポート・メッセージを作成します。また、オプションで、すべての変更を含む直列化されたビジネス・オブジェクトをメッセージ本体に取り込みます。 ビジネス・オブジェクトを処理できない場合、アプリケーションは、feedback フィールドが MQFB_NAN (または特定の WebSphere Business Integration システムの値) に設定されたレポート・メッセージを作成します。オプションで、このレポート・メッセージの本体にエラー・メッセージを含むこともできます。いずれの場合も、アプリケーションはメッセージの correlationID フィールドをコネクター・メッセージの messageID に設定し、replyTo フィールドで指定されたキューにメッセージを送信します。

コネクターは、応答メッセージを検索すると、デフォルトでは、応答の correlationID を要求メッセージの messageID と突き合わせます。続いて、要求を発行したスレッドに通知を送信します。コネクターは、応答の feedback フィールドの設定によって、メッセージの本体にビジネス・オブジェクトとエラー・メッセージのどちらが含まれているかを予測します。フィードバック・コードが MQFB_NONE (フィードバック・コードが指定されない場合のデフォルト値) の場合、コネクターはデフォルトで戻りコードが VALCHANGE であると見なします。次に、コネクターは、応答メッセージをデータ・ハンドラーに渡し、ビジネス・オブジェクトを更新します。ビジネス・オブジェクトが含まれていると予測したにもかかわらず、メッセージの本体にビジネス・オブジェクトが取り込まれていなかった場合、コネクターは InterChange Server が Request 操作のために最初に発行したのと同じビジネス・オブジェクトを単純に返送します。エラー・メッセージが含まれていると予測したにもかかわらず、メッセージの本体にエラー・メッセージが取り込まれていなかった場合、InterChange Server には応答コードと汎用エラー・メッセージが返送されます。ただし、メッセージ選択子を使用して、識別やフィルター操作を行うこともできます。あるいは、アダプターが特定の要求に対して応答メッセージを識別する方法を制御できます。このメッセージ選択子機能は、JMS 機能です。この機能は同期要求処理にのみ摘要されます。以下に詳細を説明します。

メッセージ選択子を使用した応答メッセージのフィルター操作

コネクターは、同期要求処理用のビジネス・オブジェクトを受け取ると、動詞のアプリケーション固有情報に response_selector ストリングが含まれていないかどうかをチェックします。response_selector が未定義の場合、コネクターは、前述のように、相関 ID を使用して応答メッセージを識別します。

response_selector が定義されていると、コネクターは次の構文に基づく名前 - 値のペアを探します。

response_selector=JMSCorrelationID LIKE 'selectorstring'

メッセージ選択子ストリングは、応答を一意的に識別する必要があります。また、次の例に示すように、値は単一引用符で囲む 必要があります。

response_selector=JMSCorrelationID LIKE 'Oshkosh'

上記の例の場合、アダプターは、要求メッセージを発行した後、"Oshkosh" に等しい 相関 ID を持つ応答メッセージ の 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 の仕様書を参照してください。

双方向言語サポート

Adapter for WebSphere MQ では、ビジネス・オブジェクトの内容の双方向変換がサポートされています。コネクターが外部 WebSphere MQ アプリケーションとメタデータを交換し、同期デリバリー・フィルター操作機構を使用して ReplyToQueue で応答メッセージを探す場合、双方向言語サポートも提供されています。 このような環境では、Windows 標準形式が WebSphere MQ アプリケーションの双方向形式に変換されるように、双方向変換が適用されます。これは、BiDi.Application 標準構成プロパティーに設定された属性を使用して適用されます。

response_selector が

response_selector=JMSCorrelationID LIKE'selectorstring'

という構文で指定された場合、および双方向文字が「selectorstring」に 表示される場合、アダプターは、「selectorstring」を外部アプリケーションの双方向形式に 変換するように構成することができます。外部アプリケーションは、 アダプターが作成した要求に対する応答メッセージの送信を 担当します。これは、外部アプリケーションの双方向形式が、Connector Designer アプリケーションで最初に定義されたようなアプリケーション固有の情報のデフォルトの Windows 形式と異なる場合に必要になります。このような場合 、BiDi.Application 標準構成プロパティーは、外部アプリケーションの双方向形式で構成する必要があります。これによりアダプターは、メッセージ選択子ストリングを、応答メッセージのフィルター操作に使用される前に変換します。

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

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

Retrieve、Exists、および Retrieve By Content

Retrieve 動詞、Exists 動詞、および Retrieve By Content 動詞を持つビジネス・オブジェクトは、同期送信のみをサポートします。コネクターは、これらの動詞を持つビジネス・オブジェクトを、Create 動詞、Update 動詞、および Delete 動詞に対して定義されている同期送信と同様に処理します。ただし、Retrieve 動詞、Exists 動詞、および Retrieve By Content 動詞を使用する場合には、responseTimeoutreplyToQueue が必須です。さらに、Retrieve By Content 動詞と Retrieve 動詞の場合、トランザクションを完了するためにはメッセージの本体に直列化されたビジネス・オブジェクトが取り込まれている必要があります。

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

表 7. 応答メッセージ
動詞 Feedback フィールド メッセージの本体
Retrieve または RetrieveByContent FAIL FAIL_RETRIEVE_BY_CONTENT (オプション) エラー・メッセージ。
MULTIPLE_HITS SUCCESS 直列化されたビジネス・オブジェクト。
Exist FAIL (オプション) エラー・メッセージ。
SUCCESS

Copyright IBM Corp. 2003, 2005