英語で読む

次の方法で共有


スコープ

スコープは、アクションをグループ化するためのフレームワークです。 これは主に、トランザクションの実行および例外処理に使用されます。

1 つのスコープには、1 つ以上のブロックが含まれます。 スコープには本体があり、オプションとして任意の数の例外処理ブロックを付加できます。 スコープの特性に応じて、オプションの補正ブロックも使用できます。 スコープによっては、例外処理だけに使用され、補正が不要な場合もあります。 明示的にトランザクションに使用されるスコープもあり、それらは常に、ユーザーが既定の補正ハンドラーに対して作成するオプションの補正ハンドラーと共に、既定の補正ハンドラーを持ちます。 トランザクション スコープには、既定の例外ハンドラー、および既定の例外ハンドラーに対してユーザーが作成する任意の数の追加の例外ハンドラーもあります。

同期スコープ

スコープを同期するか、同期しないかを指定できます。 スコープを同期することによって、スコープ内でアクセスされた任意の共有データがオーケストレーション内の 1 つ以上の並列アクションによって書き込まることがなくなり、別のアクションがそのデータを読み取っている間にそのデータに対する書き込みが行われることもなくなります。

アトミック トランザクション スコープは、常に同期されます。 同期されたスコープ内のすべてのアクションは、同期済みと見なされます。同様に、そのスコープの任意の例外ハンドラーのすべてのアクションも同期済みと見なされます。 トランザクション スコープの補正ハンドラーのアクションは、同期されません。

注意事項

処理方法を慎重に計画しないと、デッドロック状態が発生する可能性があることに注意してください。 たとえば、オーケストレーション A の 1 つの並列の 2 つの分岐は、それぞれ同じメッセージにアクセスし、1 つはメッセージを送信し、もう 1 つはメッセージを受信します。このため、両方の分岐が同期スコープを持つ必要があります。 2 番目のオーケストレーションはメッセージを受信し、返信します。 オーケストレーション A の送信側の分岐が、受信側の分岐の前にロックを受信し、デッドロック状態で終了する可能性があります。

スコープの入れ子

Scope 図形は、他の Scope 図形内に入れ子にすることができます。 スコープを入れ子にするための規則は次のとおりです。

  • トランザクション スコープまたは同期スコープは、同期スコープ内 (同期スコープの例外ハンドラーを含む) に入れ子にすることはできません。

  • アトミック トランザクションのスコープ内には、その他のトランザクション スコープを入れ子にすることはできません。

  • トランザクション スコープは、トランザクションでないスコープまたはオーケストレーション内に入れ子にすることはできません。

  • スコープは 21 レベル分の深さまで入れ子にすることができます。

  • 呼び出しオーケストレーション 図形はスコープ内に含めることができますが、呼び出されたオーケストレーションは、他の入れ子になったトランザクションと同じように扱われ、同じルールが適用されます。

  • 開始オーケストレーション 図形は、スコープ内に含めることができます。 入れ子に関する制限事項は、開始したオーケストレーションには適用されません。

スコープ変数

スコープ レベルで、メッセージ、関連付けセットなどの変数を宣言できます。 ただし、スコープ変数にはオーケストレーション変数と同じ名前を使用することはできません。名前の非表示は許可されていません。

参照

トランザクションの使用と例外の処理
自動トランザクション