サービス呼び出し

アクション・ノードは、それ自体ではコネクターまたは別のコラボレーションに要求を送信することはできません。

代わりに、ユーザーがアクション・ノードをサービス呼び出しに接続する必要があります。InterChange Server Express では、同期および非同期のサービス呼び出しがサポートされています。以下は、Retrieve 要求を使用する同期サービス呼び出しの例です。

サービス呼び出しは常にアクションに接続されます。アクションは、サービス呼び出しを生成し、サービス呼び出しの結果をその出力遷移リンク上で処理します。アクションとサービス呼び出しはペアとして機能し、サービス呼び出しはアクションのリモート入出力関数を実行します。

図 40 に、アクション・ノードとサービス呼び出し間の関係を示します。この図は、コラボレーション・ランタイム環境がアクションおよびそのサービス呼び出しを処理する順序を示します。

図 40. アクション・ノードとサービス呼び出しの関係


図 40 に、コラボレーション・ランタイム環境が最初にアクションのコードを処理し、次にサービス呼び出しを実行する様子を示します。サービス呼び出しが完了すると、アクション・ノードの出力遷移リンクがその結果を処理します。サービス呼び出しを生成するアクション・ノードの場合、ServiceCallException 例外をチェックする出力例外リンクを組み込むことをお勧めします。

サービス呼び出しのタイプ

InterChange Server Express では、同期、非同期アウトバウンド、非同期インバウンドの 3 つのタイプのサービス呼び出しがサポートされています。以下のセクションでは、呼び出しの各タイプについて説明します。

同期サービス呼び出し

このタイプのサービス呼び出しは、同期要求/応答機構を使用します。サービス呼び出しは、要求を送信しますが、応答が到着して処理されるまではその処理が完了しません。

同期サービス呼び出しでは、差し戻しがサポートされています。また、長期存続ビジネス・プロセスのタイムアウト値もサポートされています。

デフォルトでは、アクティビティー・ダイアグラムに追加されるすべてのサービス呼び出しは同期サービス呼び出しです。必要に応じて、シナリオでタイプを変更できます。

非同期アウトバウンド・サービス呼び出し

非同期アウトバウンド・サービス呼び出しは要求を送信しますが、応答を待たずに処理を続行します。非同期アウトバウンド・サービス呼び出しを使用するために、コラボレーション・テンプレートは長期存続ビジネス・プロセスをサポートしている必要があります。

非同期アウトバウンド・サービス呼び出しに設定されているポートが、コネクターではなくコラボレーションにバインドされている場合、このサービス呼び出しは自動的に同期サービス呼び出しになります。

「非同期アウトバウンド」サービス呼び出しでは、差し戻しはサポートされますが、長期存続ビジネス・プロセスのタイムアウト値はサポートされません。

非同期インバウンド・サービス呼び出し

非同期インバウンド・サービス呼び出しは、受信イベントを識別する相関属性または相関属性のセットに基づいて受信イベントの受信を待機します。この呼び出しは長期存続ビジネス・プロセスとともに使用されます。(詳細については、相関属性の使用を参照。)

非同期インバウンド・サービス呼び出しが作成されると、タイムアウト値が付与されます。サービス呼び出しがこのタイムアウト値以内に受信イベントを受信しない場合、例外 TimeoutException が発生します。

非同期インバウンド・サービス呼び出しを使用できるのは、コラボレーション・テンプレートで長期存続ビジネス・プロセスがサポートされる場合のみです。このサポートは、テンプレート定義の「一般」タブで「長期存続ビジネス・プロセスのサポート」オプションをクリックして、テンプレート作成時にいつでも使用可能にできます。

非同期インバウンド・サービス呼び出しでは、差し戻しはサポートされません。

サービス呼び出しの作成

サービス呼び出しをアクティビティー・ダイアグラムに追加する手順は、以下のとおりです。

  1. ダイアグラム・エディターが開いていることを確認します。
  2. ワークスペースで、サービス呼び出しを関連付けるアクション・ノードのシンボルを右マウス・ボタンでクリックします。
  3. コンテキスト・メニューから「サービス・ノードを追加」をクリックします。これでサービス呼び出しがアクティビティー・ダイアグラムに追加され、サービス呼び出しとアクション・ノードが点線で結ばれます。デフォルトでは、サービス呼び出しのタイプは同期です。

サービス呼び出しの定義

サービス呼び出しを作成したら、それを定義する必要があります。「Service Call Properties」ダイアログ・ボックスを使用して、以下の必須プロパティーを指定します。

オプションで、以下も指定できます。

ヒント

サービス呼び出しが戻されたとき、ビジネス・オブジェクト変数には呼び出しの結果が含まれます。サービス呼び出しがビジネス・オブジェクトに関する新しいデータを取得すると、元のビジネス・オブジェクトのデータは失われます。このため、元のビジネス・オブジェクト値が必要になると予期される場合は、サービス呼び出しを呼び出すアクションの一時変数に元のビジネス・オブジェクトをコピーしておくと便利です。

通常のサービス呼び出し (差し戻しや相関セットを使用しないサービス呼び出し) を定義する手順は、以下のとおりです。

  1. アクティビティー・ダイアグラムで、作成済みのサービス呼び出しシンボルをダブルクリックします。図 41 に示すように、「Service Call Properties」ダイアログ・ボックスが表示されます。サービス呼び出しの「ラベル」フィールドに値を直接入力することはできません。

    サービス呼び出し定義が完了すると、ラベルが割り当てられます。

    図 41. 「Service Call Properties」ダイアログ・ボックス


  2. オプションで、このサービス呼び出しの説明を入力します。
  3. 「ポート」ドロップダウン・リストを使用して、サービス呼び出しが要求の送受信に使用するポートを選択します。
  4. 「動詞」ドロップダウン・リストを使用して、要求に使用する動詞を指定します。例えば、サービス呼び出しが送信するビジネス・オブジェクトに含まれるデータを使用してアプリケーションを更新する場合は、Update 動詞を使用します。
  5. 「BO 変数」ドロップダウン・リストを使用して、サービス呼び出しが送信するビジネス・オブジェクトが含まれる変数を選択します。長期存続ビジネス・プロセスをサポートする場合には、この変数はグローバル・テンプレート変数またはポート変数でなければなりません。長期存続ビジネス・プロセスをサポートする場合にはシナリオ変数は使用できません。
  6. 「適用」をクリックして定義を保管します。

サービス呼び出しタイプの定義

サービス呼び出しのタイプを変更する手順は、以下のとおりです。

  1. 「Service Call Properties」ダイアログ・ボックスが開いていない場合、アクティビティー・ダイアグラムのサービス呼び出しシンボルをダブルクリックして表示します。
  2. サービス呼び出しに、必須のポート名、動詞、ビジネス・オブジェクト変数名が指定されているか確認します。
  3. 「Service Call Properties」ダイアログ・ボックスの「拡張」ボタンをクリックします。「Service Call Advanced Properties」ダイアログ・ボックスが表示されます。

    図 42. 「Service Call Advanced Properties」ダイアログ・ボックス


  4. 「呼び出しタイプ」ボックスで、使用するサービス呼び出しのタイプの横にあるラジオ・ボタンをクリックします。
    注:
    「非同期インバウンド」オプションが選択可能なのは、テンプレート定義で長期存続ビジネス・プロセスのサポートを使用可能にしてある場合のみです。
  5. 同期サービス呼び出しまたは非同期インバウンド・サービス呼び出しを使用していて、長期存続ビジネス・プロセスに使用するタイムアウト値を指定する場合、「タイムアウト」チェック・ボックスをクリックして、以下のいずれかのタイムアウト値を設定します。

    注:
    同期サービス呼び出しのポートがコネクターではなくコラボレーションにバインドされている場合には、指定されるタイムアウト値は無視されます。
  6. 「OK」をクリックして「Service Call Advanced Properties」ダイアログ・ボックスを閉じます。
  7. 「Service Call Properties」ダイアログ・ボックスの「適用」ボタンをクリックして変更内容を保管します。

差し戻しの定義

コラボレーションのサブトランザクション・ステップにより、トランザクション・コラボレーションのトランザクションの振る舞いを定義します。

サブトランザクション は、アプリケーション・データ・ストアのトランザクション・データを変更する要求をコラボレーションが送信する操作です。

サービス呼び出しにより、サブトランザクション・ステップが実装されます。Create、Delete、または Update 要求を持つサービス呼び出しは、サブトランザクション・ステップです。ただし、Retrieve 要求はサブトランザクション・ステップではありません (データが変更されないため)。

その他の動詞は、アプリケーション・データ・ストアのデータを変更するかどうかにより、トランザクションであるかどうかが決まります。

注:
Retrieve 要求を使用したサービス呼び出しはサブトランザクション・ステップとしてみなされませんが、この呼び出しの差し戻しを指定できます。

トランザクションの振る舞いをサポートするコラボレーション・テンプレートを作成するには、サブトランザクション・ステップごとに差し戻し を定義します。

差し戻しは論理的な取り消しアクションです。つまり、コラボレーション・オブジェクトの実行が失敗すると、前に実行された操作がロールバックされます。ロールバックが行われると、コラボレーション・ランタイム環境ステップが実行経路に応じて逆戻りします。この場合、すでに実行され、差し戻しが定義されているすべての通常ステップに対して差し戻しステップが実行されます。この結果、ロールバックにより、データは、トランザクション・コラボレーションが実行される前の状態に戻されます。

Process Designer Express に表示されるとおり、サブトランザクション・ステップは、Create、Update、または Delete などの操作を要求するサービス呼び出しです。

これらの操作により、常にアプリケーション内のトランザクションのデータが変更されます。また、Retrieve 操作を要求するサービス呼び出しの差し戻しも指定できます。ただし Retrieve 操作実行時にはデータは変更されないため、差し戻しを実行する必要はありません。サービス呼び出しは、コラボレーションが別のコラボレーションまたはコネクターに送信する特定の動詞を持つビジネス・オブジェクトによって定義されます。この操作の差し戻しは、別のビジネス・オブジェクトおよび動詞です。サービス呼び出しに対しては、任意のビジネス・オブジェクトおよび動詞を差し戻しとして使用できます。

表 37 に、差し戻しの共通タイプの一部を示します。

表 37. 差し戻しの例
アクション 差し戻し
ビジネス・オブジェクトの作成 ビジネス・オブジェクトの削除
ビジネス・オブジェクトの削除 ビジネス・オブジェクトの作成
ビジネス・オブジェクトの更新 以前の値を復元して、ビジネス・オブジェクトを更新

差し戻しは、同期サービス呼び出しと非同期アウトバウンド・サービス呼び出しでサポートされます。コラボレーションがトランザクションであり、このサービス呼び出しの動詞がデータの変更を要求する場合、通常のサービス呼び出しをロールバックする差し戻し操作を指定できます。差し戻しを定義する手順は、以下のとおりです。

  1. 「Service Call Properties」ダイアログ・ボックスが開いていない場合、アクティビティー・ダイアグラムのサービス呼び出しシンボルをダブルクリックして表示します。
  2. 「差し戻し」チェック・ボックスをクリックします。「差し戻しサービス呼び出し」ボックスの「ポート」、「動詞」、「BO 変数」の各フィールドがアクティブになります。
  3. 「差し戻しサービス呼び出し」ボックスで、差し戻しサービス呼び出しに使用するポート、動詞、ビジネス・オブジェクト変数を選択します。差し戻しサービス呼び出しでは、通常サービス呼び出しとして同一のポート、動詞、およびビジネス・オブジェクトを使用できます。または、異なるポート、動詞、およびビジネス・オブジェクトを指定することもできます。
  4. 「適用」をクリックして変更内容を保管します。

トランザクション・コラボレーションについては、"トランザクション機能の使用"を参照してください。

相関属性の使用

相関属性により会話が識別されます。 会話 とは、2 つのビジネス・プロセス間での首尾一貫した情報伝達の単位です。2 つ以上のビジネス・プロセスが相互に通信する場合には複数の会話が発生するため、相関属性によって会話を識別する必要があります。相関属性は会話の UID として考えることができます。この ID は会話開始時に初期化されます。後続の参加プログラムが会話に加わるときには、この ID を使用する必要があります。

InterChange Server Express ではシナリオ当たり 1 つの会話のみがサポートされています。複数の会話が必要な場合には、コラボレーション・テンプレート内で複数のシナリオを使用するか、または複数のコラボレーション・テンプレートを使用する必要があります。また、相関属性の初期化はシナリオ内で 1 回のみ実行できます。

相関属性を使用するには、以下の条件を満たしていることを確認してください。

サービス呼び出しで相関属性を使用すると、ビジネス・オブジェクトが自動的に判別されます。これは常に、サービス呼び出しで使用されるポートに割り当てられているビジネス・オブジェクトです。

シナリオで初期化された相関属性をアウトバウンド・サービス呼び出しに設定し (相関属性の設定を参照)、非同期インバウンド・サービス呼び出しで属性をマッチングできます (相関属性のマッチングを参照)。

相関属性の初期化

相関属性を使用するには、最初に初期化を行います。相関属性を初期化するときに、ビジネス・オブジェクト属性と、属性の値を収集するために使用するテンプレート変数を指定します。アウトバウンド・サービス呼び出しに相関属性を設定する前、またはランタイム環境で相関属性のマッチングを実行する前に初期化を実行してください。

開始ノード、非同期アウトバウンド・サービス呼び出し、または同期サービス呼び出しで初期化を実行できます。

サービス呼び出しの相関属性を定義および初期化する手順は、以下のとおりです。

  1. Process Designer Express が開いており、「Service Call Properties」ダイアログ・ボックスが表示されていることを確認します。
  2. 「拡張」をクリックします。「Service Call Advanced Properties」ダイアログ・ボックスが表示されます。
  3. 「相関セット」をクリックします。ビジネス・オブジェクト変数が、サービス呼び出しのアウトバウンド・ポートへ割り当てられる変数として自動的に定義される点に注意してください。
  4. 「初期化」をクリックします。
  5. 相関に使用する各ビジネス・オブジェクト属性の隣のチェック・ボックスをクリックします。
  6. 選択した属性ごとに、属性値の収集および保管に使用されるテンプレート変数を「相関」列のドロップダウン・リストから選択します。
  7. 「適用」をクリックします。

開始ノードの相関セットを初期化する手順は、「初期化」チェック・ボックスをクリックする点を除き上記の手順と同じです。開始ノードは相関属性のマッチングに関連していないので、初期化は暗黙に実行されます。

相関属性の設定

相関セットの定義と初期化が完了したら、相関セットをアウトバウンド・サービス呼び出しに割り当てることができます。次にサービス呼び出しは、相関セットが組み込まれている要求を送信します。相関属性を設定できるアウトバウンド・サービス呼び出しの数に制限はありません。

アウトバウンド・サービス呼び出しで相関属性を設定する手順は、以下のとおりです。

  1. Process Designer Express が開いており、アウトバウンド・サービス呼び出しの「Service Call Properties」ダイアログ・ボックスが表示されていることを確認します。
  2. 「拡張」をクリックします。「Service Call Advanced Properties」ダイアログ・ボックスが表示されます。
  3. 「相関セット」をクリックします。
  4. 初期化済み相関セットで定義されている各ビジネス・オブジェクト属性の隣のチェック・ボックスをクリックします。
  5. 選択した属性ごとに、属性値の収集および保管に使用されるテンプレート変数を「相関」列のドロップダウン・リストから選択します。この変数は、相関設定の初期化時に使用された変数でなければなりません。
  6. 「適用」をクリックします。

相関属性のマッチング

相関セットの初期化が完了したら、特定の相関セットと一致する応答を受信できるように非同期インバウンド・サービス呼び出しを構成できます。

非同期インバウンド・サービス呼び出しに相関セットを指定する手順は、以下のとおりです。

  1. Process Designer Express が開いており、非同期インバウンド・サービス呼び出しの「Service Call Properties」ダイアログ・ボックスが表示されていることを確認します。
  2. 「拡張」をクリックします。「Service Call Advanced Properties」ダイアログ・ボックスが表示されます。
  3. 「相関セット」をクリックします。
  4. 初期化済み相関セットで定義されている各ビジネス・オブジェクト属性の隣のチェック・ボックスをクリックします。
  5. 選択した属性ごとに、属性値の収集および保管に使用されるテンプレート変数を「相関」列のドロップダウン・リストから選択します。この変数は、相関設定の初期化時に使用された変数でなければなりません。
  6. 「適用」をクリックします。

実行時に、非同期インバウンド・サービス呼び出しの属性が相関セットで定義されている属性と一致する場合には、サービス呼び出しはシナリオにより呼び出されます。属性が一致しない場合には、一致する相関セットが定義されている他のシナリオまたはコラボレーションへサービス呼び出しの経路が設定されます。

結果の処理

サービス呼び出しが実行されると、シナリオは、状況とビジネス・オブジェクトという 2 つの戻り値を受け取ります。表 38 で、それぞれの使用について説明します。

表 38. サービス呼び出しの戻り値
戻り値 説明
状況 サービス呼び出しを生成したアクションの通常の出力遷移リンクは、サービス呼び出しが成功かどうかテストします。例外遷移リンクは、ServiceCallException 例外をチェックし、サービス呼び出しが失敗かどうかテストします。

サービス呼び出しは、トランスポート問題やアプリケーション問題が原因で失敗することがあります。転送障害によってデータが重複する可能性があるため、サービス呼び出しの障害が転送問題が原因であるかどうかを確認することが重要です。詳細については、特定のサービス呼び出し例外の処理を参照してください。

ビジネス・オブジェクト サービス呼び出しによってアプリケーションが変更された場合は、サービス呼び出しが完了すると、サービス呼び出しが使用したビジネス・オブジェクト変数に新しいデータ値が含まれます。

パフォーマンスの考慮

コラボレーションのパフォーマンスは、サービス呼び出しの数や、サービス呼び出しによって渡されるビジネス・オブジェクトのサイズの影響を受けます。ビジネス・オブジェクトのサイズは変更できませんが、コラボレーションが作成するサービス呼び出しの数は減らすことができます。

例えば、シナリオが階層ビジネス・オブジェクト内の子ビジネス・オブジェクトに対して操作を行う必要があるとします。場合によっては、サービス呼び出しを実行する必要がある子ビジネス・オブジェクトごとにサービス呼び出しを作成する代わりに、階層オブジェクト全体を検索し、階層オブジェクトを通じてローカルに操作を繰り返す方が効率的なことがあります。

Copyright IBM Corp. 2004