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 データ・ ハンドラーのコンポーネントとその関係を図 30 に示します。
図 30. Request-Response データ・ハンドラー・コンポーネント
データ・ハンドラーは、Request-Response データ・ハンドラーの子メタオブジェクト内の NameHandlerClass 属性の値に基づいてネーム・ハンドラーのインスタンスを呼び出します。
例えば、ユーザーが REQUESTTEST のデフォルトの BOPrefix を 指定し、要求データ・ハンドラーがビジネス・オブジェクト Customer を生成 する場合、Request-Response データ・ハンドラーは REQUESTTEST_Customer というトップレベルのオブジェクトを作成し、その子オブジェクトのいずれかを Customer オブジェクト に取り込みます。
カスタム・ネーム・ハンドラーを指定するには、NameHandlerClass をカスタム・ネーム・ハンドラー・クラスの名前に設定してください。カスタム・ネーム・ハンドラーの作成方法については、Request-Response データ・ハンドラーのカスタマイズを参照してください。
この製品で提供されるバージョンのメタオブジェクトでは、NameHandlerClass 属性は空です。このため、Request-Response ネーム・ハンドラーはデフォルトのネーム・ハンドラーを使用します。
Request-Response データ・ハンドラーは、次のどちらの場合にも役立ちます。
イベント処理には、アプリケーション・ビジネス・エンティティーへの変更を示すイベントの発生を統合ブローカーに通知することが含まれます。イベント通知では、データ・ハンドラーの呼び出し側コンテキストがデータ・ハンドラーを呼び出します。このデータ・ハンドラーは、直列化データをビジネス・オブジェクトに変換します (ビジネス・オブジェクトは統合ブローカーに送信されます)。このストリングからビジネス・オブジェクトへの変換は、要求データ・ハンドラーが実行します。これは、このデータ・ハンドラーが要求 (入力) フォーマットからビジネス・オブジェクトへの変換を処理するためです。
イベント処理は、同期と非同期のいずれかです。ただし、非同期イベント処理ではアダプター (特にアダプターのコネクター・コンポーネント) は統合ブローカーからの応答を待機しないため、以下のようになります。
例えば、次のステップは同期イベント処理を示しています。ここでは、Request-Response データ・ハンドラーによって (ICS 内の) Server Access Interface が、あるフォーマット (要求フォーマット) でデータを ICS に送信し、異なる形式のデータ (応答フォーマット) を受信する方法について説明します。これによってアクセス・クライアントは、カスタマー XML 文書を送信し、そのカスタマーの保留注文が含まれる XML 文書を受信するというシナリオを実行できます。
Request-Response データ・ハンドラーは getBO() メソッドを使用して、受信した直列化データを処理します。次のいずれかの条件が真の場合、Request-Response データ・ハンドラーは直列化データ上で要求データ・ハンドラーを呼び出します。
すべての子ビジネス・オブジェクトに CxIgnore 値 (子ビジネス・オブジェクトが空 であることを示します) が含まれる場合、データ・ハンドラーは直列化データが新規要求を表すと見なします。
どちらの場合も、Request-Response データ・ハンドラーは要求データ・ハンドラーのインスタンスを作成し、要求データ・ハンドラーを使用して要求フォーマットのデータを要求ビジネス・オブジェクトに変換します。Request-Response データ・ハンドラーは、要求データ・ハンドラーに要求フォーマットのデータを渡します。要求データ・ハンドラーは、対応する要求ビジネス・オブジェクトを戻します。
このトップレベル・ビジネス・オブジェクトは、コラボレーションが Request-Response データ・ハンドラーから受け取ったビジネス・オブジェクトです。コラボレーションがこのビジネス・オブジェクトを更新すると、ビジネス・オブジェクトには元の要求ビジネス・オブジェクトと新たに作成した応答ビジネス・オブジェクトの両方が含まれます。
Request-Response データ・ハンドラーは getStringFromBO() メソッドを使用して、受信したトップレベル・ビジネス・オブジェクトを処理します。トップレベル・ビジネス・オブジェクト内の複数の子ビジネス・オブジェクトを取り込む場合、データ・ハンドラーは、トップレベル・ビジネス・オブジェクトに元の要求ビジネス・オブジェクトとその応答ビジネス・オブジェクトの両方 が 含まれ、その結果として応答ビジネス・オブジェクトを変換する必要があると見なします。したがって、データ・ハンドラーは応答データ・ハンドラーのインスタンスを作成して、トップレベル・ビジネス・オブジェクト内で最後に定義された子ビジネス・オブジェクトを応答ビジネス・オブジェクトとして処理します。
コネクターも、executeCollaboration() メソッドを使用して同期イベント処理を実行できます。ただし、一般的に、コネクターはポーリングなどのイベント検出機構を使用して非同期イベント処理を実行します。
要求処理には、統合ブローカーから要求を受け取り、アプリケーション・ビジネス・エンティティー内で適切な変更を開始することが含まれます。アクセス・クライアント (同期) またはコネクター (非同期) によって開始されるイベント処理とは異なり、要求処理は統合ブローカーによって開始され、コネクターのみと通信します (アクセス・クライアントとは通信しません)。
要求処理では、データ・ハンドラーの呼び出し側コンテキストがデータ・ハンドラーを呼び出して、直列化データをビジネス・オブジェクトに変換します (ビジネス・オブジェクトは統合ブローカーに送信されます)。これはストリングからビジネス・オブジェクトへの変換です。
例えば、次のステップは IBM WebSphere InterChange Server 統合ブローカーおよびテクノロジー・アダプターにおける要求処理を示しています。このテクノロジー・アダプターは、Request-Response データ・ハンドラーを使用して要求データおよび応答データを処理するよう構成されています。この例では、要求データのフォーマットと応答データのフォーマットは異なります。
Request-Response データ・ハンドラーは getStringFromBO() メソッドを使用して、受信したトップレベル・ビジネス・オブジェクトを処理します。トップレベル・ビジネス・オブジェクト内の子ビジネス・オブジェクトを 1 つだけ 取り込む場合、Request-Response データ・ハンドラーは、この子オブジェクトが新規の要求を表すと見なします。したがって、データ・ハンドラーは要求データ・ハンドラーのインスタンスを作成して、要求ビジネス・オブジェクトを (要求フォーマットの) 直列化データに変換します。
Request-Response データ・ハンドラーは getBO() メソッドを使用して、受信したトップレベル・ビジネス・オブジェクトと直列化データを処理します。トップレベル・ビジネス・オブジェクト内の子ビジネス・オブジェクトを取り込む場合、Request-Response データ・ハンドラーは、この子オブジェクトが元の要求を表し、その結果として、受信した直列化データが応答フォーマットであると見なします。したがって、データ・ハンドラーは応答データ・ハンドラーのインスタンスを作成して、直列化データを応答ビジネス・オブジェクトに変換します。
Request-Response データ・ハンドラーを使用して、要求ビジネス・オブジェクトを適切な要求フォーマットに変換したり、応答フォーマットのデータを応答ビジネス・オブジェクトに変換するには、表 29 に示すステップを実行する 必要があります。
表 29. Request-Response データ・ハンドラーの使用
ステップ | 詳細 |
---|---|
1. ビジネス・オブジェクトの構造を記述しているビジネス・オブジェクト定義が存在し、実行中の Request-Response データ・ ハンドラー (およびそのコンポーネントのデータ・ハンドラー) から使用できること。 | ビジネス・オブジェクト定義の要件 |
2. Request-Response データ・ハンドラーが運用環境向けに構成されていること。 | Request-Response データ・ハンドラーの構成 |
3. 適切なデータ操作を実行するため に、Request-Response データ・ハンドラーが呼び出し側コンテキスト (コネクターまたはアクセス・クライアント) から呼び出されること。 |
|
a) データ操作: この要求を開始するコンポーネントから要求を受け取り、それを適切なフォーマットに変換する。 | 要求データ・ハンドラーによるビジネス・オブジェクトの変換 |
b) データ操作: 要求に応答するコンポーネントから応答を受け取り、それを適切なフォーマットに変換する。 | 応答データ・ハンドラーによるビジネス・オブジェクトの変換 |