イベント処理

コネクターは、イベント通知のために、データベース・トリガーではなくアプリケーションによってキューに書き込まれたイベントを検出します。 イベントは、アプリケーションまたはその他の MQ 対応ソフトウェアが WebSphere MQ メッセージを生成して MQ メッセージ・キューに格納するときに発生します。

検索

コネクターは、pollForEvents() メソッドを使用して MQ キューからメッセージを定期的にポーリングします。メッセージを検出すると、コネクターはそれを MQ キューから検索して調べ、メッセージのフォーマットを判別します。 判別されたフォーマットがコネクターの静的オブジェクトで定義されている場合、コネクターは、メッセージの本体とそのフォーマットに関連付けられているビジネス・オブジェクトの新しいインスタンスの両方を、構成されているデータ・ハンドラーに渡します。データ・ハンドラーはビジネス・オブジェクトを取り込み、動詞を指定すると想定されています。判別されたフォーマットが静的メタオブジェクトで定義されていない場合、コネクターはメッセージの本体のみをデータ・ハンドラーに渡します。データ・ハンドラーはメッセージに対する正しいビジネス・オブジェクトを判別して作成し、取り込むと想定されています。イベント失敗のシナリオについては、エラー処理を参照してください。

コネクターは、最初に入力キューとのトランザクション・セッションを開いて、メッセージを処理します。このトランザクション・アプローチを使用すると、コネクターがビジネス・オブジェクトを正常にサブミットしたにもかかわらず、キューでトランザクションをコミットできなかった場合に、コラボレーションにビジネス・オブジェクトが 2 回デリバリーされてしまう可能性が若干あります。この問題を回避するために、コネクターはすべてのメッセージを実行中のキューに移動します。その結果、メッセージは、処理が完了するまでキュー内に保留されます。処理中にコネクターが予期しないエラーでシャットダウンした場合、メッセージは元の入力キューには戻されず、実行中のキュー内に残されます。

注:
JMS サービス・プロバイダーとのトランザクション・セッションでは、キュー上の要求されたすべての処理が、キューからイベントが削除される前に実行され、コミットされる必要があります。したがって、コネクターがキューからメッセージを検索するときには、次の 3 つの処理が実行されるまでは検索がコミットされません。1) メッセージからビジネス・オブジェクトへの変換、2) gotApplEvents() メソッドによる、InterChange Server へのビジネス・オブジェクトのデリバリー、および 3) 戻り値の受信。

同期イベント処理

WebSphere MQ 対応コネクターは、WebSphere MQ を使用して発行した要求に関するフィードバックを必要とするアプリケーションをサポートするために、オプションでレポート・メッセージをアプリケーションに返送します。このレポート・メッセージには、アプリケーションからの要求の処理が完了した時点での結果が詳細に記述されます。

この処理を実現するために、コネクターはこのような要求のビジネス・データを InterChange Server に同期的に通知します。コラボレーションがビジネス・オブジェクトを正常に処理した場合、コネクターは、InterChange Server からの戻りコードとビジネス・オブジェクトのすべての変更を含むレポートを要求発行者に返送します。コネクターまたはコラボレーションがビジネス・オブジェクトの処理に失敗した場合、コネクターは、該当するエラー・コードとエラー・メッセージを含むレポートを返送します。

いずれの場合も、WebSphere MQ 対応コネクターに要求を送信するアプリケーションは、要求の結果について通知されます。

処理

WebSphere MQ 対応コネクターが肯定確認通知レポートまたは否定確認通知レポート (PAN または NAN) を要求するメッセージを受け取った場合、コネクターはそのメッセージの内容を InterChange Server に同期的に通知し、レポート・メッセージに戻りコードと変更されたビジネス・データを組み込んで、要求を発行したアプリケーションに返送します。

表 1 に、コネクターに送信された WebSphere MQ メッセージが同期的に処理されるために必要な構造を示します。

表 1. WebSphere MQ に必要なメッセージ構造
MQMD フィールド 説明 サポートされる値 (複数の値をサポートするには論理和を使用)
MessageType メッセージ・タイプ DATAGRAM
report 要求されたレポート・メッセージのオプション 次のいずれか一方、または両方を指定できます。
  • MQRO_PAN コネクターは、ビジネス・オブジェクトが正常に処理された場合にレポート・メッセージを送信します。
  • MQRO_NAN コネクターは、ビジネス・オブジェクトの処理中にエラーが発生した場合にレポート・メッセージを送信します。

次のいずれかの値を指定すると、レポート・メッセージの相関 ID の設定方法を制御できます。

  • MQRO_COPY_MSG_ID_TO_CORREL_ID コネクターは、要求メッセージのメッセージ ID をレポートの相関 ID にコピーします。これはデフォルトのアクションです。
  • MQRO_PASS_CORREL_ID コネクターは、要求メッセージの相関 ID をレポートの相関 ID にコピーします。
ReplyToQueue 応答キューの名前 レポート・メッセージの送信先となるキューの名前。
replyToQueueManager キュー・マネージャーの名前 レポート・メッセージの送信先となるキュー・マネージャーの名前。
メッセージの本体 コネクターに構成されているデータ・ハンドラーと互換性のあるフォーマットで直列化されたビジネス・オブジェクト。

表 1 で説明したメッセージを受け取ると、コネクターは以下の処理を行います。

  1. 構成されているデータ・ハンドラーを使用して、メッセージの本体に含まれるビジネス・オブジェクトを再構成します。
  2. 静的メタデータ・オブジェクト (コラボレーション名を設定できない動的子メタオブジェクトは除く) のビジネス・オブジェクトおよび動詞のために指定されたコラボレーション名を検索します。
  3. 指定されたコラボレーションに、ビジネス・オブジェクトを同期的に通知します。
  4. 処理の結果とビジネス・オブジェクトのすべての変更またはエラー・メッセージをカプセル化したレポートを生成します。
  5. 要求の replyToQueue および replyToQueueManager フィールド内で指定されたキューに、レポートを送信します。

表 2 に、コネクターから要求発行者に返送されるレポートの構造を示します。

表 2. レポートの構造
MQMD フィールド 説明 サポートされる値 (複数の値がある場合は OR として扱います)
MessageType メッセージ・タイプ REPORT
feedback レポートのタイプ 次のいずれかです。
  • MQRO_PAN コラボレーションがビジネス・オブジェクトを正常に処理した場合に、レポートが返送されます。
  • MQRO_NAN 要求の処理中にコネクターまたはコラボレーションがエラーを検出した場合に、レポートが返送されます。
メッセージの本体 コラボレーションがビジネス・オブジェクトを正常に処理した場合、コネクターはメッセージの本体にコラボレーションから戻されたビジネス・オブジェクトを取り込みます。このデフォルトの動作は、静的メタデータ・オブジェクトの DoNotReportBusObj プロパティーを true に設定することによりオーバーライドできます。

要求を処理できなかった場合、コネクターはメッセージの本体にコネクターまたはコラボレーションによって生成されたエラー・メッセージを取り込みます。

リカバリー

コネクターは初期化の際に実行中のキューを調べ、コネクターのシャットダウンが原因で未処理のまま残っているメッセージがないかどうかを調べます。コネクターの構成プロパティー InDoubtEvents を使用すると、そのようなメッセージのリカバリー処理に関する 4 つのオプション (fail on startup、reprocess、ignore、または log error) のうち、いずれかを指定できます。

Fail on startup

fail on startup オプションを指定した場合、コネクターが初期化の際、実行中のキュー内にメッセージを検出すると、コネクターはエラーを記録し、即時にシャットダウンします。ユーザーまたはシステム管理者は、検出されたメッセージを調べ、これらのメッセージを完全に削除するかまたは別のキューに移動するなどの適切な処置を取る必要があります。

Reprocess

reprocessing オプションを指定した場合、コネクターが初期化の際、実行中のキュー内にメッセージを検出すると、コネクターは以降のポーリングでそのメッセージを最初に処理します。実行中のキュー内にあったすべてのメッセージの処理が完了すると、コネクターは入力キューからのメッセージの処理を開始します。

Ignore

ignore オプションを指定した場合、初期化の際、コネクターが実行中のキュー内にメッセージを検出すると、コネクターはそれを無視しますが、シャットダウンはしません。

Log error

log error オプションを指定した場合、初期化の際、コネクターが実行中のキュー内にメッセージを検出すると、コネクターはエラーを記録しますが、シャットダウンはしません。

アーカイブ

コネクターのプロパティー ArchiveQueue が指定されており、かつ有効なキューを示している場合には、コネクターは正常に処理されたすべてのメッセージのコピーをアーカイブ・キューに格納します。 ArchiveQueue が未定義の場合、メッセージは処理後に破棄されます。アンサブスクライブされたメッセージまたはエラーを含むメッセージのアーカイブの詳細については、エラー処理を参照してください。

注:
JMS 規則により、検索したメッセージを即時に別のキューに送信することはできません。メッセージをアーカイブして再デリバリーできるようにするために、コネクターは、オリジナルのメッセージから本体とヘッダー (該当する場合のみ) を複製した第 2 のメッセージを最初に生成します。JMS サービス・プロバイダーとの競合を避けるため、JMS に必須のフィールドのみが複製されます。したがって、format フィールドは、アーカイブまたは再デリバリーされるメッセージにコピーされる唯一の追加メッセージ・プロパティーとなります。

Copyright IBM Corp. 2003, 2005