概要

Request-Response データ・ハンドラーは、異なるフォーマットの要求データおよび応答データのサポートを提供することが主な役割であるデータ変換モジュールです。つまり、呼び出し側コンテキスト (アダプターや Server Access Interface など) が次の 2 つの異なるデータ・ハンドラーを呼び出せるようにします。

他のデータ・ハンドラーを使用すると、呼び出し側コンテキストは、アプリケーションまたはアクセス・クライアントとデータを送受信するときにデータが同じフォーマットであると想定します。したがって、呼び出し側コンテキストは、単一のデータ・ハンドラーを呼び出して要求および応答ビジネス・オブジェクトの変換を行うよう構成されます。

ただし、XML を入力として受け入れ、カスタム・フォーマット化された文書を出力として戻すレガシー・アプリケーションを使用する場合があります。既存のデータ・ハンドラーでは、この状態に容易に対処できません。しかし、このレガシー・アプリケーションと通信するアダプターを構成して、Request-Response データ・ハンドラーを呼び出すことができます。このデータ・ハンドラーは、入力と出力に以下の異なるデータ・ハンドラーを呼び出すよう構成できます。

要求処理では、統合ブローカーがこのアダプターに要求を送信するとき、アダプターは Request-Response データ・ハンドラーを呼び出して、要求ビジネス・オブジェクトを送信します。Request-Response データ・ハンドラーはその構成を検査して、このビジネス・オブジェクトを XML 文書に変換するために XML データ・ハンドラーを呼び出す必要があるかどうかを判断します。このビジネス・オブジェクトが変換されると、Request-Response データ・ハンドラー は XML 文書をアダプターに戻し、アダプターはそれをレガシー・アプリケーションに発送します。

図 29 に、Request-Response データ・ハンドラーによって実行されるビジネス・オブジェクトからストリングへの変換の例を示します。

図 29. Request-Response データ・ハンドラーによるビジネス・オブジェクトからストリング への変換


その後、アダプターがレガシー・アプリケーションから応答を受け取る場合があります。この応答は、レガシー・アプリケーションのカスタム・フォーマットになります。アダプターは再び Request-Response データ・ハンドラーを呼び出し、応答データを送信します。Request-Response データ・ハンドラーはその構成を検査して、この応答データをビジネス・オブジェクトに変換するためにカスタム・データ・ハンドラーを呼び出す必要があるかどうかを判断します。このデータが変換されると、Request-Response データ・ハンドラーはビジネス・オブジェクトをアダプターに戻し、アダプターはそれを統合ブローカーに発送します。

また、Request-Response データ・ハンドラーは、ICS 統合ブローカーが 1 つのビジネス・ オブジェクト・タイプをコラボレーション・ポートに通知し、1 つ以上の異なるビジネス・オブジェクトを受け取ることも可能にします。例えば、アクセス・クライアントがカスタマー・オブジェクトをコラボレーションに送信し、そのカスタマーの保留注文オブジェクトの配列を受け取ることができます。

Request-Response データ・ハンドラーは、text/requestresponse MIME タイプ の直列化データをサポートします。

その直列化データは、テキスト・データであっても、バイナリー・データであってもかまいません。ただし、デフォルトのトップレベルのメタオブジェクト (MO_DataHandler_Default または MO_Server_DataHandler) は、text/requestresponse MIME タイプ をサポートしません。したがって、アクセス・クライアントまたはコネクターが Request-Response データ・ハンドラーを呼び出すことができるようにするには、text/requestresponse MIME タイプをサポートするように適切なトップレベルのメタオブジェクトを変更する必要があります。詳細については、トップレベルのメタオブジェクトの構成を参照してください。

この概要のセクションでは、Request-Response データ・ハンドラーの次の内容について説明します。

Request-Response データ・ハンドラー・コンポーネント

データ・ハンドラーは、以下のどちらかの方法で直列化データを受け取ることができます。

Request-Response データ・ハンドラーは、ネーム・ハンドラーを使用して、作成するトップレベル・ビジネス・オブジェクトの名前を作成します。Request-Response データ・ ハンドラーのコンポーネントとその関係を図 30 に示します。

図 30. Request-Response データ・ハンドラー・コンポーネント


データ・ハンドラーは、Request-Response データ・ハンドラーの子メタオブジェクト内の NameHandlerClass 属性の値に基づいてネーム・ハンドラーのインスタンスを呼び出します。

この製品で提供されるバージョンのメタオブジェクトでは、NameHandlerClass 属性は空です。このため、Request-Response ネーム・ハンドラーはデフォルトのネーム・ハンドラーを使用します。

Request-Response データ・ハンドラーの機能

Request-Response データ・ハンドラーは、次のどちらの場合にも役立ちます。

イベント処理のサポート

イベント処理には、アプリケーション・ビジネス・エンティティーへの変更を示すイベントの発生を統合ブローカーに通知することが含まれます。イベント通知では、データ・ハンドラーの呼び出し側コンテキストがデータ・ハンドラーを呼び出します。このデータ・ハンドラーは、直列化データをビジネス・オブジェクトに変換します (ビジネス・オブジェクトは統合ブローカーに送信されます)。このストリングからビジネス・オブジェクトへの変換は、要求データ・ハンドラーが実行します。これは、このデータ・ハンドラーが要求 (入力) フォーマットからビジネス・オブジェクトへの変換を処理するためです。

イベント処理は、同期と非同期のいずれかです。ただし、非同期イベント処理ではアダプター (特にアダプターのコネクター・コンポーネント) は統合ブローカーからの応答を待機しないため、以下のようになります。

注:
データ・ハンドラーの呼び出し側コンテキストの詳細については、データ・ハンドラーの呼び出し用のコンテキストを参照してください。

例えば、次のステップは同期イベント処理を示しています。ここでは、Request-Response データ・ハンドラーによって (ICS 内の) Server Access Interface が、あるフォーマット (要求フォーマット) でデータを ICS に送信し、異なる形式のデータ (応答フォーマット) を受信する方法について説明します。これによってアクセス・クライアントは、カスタマー XML 文書を送信し、そのカスタマーの保留注文が含まれる XML 文書を受信するというシナリオを実行できます。

  1. アクセス・クライアントが、ICS 内のコラボレーションによって実行されるイベントを (要求フォーマットのデータとして) 送信します。
  2. ICS が Request-Response データ・ハンドラーの新規インスタンスを作成し、それを要求フォーマットのデータに渡します。
  3. Request-Response データ・ハンドラーが構成済みの要求データ・ハンドラーを呼び出し、その要求データ・ハンドラーが要求フォーマットのデータをビジネス・オブジェクトに変換します。

    Request-Response データ・ハンドラーは getBO() メソッドを使用して、受信した直列化データを処理します。次のいずれかの条件が真の場合、Request-Response データ・ハンドラーは直列化データ上で要求データ・ハンドラーを呼び出します。

    どちらの場合も、Request-Response データ・ハンドラーは要求データ・ハンドラーのインスタンスを作成し、要求データ・ハンドラーを使用して要求フォーマットのデータを要求ビジネス・オブジェクトに変換します。Request-Response データ・ハンドラーは、要求データ・ハンドラーに要求フォーマットのデータを渡します。要求データ・ハンドラーは、対応する要求ビジネス・オブジェクトを戻します。

  4. Request-Response データ・ハンドラーは、次のようにして要求ビジネス・オブジェクトをトップレベル・ビジネス・オブジェクトの子として追加します。
  5. Request-Response データ・ハンドラーは、トップレベル・ビジネス・オブジェクト を (アクセス・クライアントが指定した) コラボレーションに同期的に戻します。
  6. コラボレーションはトップレベル・ビジネス・オブジェクトを受け取り、(要求ビジネス・オブジェクトが含まれる) 子オブジェクトを取り出し、なんらかのビジネス・プロセス を実行します。
  7. コラボレーションは新規の応答ビジネス・オブジェクトを作成し、それをトップレベル・ビジネス・オブジェクトに追加してから、正常に戻ります。

    このトップレベル・ビジネス・オブジェクトは、コラボレーションが Request-Response データ・ハンドラーから受け取ったビジネス・オブジェクトです。コラボレーションがこのビジネス・オブジェクトを更新すると、ビジネス・オブジェクトには元の要求ビジネス・オブジェクトと新たに作成した応答ビジネス・オブジェクトの両方が含まれます。

  8. ICS が変更されたトップレベル・ビジネス・オブジェクトを Request-Response データ・ハンドラー に渡します。
  9. Request-Response データ・ハンドラーは構成済みの応答データ・ハンドラーを呼び出し、応答ビジネス・オブジェクトを応答フォーマットのデータに変換します。

    Request-Response データ・ハンドラーは getStringFromBO() メソッドを使用して、受信したトップレベル・ビジネス・オブジェクトを処理します。トップレベル・ビジネス・オブジェクト内の複数の子ビジネス・オブジェクトを取り込む場合、データ・ハンドラーは、トップレベル・ビジネス・オブジェクトに元の要求ビジネス・オブジェクトとその応答ビジネス・オブジェクトの両方 が 含まれ、その結果として応答ビジネス・オブジェクトを変換する必要があると見なします。したがって、データ・ハンドラーは応答データ・ハンドラーのインスタンスを作成して、トップレベル・ビジネス・オブジェクト内で最後に定義された子ビジネス・オブジェクトを応答ビジネス・オブジェクトとして処理します。

    注:
    getStringFromBO() が受信したトップレベル・ビジネス・オブジェクト内の子ビジネス・オブジェクトを 1 つだけ取り込む場合、データ・ハンドラーは、この子オブジェクトが新規の要求を表すと見なします。したがって、データ・ハンドラーは要求データ・ハンドラーのインスタンスを作成して、要求ビジネス・オブジェクトを (要求フォーマットの) 直列化データに変換します。詳細については、要求処理のサポートを参照してください。
  10. Request-Response データ・ハンドラーが応答フォーマットのデータを 呼び出し元 (ICS 内の Server Access Framework) に戻します。
  11. ICS は応答フォーマットのデータ (応答ビジネス・オブジェクトに基づきます) をアクセス・クライアントに戻します。

コネクターも、executeCollaboration() メソッドを使用して同期イベント処理を実行できます。ただし、一般的に、コネクターはポーリングなどのイベント検出機構を使用して非同期イベント処理を実行します。

要求処理のサポート

要求処理には、統合ブローカーから要求を受け取り、アプリケーション・ビジネス・エンティティー内で適切な変更を開始することが含まれます。アクセス・クライアント (同期) またはコネクター (非同期) によって開始されるイベント処理とは異なり、要求処理は統合ブローカーによって開始され、コネクターのみと通信します (アクセス・クライアントとは通信しません)。

要求処理では、データ・ハンドラーの呼び出し側コンテキストがデータ・ハンドラーを呼び出して、直列化データをビジネス・オブジェクトに変換します (ビジネス・オブジェクトは統合ブローカーに送信されます)。これはストリングからビジネス・オブジェクトへの変換です。

例えば、次のステップは IBM WebSphere InterChange Server 統合ブローカーおよびテクノロジー・アダプターにおける要求処理を示しています。このテクノロジー・アダプターは、Request-Response データ・ハンドラーを使用して要求データおよび応答データを処理するよう構成されています。この例では、要求データのフォーマットと応答データのフォーマットは異なります。

  1. コラボレーションがトップレベル・ビジネス・オブジェクトの新規インスタンスを作成し、要求ビジネス・オブジェクトを子として追加します。
  2. コラボレーションは要求を (トップレベル・ビジネス・オブジェクトの形式で) テクノロジー・コネクターに送信し、コネクターはそのトップレベル・ビジネス・オブジェクトを Request-Response データ・ ハンドラーに渡します。
  3. Request-Response データ・ハンドラーは構成済みの要求データ・ハンドラーを呼び出し、要求ビジネス・オブジェクトを要求フォーマットのデータに変換します。

    Request-Response データ・ハンドラーは getStringFromBO() メソッドを使用して、受信したトップレベル・ビジネス・オブジェクトを処理します。トップレベル・ビジネス・オブジェクト内の子ビジネス・オブジェクトを 1 つだけ 取り込む場合、Request-Response データ・ハンドラーは、この子オブジェクトが新規の要求を表すと見なします。したがって、データ・ハンドラーは要求データ・ハンドラーのインスタンスを作成して、要求ビジネス・オブジェクトを (要求フォーマットの) 直列化データに変換します。

    注:
    getStringFromBO() が受け取ったトップレベル・ビジネス・オブジェクト内の複数の子ビジネス・オブジェクトを取り込む場合、データ・ハンドラーは、トップレベル・ビジネス・オブジェクトに元の要求ビジネス・オブジェクトとその応答ビジネス・オブジェクトの両方 が 含まれ、その結果として応答ビジネス・オブジェクトを変換する必要があると見なします。したがって、データ・ハンドラーは応答データ・ハンドラーのインスタンスを作成して、トップレベル・ビジネス・オブジェクト内で最後に定義された子ビジネス・オブジェクトを応答ビジネス・オブジェクトとして処理します。詳細については、イベント処理のサポートを参照してください。
  4. テクノロジー・コネクターが要求フォーマットのデータをアプリケーションに送信します。
  5. アプリケーションはいくつかのタスクを実行し、応答フォーマットのデータをテクノロジー・コネクターに戻します。
  6. テクノロジー・コネクターは、元のトップレベル・ビジネス・オブジェクトと応答フォーマットのデータの両方を Request-Response データ・ハンドラーに渡します。
  7. Request-Response データ・ハンドラーは構成済みの応答データ・ハンドラーを呼び出し、その応答データ・ハンドラーが応答フォーマットのデータをビジネス・オブジェクトに変換します。

    Request-Response データ・ハンドラーは getBO() メソッドを使用して、受信したトップレベル・ビジネス・オブジェクトと直列化データを処理します。トップレベル・ビジネス・オブジェクト内の子ビジネス・オブジェクトを取り込む場合、Request-Response データ・ハンドラーは、この子オブジェクトが元の要求を表し、その結果として、受信した直列化データが応答フォーマットであると見なします。したがって、データ・ハンドラーは応答データ・ハンドラーのインスタンスを作成して、直列化データを応答ビジネス・オブジェクトに変換します。

    注:
    getBO() が受信したトップレベル・ビジネス・オブジェクト内のすべての子ビジネス・オブジェクトに CxIgnore 値 (子ビジネス・オブジェクトが であることを示します) が含まれる場合、データ・ハンドラーは直列化データが新規要求を表すと見なし、要求データ・ハンドラーのインスタンスを作成してデータを処理します。詳細については、イベント処理のサポートを参照してください。
  8. Request-Response データ・ハンドラーは、応答ビジネス・オブジェクトをトップレベル・ビジネス・オブジェクトの子として追加してから、このトップレベル・ビジネス・オブジェクトを呼び出し元 (テクノロジー・コネクター) に戻します。
  9. テクノロジー・コネクターは更新されたトップレベル・ビジネス・オブジェクトをコラボレーションに戻します。
  10. コラボレーションはトップレベル・ビジネス・オブジェクトを受け取り、その応答ビジネス・オブジェクトの内容をビジネス・プロセスに取り込みます。

要求および応答ビジネス・オブジェクトの処理

Request-Response データ・ハンドラーを使用して、要求ビジネス・オブジェクトを適切な要求フォーマットに変換したり、応答フォーマットのデータを応答ビジネス・オブジェクトに変換するには、表 29 に示すステップを実行する 必要があります。

表 29. Request-Response データ・ハンドラーの使用
ステップ 詳細
1. ビジネス・オブジェクトの構造を記述しているビジネス・オブジェクト定義が存在し、実行中の Request-Response データ・ ハンドラー (およびそのコンポーネントのデータ・ハンドラー) から使用できること。 ビジネス・オブジェクト定義の要件
2. Request-Response データ・ハンドラーが運用環境向けに構成されていること。 Request-Response データ・ハンドラーの構成
3. 適切なデータ操作を実行するため に、Request-Response データ・ハンドラーが呼び出し側コンテキスト (コネクターまたはアクセス・クライアント) から呼び出されること。
a) データ操作: この要求を開始するコンポーネントから要求を受け取り、それを適切なフォーマットに変換する。 要求データ・ハンドラーによるビジネス・オブジェクトの変換
b) データ操作: 要求に応答するコンポーネントから応答を受け取り、それを適切なフォーマットに変換する。 応答データ・ハンドラーによるビジネス・オブジェクトの変換

Copyright IBM Corp. 2004