Oracle® Fusion Middleware Oracle Business Process Management Studioでのビジネス・プロセスの開発 12c (12.2.1.1) E79347-01 |
|
前 |
次 |
この章では、他のBPMNプロセスおよびサービスと通信するBPMNプロセスの開発方法を説明します。他のプロセスまたはサービスを起動し、複数のプロセスにメッセージをブロードキャストし、特定のブロードキャスト・メッセージを待機するようにプロセスを構成する方法を説明します。
この章の内容は次のとおりです。
Oracle BPMには、BPMNプロセスが他のプロセスやサービス(メッセージ、送信タスク、受信タスク、シグナル・イベントなど)と通信するためのいくつかの方法が用意されています。
メッセージ
メッセージは、非同期サービスまたは非同期BPMNプロセスの起動を可能にします。また、これらを使用して、プロセスが他のプロセスまたはサービスに公開するインタフェースを定義できます。
メッセージ・イベントの詳細は、「メッセージ・イベントを使用した他のBPMNプロセスおよびサービスとの通信」を参照してください。
送信タスクおよび受信タスク
これらはメッセージ・イベントと非常に類似しています。いずれを使用しても構いません。
メッセージ・イベントとの唯一の違いは、これらが境界イベントをサポートしている点です。
メッセージは、非同期サービスまたは非同期BPMNプロセスの起動を可能にします。また、これらを使用して、プロセスが他のプロセスまたはサービスに公開するインタフェースを定義できます。
送信および受信タスクの詳細は、「送信および受信タスクを使用した他のBPMNプロセスおよびサービスとの通信」を参照してください。
シグナル・イベント
これらを使用して、メッセージを複数のプロセスにブロードキャストできます。その特定のメッセージを待機しているプロセスが、これに反応します。
シグナル・イベントの詳細は、「シグナル・イベントを使用したプロセス間の通信」を参照してください。
メッセージ・イベント、送信および受信タスク、およびサービス・タスクは、操作を使用して他のBPMNプロセスまたはサービスと通信します。これらの操作は同期または非同期のいずれをも使用できます。
同期および非同期操作の主な相違点は、起動時の反応の方法です。
同期操作を起動する際、メッセージを送信し、レスポンスを待ってからプロセス・フローを続行します。
非同期操作を起動する際、メッセージを送信しますが、応答を待たずにプロセス・フローを続行します。非同期操作はメッセージを受信したら実行を開始します。非同期操作の応答は、コールバック操作を起動することによって取得できます。非同期操作の実行が完了する前にコールバック操作を起動した場合、応答を受信する前に非同期操作が完了するまで待機する必要があります。
メッセージ・イベントと送信および受信タスクでは、操作を対応するコールバックに関連付ける方法を指定する必要があります。会話を使用すると、1つ以上の操作をそのコールバックとともにグループ化できます。会話により、BPMNプロセスへのアクセスに使用する複数の操作を定義できます。
メッセージ・イベントを使用すると、プロジェクト内の他のBPMNプロセスおよびサービスと通信できます。
メッセージ・イベントは次の場合に使用できます。
非同期サービスの起動。
非同期BPMNプロセスの起動。
プロセスと他のプロセスが通信するためのインタフェースの定義。
注意:
送信タスクおよび受信タスクでは、メッセージ・スロー・イベントおよびメッセージ・キャッチ・イベントと同様の機能が実行されます。ただし、これらを1つのプロセス内で混在させないことをお薦めします。
異なるメッセージ・イベントの実装は、イベントのタイプと、会話内でのその役割によって異なります。表20-1で、メッセージ・イベントの様々な実装を説明します。
サブプロセス内でメッセージ開始イベントを構成して、メイン・プロセス・フローを一時停止できます。詳細は、「代替プロセス・フローを実行するための現在のプロセス・フローの一時停止」を参照してください。
表20-1 メッセージ・イベントの実装
イベント | 会話の開始 | 会話の継続 |
---|---|---|
メッセージ開始 |
|
使用不可 |
メッセージ・スロー |
|
インタフェースを定義する開始イベントまたはキャッチ・イベントを継続する場合:
サービスまたはBPMNプロセスを起動するメッセージ・スローを続行する場合:
|
メッセージ・キャッチ |
|
インタフェースを定義する開始イベントまたはキャッチ・イベントを継続する場合:
サービスまたはBPMNプロセスを起動するスロー・イベントを続行する場合:
|
メッセージ終了 |
使用不可 |
インタフェースを定義する開始イベントまたはキャッチ・イベントを継続する場合:
サービスまたはBPMNプロセスを起動するスロー・イベントを続行する場合:
|
メッセージ・イベントを使用して、非同期サービスおよび非同期BPMNプロセスを起動できます。
サービスまたはBPMNプロセスから非同期操作を起動する場合、会話を開始するよう構成された中間スロー・メッセージ・イベントを使用する必要があります。
BPMNサービス・エンジンがメッセージ・スロー・イベントを実行する際、次のものに基づいてXMLメッセージを作成します。
非同期操作
非同期操作が必要とする入力
メッセージ・スロー・イベントに対して定義されたデータ・アソシエーション
その後、XMLメッセージをサービスまたはBPMNプロセスに送信し、プロセス・フローの残りの実行を継続します。非同期サービスまたはBPMプロセスが応答するのを待機しません。
非同期サービスまたはBPMNプロセスはメッセージを受信し、リクエストされた操作を実行します。完了すると、起動元のBPMNプロセスに操作の結果のメッセージを送信します。このメッセージは、非同期サービスまたはBPMNプロセスのコールバック操作です。
非同期操作を起動したBPMNプロセスは、結果を取得するのに、コールバック操作を待機する必要があります。BPMNプロセスは、コールバック操作を待機するメッセージ・キャッチ・イベントを定義する必要があります。このメッセージ・キャッチ・イベントは会話を継続させ、操作を起動したメッセージ・スロー・イベントをイニシエータ・イベントとして使用します。
トークンがメッセージ・キャッチ・イベントに到達すると、非同期プロセスが完了していれば即時応答を受信できますが、そうでなければ応答を取得するのに非同期プロセスが完了するまで待機する必要があります。
メッセージ・イベントを使用して非同期サービス操作を起動できます。
メッセージ・イベントを使用して非同期サービス操作を起動するには:
メッセージ・イベントを使用して、非同期操作とペアになるコールバック操作を受信できます。
メッセージ・イベントを使用した非同期サービスのコールバック操作を受信するには:
メッセージ・スロー・イベントを使用して非同期サービス操作を起動する際、BPMNサービス・エンジンはサービスが応答するまで待機しません。メッセージ・スロー・イベントに続くフロー・オブジェクトの実行を継続します。
BPMNプロセスは、メッセージ・キャッチ・イベントを使用してサービス・コールバック操作を起動することにより、非同期サービスのレスポンスを取得できます。
サービスの実行が完了した後も、BPMNプロセスはメッセージ・キャッチ・イベントを使用してコールバック操作を起動するまでサービス・レスポンスを受信しません。
BPMNサービス・エンジンがメッセージ・キャッチ・イベントを実行する間もサービスがまだ実行中であれば、エンジンは、トークンをプロセス中の次のフロー・オブジェクトに渡す前に、サービス操作が完了するまで待機します。
メッセージ・イベントを使用して非同期BPMNプロセスのノードを起動できます。
メッセージ・イベントを使用して非同期BPMNプロセス操作を起動するには:
メッセージ・イベントを使用して、BPMNプロセスの非同期ノードとペアになるコールバック操作を起動できます。
メッセージ・イベントを使用した非同期BPMNプロセスのコールバック操作を起動するには:
メッセージ・スロー・イベントを使用して非同期BPMNプロセスを起動する際、BPMNサービス・エンジンはBPMNプロセスが応答するまで待機しません。メッセージ・スロー・イベントに続くフロー・オブジェクトの実行を継続します。
起動するBPMNプロセスは、メッセージ・キャッチ・イベントを使用してサービス・コールバック操作を起動することにより、非同期BPMNプロセスのレスポンスを取得できます。
非同期BPMNプロセスの実行が完了した後も、起動するBPMNプロセスは、非同期BPMNプロセスからメッセージを受信するメッセージ・キャッチ・イベントに到達するまでレスポンスを受信しません。
BPMNサービス・エンジンがメッセージ・キャッチ・イベントを実行する間も非同期BPMNプロセスがまだ実行中であれば、エンジンは、トークンをプロセス中の次のフロー・オブジェクトに渡す前に、非同期BPMNプロセスが完了するまで待機します。
境界イベントとして構成されたメッセージ・キャッチ・イベントを使用して、アクティビティが実行している間、イベントを待機させられます。アクティビティの実行が完了した後にメッセージを受信すると、イベントはトリガーされません。
境界メッセージ・キャッチ・イベントは、連続しないイベントまたは連続するイベントとして構成できます。
連続しない境界メッセージ・キャッチ・イベントは、予期したメッセージが到着すると、アクティビティの実行を停止します。次に、エンジンにより、メッセージ・キャッチ・イベントに対して定義されたフローの実行が開始されます。連続しない境界メッセージ・キャッチ・イベントに対して定義されたフローにより、メイン・プロセス・フローを再開することが可能です。
連続する境界キャッチ・イベントは、現在のアクティビティの実行を停止しません。予期したメッセージが到着すると、現在のアクティビティとパラレルに、エンジンによってメッセージ・キャッチ・イベントに対して定義されたフローの実行が開始されます。連続する境界メッセージ・キャッチ・イベントに対して定義されたフローでは、メイン・プロセス・フローを再開できません。
境界イベントを構成して、フロー・オブジェクトまたはそれらが関連付けられているフロー・オブジェクトを一時停止できます。詳細は、「代替プロセス・フローを実行するための現在のプロセス・フローの一時停止」を参照してください。
サービス・タスクを使用して、サービスおよびBPMNプロセスで同期操作を起動できます。
BPMNサービス・エンジンがサービス・タスクを実行する際、サービス・タスクで指定された操作を起動し、レスポンスを待機します。同期サービスまたはBPMNプロセスからレスポンスを受信するまで、BPMNサービス・エンジンはトークンを次のアクティビティに移動しません。
サービス・タスクから使用できるサービスには、同期操作を公開するBPELプロセス、SOAメディエータおよびSOAアダプタが含まれます。また、サービス・タスクを使用して、同期操作を公開する他のBPMNプロセスも起動できます。
BPMNプロセスで同期操作を定義する方法は、「メッセージ・イベントを使用した、BPMNプロセス・インタフェースの同期操作の定義」または「送信および受信タスクを使用した、BPMNプロセスでの同期操作の定義」を参照してください。
同期サービス操作を起動するには、サービス・タスクを使用する必要があります。
サービス・タスクを使用して同期サービス操作を起動するには:
BPMNサービス・エンジンがサービス・タスクを実行する際、サービスが応答するまで待機してからプロセス・フローを続行します。サービスの実行が完了すると、レスポンスをサービス・タスクに送信します。
サービス操作が出力データを返す場合、このデータは、サービス・タスクのデータ・アソシエーションを使用してプロジェクト内のデータ・オブジェクトにマッピングされます。
同期BPMNプロセス操作を起動するには、サービス・タスクを使用する必要があります。
サービス・タスクを使用して同期BPMNプロセス操作を起動するには:
送信および受信タスクを使用すると、プロジェクト内の他のBPMNプロセスおよびサービスと通信できます。
メッセージ・イベントと送信および受信タスクとの唯一の違いは、送信および受信タスクには境界イベントを追加できる点です。非同期サービスを起動し、境界として構成されたタイマー・イベントを使用して期限を追加する場合、メッセージ・イベントではなく送信および受信タスクを使用する必要があります。
送信および受信タスクは次の場合に使用できます。
非同期サービスの起動。
非同期BPMNプロセスの起動。
プロセスと他のプロセスが通信するためのインタフェースの定義。
プロセスの開始操作を定義するために受信タスクを使用する場合、None開始イベントの後に置き、インスタンスを作成するよう構成する必要があります。
異なるメッセージ・イベントの実装は、イベントのタイプと、会話内でのその役割によって異なります。表20-1で、メッセージ・イベントの様々な実装を説明します。
注意:
送信タスクおよび受信タスクでは、メッセージ・スロー・イベントおよびメッセージ・キャッチ・イベントと同様の機能が実行されます。ただし、これらを1つのプロセス内で混在させないことをお薦めします。
表20-2 送信および受信タスクの実装
タスク | 会話の開始 | 会話の継続 |
---|---|---|
送信タスク |
|
インタフェースを定義する受信タスクを続行する場合:
|
受信タスク |
|
インタフェースを定義する受信タスクを続行する場合:
サービスまたはBPMNプロセスを起動する送信タスクを続行する場合:
|
送信および受信タスクを使用して、サービスおよびBPMNプロセスで非同期操作を起動できます。
サービスまたはBPMNプロセスから非同期操作を起動する場合、会話を開始するよう構成された送信タスクを使用する必要があります。
BPMNサービス・エンジンが送信タスクを実行する際、次のものに基づいてXMLメッセージを作成します。
非同期操作
非同期操作が必要とする入力
メッセージ・スロー・イベントに対して定義されたデータ・アソシエーション
その後、XMLメッセージをサービスまたはBPMNプロセスに送信し、プロセス・フローの残りの実行を継続します。非同期サービスまたはBPMプロセスが応答するのを待機しません。
非同期サービスまたはBPMNプロセスはメッセージを受信し、リクエストされた操作を実行します。完了すると、起動元のBPMNプロセスに操作の結果のメッセージを送信します。このメッセージは、非同期サービスまたはBPMNプロセスのコールバック操作です。
非同期操作を起動したBPMNプロセスは、結果を取得するために、コールバック操作を起動する必要があります。コールバック操作を起動すると、非同期プロセスが完了していれば即時応答を受信できますが、そうでなければ応答を取得するのに非同期プロセスが完了するまで待機する必要があります。
受信タスクを使用して、非同期サービス操作とペアになるコールバック操作を起動できます。
非同期サービスのコールバック操作を起動するには:
送信タスクを使用して非同期サービス操作を起動する際、BPMNサービス・エンジンはサービスが応答するまで待機しません。送信タスクに続くフロー・オブジェクトの実行を継続します。
BPMNプロセスは、受信タスクを使用してサービス・コールバック操作を起動することにより、非同期サービスのレスポンスを取得できます。
サービスの実行が完了した後も、BPMNプロセスは受信タスクを使用してコールバック操作を起動するまでサービス・レスポンスを受信しません。
BPMNサービス・エンジンが受信タスクを実行する間もサービスがまだ実行中であれば、エンジンは、トークンをプロセス中の次のフロー・オブジェクトに渡す前に、サービス操作が完了するまで待機します。
受信タスクを使用して、非同期プロセス操作とペアになるコールバック操作を起動できます。
非同期BPMNプロセスのコールバック操作を起動するには:
送信タスクを使用して非同期サービス操作を起動する際、BPMNサービス・エンジンはサービスが応答するまで待機しません。送信タスクに続くフロー・オブジェクトの実行を継続します。
BPMNプロセスは、受信タスクを使用してサービス・コールバック操作を起動することにより、非同期サービスのレスポンスを取得できます。
サービスの実行が完了した後も、BPMNプロセスは受信タスクを使用してコールバック操作を起動するまでサービス・レスポンスを受信しません。
BPMNサービス・エンジンが受信タスクを実行する間もサービスがまだ実行中であれば、エンジンは、トークンをプロセス中の次のフロー・オブジェクトに渡す前に、サービス操作が完了するまで待機します。
コール・アクティビティを使用して別のプロセスからプロセスを起動できます。起動されたプロセスは、それを起動するプロセスの子になります。
コール・アクティビティを実行すると、エンジンは再使用可能なプロセスに対して新しいトークンを作成しません。親プロセスのトークンが、この再使用可能なプロセスに渡されます。トークンが子プロセスを完了すると、親プロセスに戻されてこのコール・アクティビティの後続のアクティビティの実行が続行されます。
子プロセスは、再使用可能なプロセスである必要があります。再使用可能なプロセスは、複数のプロセスから起動できます。再使用可能なプロセスの開始は、コール・アクティビティから起動することでのみ実行できます。
再使用可能なプロセスはSOAコンポジットの一部でないため、他のSOAコンポーネントから再使用可能なプロセスにアクセスすることはできません。
再使用可能なプロセスの開始イベントのタイプは必ずnoneである必要があります。終了イベントは、エラー・イベントまたはメッセージ・イベントであることができます。
コール・アクティビティを使用すると、別のプロセスからプロセスを起動できます。子プロセスは、再使用可能なプロセスである必要があります。
BPMプロジェクト内の複数のプロセスから、再使用可能なプロセスを起動できます。
シグナル・イベントを使用すると、BPMプロジェクト内のすべてのプロセスにメッセージをブロードキャストできます。そのシグナルをリスニングするよう構成されたプロセスのみ、シグナルに反応します。
営業見積サンプルの場合、見積が承認されたらシグナルをトリガーし、見積の承認に依存しているすべてのプロセスをトリガーできます。
BPMNプロセスがシグナルをブロードキャストすると、メディエータおよびBPELプロセスも反応し、これらもシグナルをブロードキャストしてBPMNプロセスをトリガーできます。
Oracle BPMは、Oracle Event Delivery Network (EDN)を使用してシグナルを送信および受信します。Oracle EDNの詳細は、『Oracle SOA SuiteでのSOAアプリケーションの開発』のビジネス・イベントおよびイベント配信ネットワークの使用方法に関する項を参照してください。
Oracle BPMでイベントにアクセスする方法の詳細は、「ビジネス・カタログの概要」を参照してください。
SOAプロジェクトによって定義されるEDNイベントは、ビジネス・カタログの「イベント」事前定義済モジュールEvents内に自動的に表示されます。シグナル・イベントを追加する際、シグナル・イベントがブロードキャストまたは反応するイベントをビジネス・カタログ内で選択できます。
シグナルは、スロー中間シグナル・イベントまたはシグナル終了イベントからブロードキャストできます。BPMNプロセスでは、別のプロセス内のシグナル開始イベントのシグナルのみ受信できます。
メッセージをブロードキャストするプロセスには、受信者に関する情報は含まれません。シグナルをブロードキャストするプロセスに影響を与えずに、シグナルに反応するプロセスを追加または削除できます。
同様に、特定のメッセージに反応するプロセスには、そのメッセージをブロードキャストするプロセスに関する情報は含まれません。メッセージをブロードキャストするプロセスをプロジェクトに追加すると、その特定のメッセージを待っているすべてのプロセスは、変更しなくてもそのメッセージに反応します。
シグナルのブロードキャストに使用するイベントにはペイロードが含まれており、これを使用して、この特定のシグナルに反応するよう構成されたすべてのプロセスに情報を送信できます。イベント内のペイロードに値を割り当てるには、シグナル・スロー・イベントのデータ・アソシエーションを構成する必要があります。このデータ・アソシエーションにより、プロセスおよびプロジェクトのデータ・オブジェクトに格納された関連するデータをイベントに渡すことができます。対応するプロセスがシグナルを受信する際、別のデータ・アソシエーションを使用してイベント内のデータを取得する必要があります。このデータ・アソシエーションは、シグナル開始イベントで受信されたイベントでどのデータ・オブジェクトがデータを格納するかを定義します。
注意:
シグナル・イベントは、他のプロセスとの通信に使用してください。シグナル・イベントをブロードキャストするプロセスのブロードキャスト・リストには、そのプロセス自体は含まれていません。
シグナル・イベントを使用すると、メッセージと、そのメッセージを待機するように構成されたすべてのプロセスの間で通信できます。
シグナルは、スロー中間シグナル・イベントまたはシグナル終了イベントからブロードキャストできます。BPMNプロセスでは、別のプロセス内のシグナル開始イベントのシグナルのみ受信できます。
この手順を実行する前に、ブロードキャストするイベントをSOAプロジェクトに追加する必要があります。
シグナルを複数のプロセスにブロードキャストするには:
BPMNエンジンがスローまたは終了シグナル・イベントを実行すると、Oracle EDNにイベントを公開します。この特定のシグナルをリスニングするよう構成されているすべてのSOAコンポーネントに、Oracle EDNによってこのイベントが配信されます。
この手順を実行する前に、反応対象のイベントをSOAプロジェクトに追加する必要があります。
プロセスが特定のシグナルに反応するよう構成するには: