コネクターは、コラボレーションから渡されたビジネス・オブジェクトを、各ビジネス・オブジェクトの動詞に基づいて処理します。サポートするビジネス・オブジェクトを処理するために、コネクターはビジネス・オブジェクト・ハンドラーと doForVerb() メソッドを使用します。コネクターは、以下のビジネス・オブジェクトの動詞をサポートします。
Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトの処理は、ビジネス・オブジェクトが非同期的に送信されたか同期的に送信されたかによって決まります。
これは、Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトのデフォルト・デリバリー・モードです。データ・ハンドラーを使用して、ビジネス・オブジェクトからメッセージが作成され、出力キューに書き込まれます。メッセージがデリバリーされると、コネクターは SUCCESS を戻します。それ以外の場合は FAIL を戻します。
コネクター固有のプロパティーで ReplyToQueue が定義されており、かつビジネス・オブジェクトの変換プロパティーに responseTimeout が存在する場合、コネクターは同期モードで要求を送信します。続いて、コネクターは、受信側のアプリケーションで適切な処置が行われたかどうかを確認するために応答を待ちます。
WebSphere MQ では、コネクターは表 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 に示すようなレポート・メッセージを発行します。
フィールド | 説明 | 値 |
---|---|---|
Format | フォーマット名 | 変換プロパティー内で定義された busObj の入力フォーマット |
MessageType | メッセージ・タイプ | MQMT_REPORT* |
* は、IBM によって定義される定数を示します。
動詞 | Feedback フィールド | メッセージの本体 |
---|---|---|
Create、Update、または Delete | SUCCESS VALCHANGE | (オプション) 変更を反映する、直列化されたビジネス・オブジェクト。 |
VALDUPES FAIL | (オプション) エラー・メッセージ。 |
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 動詞を持つビジネス・オブジェクトは、同期送信のみをサポートします。コネクターは、これらの動詞を持つビジネス・オブジェクトを、Create 動詞、Update 動詞、および Delete 動詞に対して定義されている同期送信と同様に処理します。ただし、Retrieve 動詞、Exists 動詞、および Retrieve By Content 動詞を使用する場合には、responseTimeout と replyToQueue が必須です。さらに、Retrieve By Content 動詞と Retrieve 動詞の場合、トランザクションを完了するためにはメッセージの本体に直列化されたビジネス・オブジェクトが取り込まれている必要があります。
表 7 に、これらの動詞に対応する応答メッセージを示します。
動詞 | Feedback フィールド | メッセージの本体 |
---|---|---|
Retrieve または RetrieveByContent | FAIL FAIL_RETRIEVE_BY_CONTENT | (オプション) エラー・メッセージ。 |
MULTIPLE_HITS SUCCESS | 直列化されたビジネス・オブジェクト。 | |
Exist | FAIL | (オプション) エラー・メッセージ。 |
SUCCESS |