# データサービスプロバイダーの作成

このシナリオでは、データサービスプロバイダーでtESBProviderRequestコンポーネントとtESBProviderResponseコンポーネントを使って、空港のウェブサービスへのアクセスを可能にし、tXMLMapコンポーネントを使って、MySQLデータベースから提供される空港のデータを要求・応答呼び出しメインフローに結合して、公開します。データベースのデータはtMysqlInputコンポーネントによりロードされます。

## データサービスプロバイダージョブの作成

### 手順

1. [Repository] (リポジトリー)ツリービューの[Services] (サービス)ノードの下で、定義したばかりの空港ウェブサービスの操作を右クリックし、コンテキストメニューから[Assign Job] (ジョブを割り当て)を選択します。このシナリオでは、この操作は*getAirportInformationByISOCountryCode*です。
2. [Assign Job] (ジョブを割り当て)ウィザードが開きます。[Create a new Job and Assign it to this Service] (新規ジョブをサービスに割り当て)を選択し、[Next] (次へ)をクリックします。
3. ウィザードの[New Job] (新規ジョブ)ビューで、作成するジョブに自動的に名前が付いているため、[Finish] (終了)をクリックします。ワークスペースでジョブのドラフトが開きます。

## プロバイダー用にコンポーネントをドロップしてリンク

ジョブのドラフトでは、tESBProviderRequestとtESBProviderResponseが既に選択され設定されています。tESBProviderRequestにより、指定したウェブサービスに要求が送信され、tESBProviderResponseにより、その要求への応答が返されます。これらのコンポーネントは、[Palette] (パレット)の[ESB]グループにあります。

### 手順

1. tESBProviderRequestを右クリックし、それをクリックしたままtESBProviderResponseにドラッグし、この2つのコンポーネントをリンクします。
2. [Palette] (パレット)から行リンクの中央にtXMLMapを配置し、ポップアップウィンドウで出力リンクに名前(*airport\_response*など)を付けます。これはtXMLMapのマップエディターの出力テーブルの名前としても使用されます。

   その結果、データサービスプロバイダーのジョブは次の図のようになります:

   ![デザインワークスペース内のジョブのスクリーンショット。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/ESB_WSDLFirstProvider1.png)

   赤いxアイコンにより、tXMLMapコンポーネントの設定が求められます。
3. [Repository] (リポジトリー)ツリービューの[Db Connections] (DB接続)ノードからワークスペースに、空港データへの接続(この例では*airport*データベーステーブル)を配置します。[Components] (コンポーネント)ウィザードが開きます。

   [Repository] (リポジトリー)でデータベース接続を作成する方法は、[Studioでメタデータを管理](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/managing-metadata-in-studio)をご覧ください。
4. このウィザードでtMysqlInputをダブルクリックし、ワークスペースで該当するコンポーネントを作成して、それをtXMLMapにリンクさせます。

### タスクの結果

このシナリオでは、空港データは、空港名と該当する国コードで構成されます。次の表は、使用中のデータベーステーブルを示しています。

![データベーステーブル。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-database_table.png)

これまで、tXMLMap以外のコンポーネントは自動的に設定されていたため、tXMLMapをのみを設定する必要がありました。

## tXMLMapの設定

### 手順

1. デザインワークスペースでtXMLMapをダブルクリックし、エディターを開きます。

   ![\[Map Editor\] (マップエディター)](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-xmlmap.png)
2. 入力フロー側(左)のメインの行テーブルでpayloadという名前のカラムを右クリックし、コンテキストメニューから[Import from Repository] (リポジトリーからインポート)を選択します。[Metadatas] (メタデータ)ウィザードが開きます。

   XMLツリーの作成方法の詳細は、[ドキュメントタイプを使ってXMLツリーを作成](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/using-document-type-to-create-xml-tree)をご覧ください。
3. このウィザードで[File XML] (XMLファイル)ノードを展開し、リクエスト側のスキーマを選択し、[OK]をクリックして選択を確定します。この例では、スキーマは*getAirportInformationByISOCountryCode*です。

   ![\[Metadata\] (メタデータ)ウィザード。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-get_schema.png)
4. 同じ手順を実行して、応答側(右)の階層スキーマをインポートします。この例では、スキーマは*getAirportInformationByISOCountryCodeResponse*です。
5. ルックアップデータへの結合を作成するため、入力フロー側(左)のメインの行テーブルで*CountryAbbrviation*ノードをクリックし、それをクリックしたまま、ルックアップフローのExp.keyカラムにドロップします。これは*id*行に対応するものです。
6. ルックアップフローを表すテーブルで右上のレンチアイコンをクリックし、設定パネルを開きます。
7. [Lookup Model] (ルックアップモデル)を[Reload at each row] (行ごとにリロード)に設定し、[Match Model] (一致モデル)を[All matches] (すべて一致)に設定し、[Join Model] (結合モデル)を[Inner join] (内部結合)に設定します。

   ![ルックアップフローテーブルのスクリーンショット。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-xmlmap_lookup.png)

   詳細情報:
   * Lookup Modelについては、[ルックアップを処理](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/handling-lookups)をご覧ください。
   * Match Modelについては、[明示的結合を使用する方法](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/using-explicit-join)をご覧ください。
   * Join Modelについては、[内部結合を使用](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/using-inner-join)をご覧ください。
   * tXMLMapについては、[tXMLMapの操作](https://help.qlik.com/talend/ja-JP/studio-user-guide/8.0/txmlmap-operation)をご覧ください。
8. 同じ手順を繰り返して、出力側(右)の設定パネルを開き、[All in one] (オールインワン)オプションを[true] (真)に設定します。これにより、1つの要求が送信されると1つの応答のみが返されます。この設定を行わないと、所定のデータベースの空港データは複数の空港のデータを提供する場合があり、1つの要求として送信した国コードに対して複数の応答が返されることがあります。

   [All in one] (オールインワン)の詳細は、[エレメントを1つのドキュメントに出力する方法](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/outputing-elements-into-one-document)をご覧ください。

   ![出力テーブルのスクリーンショット。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-all_in_one.png)
9. ルックアップフロー(左)で名前の行をクリックし、それをクリックしたまま[Expression] (式)カラムにドロップします。これは出力フロー(このサンプルではairport\_response)のXMLツリービューの*tns:getAirportInformationByISOCountryCodeResult*ノードに対応します。

   tXMLMapエディターは次のようになります:

   ![\[Map Editor\] (マップエディター)](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-xmlmap-config.png)

   情報メモ注:

   実際は、ルックアップに階層データも追加できます。
10. [OK]をクリックしてエディターを閉じ、この設定を有効にします。

## プロバイダージョブの実行

### このタスクについて

これでコンポーネントが設定されたため、ジョブを実行できます。

この設定は次のように行います。

### 手順

F6を押してこのジョブを実行します。実行が開始されると[Run] (実行)ビューが開き、実行結果が表示されます。

![ジョブの実行に成功した後のコンソール結果のスクリーンショット。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-provider_result.png)

### タスクの結果

データサービスプロバイダーのジョブが実行されると、[Kill] (強制終了)ボタンをクリックして停止するまで、ウェブサービスに送信されるすべての要求がリッスンされます。デフォルトで、tESBProviderRequestの[Basic settings] (基本設定)ビューの[Keep listening] (リスニングの継続)が自動的に選択されています。

### 次のタスク

作成したばかりのデータサービスプロバイダーのジョブに実際の要求を送信するコンシューマーのジョブを設定する必要があります。