コネクターは、コラボレーションから渡されたビジネス・オブジェクトを、各ビジネス・オブジェクトの動詞に基づいて処理します。サポートするビジネス・オブジェクトを処理するために、コネクターはビジネス・オブジェクト・ハンドラーと doForVerb() メソッドを使用します。コネクターは、以下のビジネス・オブジェクトの動詞をサポートします。
Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトの処理は、ビジネス・オブジェクトが非同期的に送信されたか同期的に送信されたかによって決まります。
これは、Create 動詞、Update 動詞、および Delete 動詞を持つビジネス・オブジェクトのデフォルト・デリバリー・モードです。データ・ハンドラーを使用して、ビジネス・オブジェクトからメッセージが作成され、出力キューに書き込まれます。メッセージがデリバリーされると、コネクターは SUCCESS を戻します。それ以外の場合は FAIL を戻します。
コネクター固有プロパティーで ReplyToQueue が定義されており、かつビジネス・オブジェクトの変換プロパティーに responseTimeout が存在する場合、コネクターは同期モードで要求を発行します。続いて、コネクターは、受信側のアプリケーションで適切な処置が行われたかどうかを確認するために応答を待ちます。
WebSphere MQ では、コネクターは次の表に示すようなヘッダーを持つメッセージを最初に発行します。
フィールド | 説明 | 値 |
---|---|---|
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 によって定義される定数を示します。
上記の表に示したメッセージ・ヘッダーの後に、メッセージの本体が続きます。メッセージの本体は、データ・ハンドラーを使用して直列化されたビジネス・オブジェクトです。
Report フィールドは、受信側アプリケーションから肯定処理レポートと否定処理レポートの両方の返送が予測されることを示すために設定されます。メッセージを発行したスレッドは、受信側アプリケーションが要求を処理できたかどうかを示す応答メッセージを待ちます。
コネクターから同期要求を受け取ると、アプリケーションはビジネス・オブジェクトを処理し、次の表に示すようなレポート・メッセージを発行します。
フィールド | 説明 | 値 |
---|---|---|
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 (この応答後、コネクター・エージェントは即時に終了します) |
ビジネス・オブジェクトを処理できる場合、アプリケーションは、feedback フィールドが MQFB_PAN (または特定の WebSphere Business Integration システムの値) に設定されたレポート・メッセージを作成します。また、オプションで、アプリケーションは、すべての変更を含む直列化されたビジネス・オブジェクトをメッセージ本体に取り込みます。 ビジネス・オブジェクトを処理できない場合、アプリケーションは、feedback フィールドが MQFB_NAN (または特定の WebSphere Business Integration システムの値) に設定されたレポート・メッセージを作成します。オプションで、このレポート・メッセージの本体にエラー・メッセージを含むこともできます。いずれの場合も、アプリケーションはメッセージの correlationID フィールドをコネクター・メッセージの messageID に設定し、replyTo フィールドで指定されたキューにメッセージを送信します。
コネクターは、応答メッセージを検索すると、デフォルトでは、応答の correlationID を要求メッセージの messageID と突き合わせます。続いて、要求を発行したスレッドに通知を送信します。コネクターは、応答の feedback フィールドの設定によって、メッセージの本体にビジネス・オブジェクトとエラー・メッセージのどちらが含まれているかを予測します。フィードバック・コードが MQFB_NONE (フィードバック・コードが指定されない場合のデフォルト値) の場合、コネクターはデフォルトで戻りコードが VALCHANGE であると見なします。次に、コネクターは、応答メッセージをデータ・ハンドラーに渡し、ビジネス・オブジェクトを更新します。ビジネス・オブジェクトが含まれていると予測したにもかかわらず、メッセージの本体にビジネス・オブジェクトが取り込まれていなかった場合、コネクターは InterChange Server Express が Request 操作のために最初に発行したのと同じビジネス・オブジェクトを単純に返送します。エラー・メッセージが含まれていると予測したにもかかわらず、メッセージの本体にエラー・メッセージが取り込まれていなかった場合、InterChange Server Express には応答コードと汎用エラー・メッセージが返送されます。ただし、メッセージ選択子を使用して、識別やフィルター操作を行うこともできます。あるいは、アダプターが特定の要求に対して応答メッセージを識別する方法を制御できます。このメッセージ選択子機能は、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 Express に渡されます。詳細については、FeedbackCodeMappingMOを参照してください。
Retrieve 動詞、Exists 動詞、および Retrieve By Content 動詞を持つビジネス・オブジェクトは、同期送信のみをサポートします。コネクターは、これらの動詞を持つビジネス・オブジェクトを、Create 動詞、Update 動詞、および Delete 動詞に対して定義されている同期送信と同様に処理します。ただし、Retrieve 動詞、Exists 動詞、および Retrieve By Content 動詞を使用する場合には、responseTimeout と replyToQueue が必須です。さらに、Retrieve By Content 動詞と Retrieve 動詞の場合、トランザクションを完了するためにはメッセージの本体に直列化されたビジネス・オブジェクトが取り込まれている必要があります。
次の表に、これらの動詞に対応する応答メッセージを示します。
動詞 | Feedback フィールド | メッセージの本体 |
---|---|---|
Retrieve または RetrieveByContent | FAIL FAIL_RETRIEVE_BY_CONTENT | (オプション) エラー・メッセージ。 |
MULTIPLE_HITS SUCCESS | 直列化されたビジネス・オブジェクト。 | |
Exist | FAIL | (オプション) エラー・メッセージ。 |
SUCCESS |