コネクターは、イベント通知のために、データベース・トリガーではなくアプリケーションによってキューに書き込まれたイベントを検出します。 イベントは、アプリケーションまたはその他の MQ 対応ソフトウェアが WebSphere MQ メッセージを生成して MQ メッセージ・キューに格納するときに発生します。
コネクターは、pollForEvents() メソッドを使用して MQ キューからメッセージを定期的にポーリングします。メッセージを検出すると、コネクターはそれを MQ キューから検索して調べ、メッセージのフォーマットを判別します。 判別されたフォーマットがコネクターの静的オブジェクトで定義されている場合、コネクターは、メッセージの本体とそのフォーマットに関連付けられているビジネス・オブジェクトの新しいインスタンスの両方を、構成されているデータ・ハンドラーに渡します。データ・ハンドラーはビジネス・オブジェクトを取り込み、動詞を指定すると想定されています。判別されたフォーマットが静的メタオブジェクトで定義されていない場合、コネクターはメッセージの本体のみをデータ・ハンドラーに渡します。データ・ハンドラーはメッセージに対する正しいビジネス・オブジェクトを判別して作成し、取り込むと想定されています。イベント失敗のシナリオについては、エラー処理を参照してください。
コネクターは、最初に入力キューとのトランザクション・セッションを開いて、メッセージを処理します。このトランザクション・アプローチを使用すると、コネクターがビジネス・オブジェクトを正常にサブミットしたにもかかわらず、キューでトランザクションをコミットできなかった場合に、コラボレーションにビジネス・オブジェクトが 2 回デリバリーされてしまう可能性が若干あります。この問題を回避するために、コネクターはすべてのメッセージを実行中のキューに移動します。その結果、メッセージは、処理が完了するまでキュー内に保留されます。処理中にコネクターが予期しないエラーでシャットダウンした場合、メッセージは元の入力キューには戻されず、実行中のキュー内に残されます。
WebSphere MQ 対応コネクターは、WebSphere MQ を使用して発行した要求に関するフィードバックを必要とするアプリケーションをサポートするために、オプションでレポート・メッセージをアプリケーションに返送します。このレポート・メッセージには、アプリケーションからの要求の処理が完了した時点での結果が詳細に記述されます。
この処理を実現するために、コネクターはこのような要求のビジネス・データを InterChange Server に同期的に通知します。コラボレーションがビジネス・オブジェクトを正常に処理した場合、コネクターは、InterChange Server からの戻りコードとビジネス・オブジェクトのすべての変更を含むレポートを要求発行者に返送します。コネクターまたはコラボレーションがビジネス・オブジェクトの処理に失敗した場合、コネクターは、該当するエラー・コードとエラー・メッセージを含むレポートを返送します。
いずれの場合も、WebSphere MQ 対応コネクターに要求を送信するアプリケーションは、要求の結果について通知されます。
WebSphere MQ 対応コネクターが肯定確認通知レポートまたは否定確認通知レポート (PAN または NAN) を要求するメッセージを受け取った場合、コネクターはそのメッセージの内容を InterChange Server に同期的に通知し、レポート・メッセージに戻りコードと変更されたビジネス・データを組み込んで、要求を発行したアプリケーションに返送します。
表 1 に、コネクターに送信された WebSphere MQ メッセージが同期的に処理されるために必要な構造を示します。
MQMD フィールド | 説明 | サポートされる値 (複数の値をサポートするには論理和を使用) |
---|---|---|
MessageType | メッセージ・タイプ | DATAGRAM |
report | 要求されたレポート・メッセージのオプション | 次のいずれか一方、または両方を指定できます。
次のいずれかの値を指定すると、レポート・メッセージの相関 ID の設定方法を制御できます。
|
ReplyToQueue | 応答キューの名前 | レポート・メッセージの送信先となるキューの名前。 |
replyToQueueManager | キュー・マネージャーの名前 | レポート・メッセージの送信先となるキュー・マネージャーの名前。 |
メッセージの本体 | コネクターに構成されているデータ・ハンドラーと互換性のあるフォーマットで直列化されたビジネス・オブジェクト。 |
表 1 で説明したメッセージを受け取ると、コネクターは以下の処理を行います。
表 2 に、コネクターから要求発行者に返送されるレポートの構造を示します。
MQMD フィールド | 説明 | サポートされる値 (複数の値がある場合は OR として扱います) |
---|---|---|
MessageType | メッセージ・タイプ | REPORT |
feedback | レポートのタイプ | 次のいずれかです。
|
メッセージの本体 | コラボレーションがビジネス・オブジェクトを正常に処理した場合、コネクターはメッセージの本体にコラボレーションから戻されたビジネス・オブジェクトを取り込みます。このデフォルトの動作は、静的メタデータ・オブジェクトの DoNotReportBusObj プロパティーを true に設定することによりオーバーライドできます。
要求を処理できなかった場合、コネクターはメッセージの本体にコネクターまたはコラボレーションによって生成されたエラー・メッセージを取り込みます。 |
コネクターは初期化の際に実行中のキューを調べ、コネクターのシャットダウンが原因で未処理のまま残っているメッセージがないかどうかを調べます。コネクターの構成プロパティー InDoubtEvents を使用すると、そのようなメッセージのリカバリー処理に関する 4 つのオプション (fail on startup、reprocess、ignore、または log error) のうち、いずれかを指定できます。
fail on startup オプションを指定した場合、コネクターが初期化の際、実行中のキュー内にメッセージを検出すると、コネクターはエラーを記録し、即時にシャットダウンします。ユーザーまたはシステム管理者は、検出されたメッセージを調べ、これらのメッセージを完全に削除するかまたは別のキューに移動するなどの適切な処置を取る必要があります。
reprocessing オプションを指定した場合、コネクターが初期化の際、実行中のキュー内にメッセージを検出すると、コネクターは以降のポーリングでそのメッセージを最初に処理します。実行中のキュー内にあったすべてのメッセージの処理が完了すると、コネクターは入力キューからのメッセージの処理を開始します。
ignore オプションを指定した場合、初期化の際、コネクターが実行中のキュー内にメッセージを検出すると、コネクターはそれを無視しますが、シャットダウンはしません。
log error オプションを指定した場合、初期化の際、コネクターが実行中のキュー内にメッセージを検出すると、コネクターはエラーを記録しますが、シャットダウンはしません。
コネクターのプロパティー ArchiveQueue が指定されており、かつ有効なキューを示している場合には、コネクターは正常に処理されたすべてのメッセージのコピーをアーカイブ・キューに格納します。 ArchiveQueue が未定義の場合、メッセージは処理後に破棄されます。アンサブスクライブされたメッセージまたはエラーを含むメッセージのアーカイブの詳細については、エラー処理を参照してください。