インライン・サブプロセスの概要
インライン・サブプロセスは<process>
レベルのBPEL 2.0プロセスの一部として定義できます。構文を次の例に示します。
<process name="NCName" targetNamespace="anyURI" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" ...> <!-- ! All sub-process definitions must appear prior to the WS-BPEL artifacts of ! the process definition. --> <!-- Inline sub-process definition at process scope --> <bpelx:inlineSubProcess xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="NCName">* ... <!-- Partner links and variables serve as sub-process arguments --> <partnerLinks>? <partnerLink name="NCName" partnerLinkType="QName" myRole="NCName"? partnerRole="NCName"? bpelx:argumentRequired=["yes"|"no"]? />+ <partnerLinks> ... <variables>? <variable name="BPELVariableName" messageType="QName"? type="QName"? element="QName"? bpelx:argumentRequired=["yes"|"no"]?>+ from-spec? </variable> </variables> ... <!-- ! Standard process activity graph here, except that no <receive> or <pick> ! activities with createInstance = "yes" are allowed. --> activity </bpelx:inlineSubprocess> <!-- ! BPEL code stripped for brevity --> </process>
BPELプロセス・インスタンスの最初の作成時には、すべてのサブプロセス参照が解決されます。このプロセスが特定のコール・アクティビティを実行する際は、インスタンスの作成時に解決済のサブプロセスが使用されます。したがって、たとえばサブプロセスのデフォルトのコンポジット・リビジョンが変更された場合など、同じプロセス内の2つの別のインスタンスが、別のバージョンの参照済サブプロセスを使用する可能性があります。
BPELプロセス・インスタンスがコール・アクティビティを実行する際は、プロセスの実行スペース内で実行され、状態を共有します。コール・アクティビティではコントロールをサブプロセスに送信し、その際、サブプロセス・スコープが次の引数の値で初期化されます。
-
各パラメータは、コール・アクティビティからサブプロセスのスコープに(指定に応じて参照または値により)コピーされます。
-
コール・アクティビティのパラメータ・リストで参照されないオプションのパラメータ(デフォルト値で設定)は、デフォルト値で初期化されます。
-
必要なすべてのパラメータが、コール・アクティビティによって指定される必要があります。
-
コール・アクティビティのパラメータによって指定されたすべての値は、サブプロセスで定義された対応する変数(またはパートナ・リンク)と互換性のあるタイプである必要があります。
-
サブプロセスの各変数(またはパートナ・リンク)は、コール・アクティビティのパラメータ・リストで1回のみ設定できます。
サブプロセスの完了時に、コントロールが親プロセスに返されます。通常は、コール・アクティビティの後、引き続き次のアクティビティが実行されます。サブプロセスが正常に完了しなかった場合は、WS-BPELの標準ライフ・サイクル・ルールに従って、親プロセスがこのプロセスを進めます。
サブプロセスの新規プロセス・インスタンスは、監視および管理ビューからは作成できません。親プロセス・インスタンスのコール・アクティビティで表されます。アクティビティを開く(移動する)と、サブプロセスの実行の詳細が表示されます。
実行時のリンク・エラーを最小限にするため、プロセスおよびサブプロセスのデプロイの際は、参照が解決されます。パラメータ・リストはデプロイ後のアクティビティとして検証されます。新規プロセス・インスタンスの作成の前処理では、プロセスのすべてのサブプロセス参照を検証します。解決されない参照がある場合、そのインスタンスは作成されません。かわりに、基本的に次のような意味のエラー・メッセージが返されます。
HTTP Status Code 503, "service not available
リンク・エラーがあると、サービス・コンシューマが待機中の場合、終了アクティビティ処理が行内に含まれたエラー・メッセージがコンシューマに送信されます。それ以外の場合、インスタンスは一時停止され、理由がlinkage
error
に設定されます。適切なサブプロセスがデプロイされて参照が解決可能な場合は、一時停止されたインスタンスをリカバリして、自動リカバリにより通常実行を再開できます。
インライン・サブプロセスの作成の詳細は、「インライン・サブプロセスの作成方法」を参照してください。