インライン・サブプロセスの概要

インライン・サブプロセスは<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に設定されます。適切なサブプロセスがデプロイされて参照が解決可能な場合は、一時停止されたインスタンスをリカバリして、自動リカバリにより通常実行を再開できます。

インライン・サブプロセスの作成の詳細は、「インライン・サブプロセスの作成方法」を参照してください。