スタンドアロン・サブプロセスの概要
スタンドアロン・サブプロセスは、次の例に示すように、拡張子が.sbpel (サブプロセスBPEL拡張子)のファイルで定義されます。
<!-- A subprocess is defined in a SBPEL file, containing a bpelx:subProcess
! document
! The bpelx:subProcess is similar to a standard bpel:process, with
! differences asnoted below.
-->
<bpelx:subProcess name="NCName" targetNamespace="anyURI"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:bpelx="http://schemas.oracle.com/bpel/extension" ...>
<!-- 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 definition here, except no <receive> or <pick> with -->
<!-- createInstance="yes" -->
/activity/
</bpelx:subProcess>
<subProcess>要素は、WS-BPEL 2.0言語の拡張機能です。<subProcess>要素は、サブプロセス定義のルート要素です。この要素のネームスペースは次のとおりです。
http://schemas.oracle.com/bpel/extension
Web Services Business Process Execution Language Specification Version 2.0の第10.9項に指定されているとおり、<subProcess>アクティビティは<extensionActivity>に埋め込まれている必要があります
次のWS-BPELターゲット・ネームスペースで定義されているように、サブプロセスのタイプはtProcessです。
http://docs.oasis-open.org/wsbpel/2.0/process/executable
これは、次の点でtProcessとは異なります。
-
<subProcess>要素直下の変数およびパートナ・リンクは、サブプロセスの引数として機能します。属性argumentRequiredをyes(デフォルト値はno)に設定することにより、必要な引数にマークが付きます。サブプロセスに必要な引数は、コール元が渡す必要がある引数の最小セットです。 -
インライン
from-specイニシャライザで定義される変数は、デフォルト値を持つオプションの引数として機能します。コール元がこの引数を渡すと、コール元が引数に指定した値がデフォルト値をオーバーライドします。 -
値を設定する前に変数が参照された場合、必要な引数でないと、検証でエラーがレポートされます。
-
サブプロセスの最初のアクティビティは、
createInstanceをyesに設定したreceiveアクティビティまたはpickアクティビティにできません。これは、指定されたサブプロセス・タイプにはインスタンスが作成されず、論理的にはこのサブプロセスが既存のプロセス・インスタンスの一部となるためです。
サブプロセスの/@name属性は、デプロイされたコンポジット内で一意のサブプロセス名を定義します。
このサブプロセスは自己完結型です。つまり、すべての変数およびパートナ・リンクが、ローカル定義または引数に解決されるプロセス・スニペットで参照します。これは、コール・アクティビティで適用範囲内の変数およびパートナ・リンクへの未解決の参照が可能な<inlineSubProcess>要素とは異なります。
通常は、親とサブプロセスの間で複数の変数が交換されます。大容量のドキュメントの場合、コピーすると負荷が高くなります。このため、参照渡しはオプションになります。
サブプロセスはパートナと同期式(InOut)または非同期式(InOnly)で対話できます。これらの相互作用のパートナ・リンクは、親プロセスの引数として渡すか、サブプロセス内で構成できます。非同期リクエストの場合、WSアドレス/正規化されたメッセージの対話IDを親プロセス・インスタンスIDで設定します。これにより、正しいプロセス・インスタンスにコールバック・メッセージをルーティングできます。
SOAコンポジット・アプリケーションのサブプロセスはcomposite.xmlファイルに列挙されます。コンポーネント要素定義は、定義されたsbpelファイルにそのサブプロセス名を関連付けます。デプロイ中にサブプロセス・コンポーネントはBPELプロセス・サービス・エンジンに委任されます。このBPELプロセス・サービス・エンジンはプロセス定義を検証し、サブプロセス・ターゲット名をキーとし、サブプロセス定義を値とするマップを構築します。コンシューマ・カウントから独立したサービス・エンジンに存在するサブプロセスのインスタンスは、多くて1つのみです。メモリーの最適化のため、プロセスはアクティブに使用されていない場合、遅延ロードまたはアンロードされる場合があります。
スタンドアロン・サブプロセスの作成の詳細は、「スタンドアロンBPELサブプロセスの作成方法」を参照してください。