Étendues
Une étendue est une structure de regroupement des actions. Elle est utilisée principalement pour l'exécution transactionnelle et la gestion des exceptions.
Une étendue contient un ou plusieurs blocs. Elle se compose d'un corps et peut se voir éventuellement associée à un certain nombre de blocs de gestion d'exception. Elle peut également comporter un bloc de compensation facultatif, en fonction de sa nature. Certaines étendues, entièrement destinées à la gestion d'exception, ne requièrent pas de compensation. D'autres, explicitement transactionnelles, comportent toujours un gestionnaire de compensation par défaut, ainsi qu'un gestionnaire de compensation facultatif créé par vos soins. Une étendue transactionnelle dispose, enfin, d'un gestionnaire d'exception par défaut, et d'un certain nombre de gestionnaires d'exception supplémentaires que vous aurez créés.
Les étendues peuvent être ou non synchronisées. La synchronisation d'une étendue permet de garantir que, lorsqu'un processus accède aux données partagées qu'elle contient, aucune des actions parallèles de votre orchestration ne peut y accéder en écriture. De même, aucun accès en écriture n'est possible lorsqu'une autre action y accède en lecture.
Les étendues de transaction atomique sont toujours synchronisées. Toutes les actions au sein d'une étendue synchronisée sont considérées comme synchronisées, tout comme les actions de ses gestionnaires d'exception. Les actions du gestionnaire de compensation d'une étendue transactionnelle, quant à elles, ne sont pas synchronisées.
Attention
Notez que vous pouvez rencontrer une situation de blocage si vos processus ne sont pas correctement conçus. Par exemple, deux branches d'une action parallèle dans une orchestration A accèdent au même message, la première pour l'envoyer, la seconde pour le recevoir. Leur étendue doit donc être synchronisée. Une deuxième orchestration reçoit le message et le renvoie. Il est possible que la branche chargée de l'envoi dans l'orchestration A reçoive ses verrous avant la branche de réception, aboutissant à une situation de blocage.
Vous pouvez imbriquer des formes d’étendue dans d’autres formes d’étendue . Les règles d'imbrication sont les suivantes :
Il n'est pas possible d'imbriquer des étendues transactionnelles et/ou synchronisées dans des étendues synchronisées, y compris les gestionnaires d'exception des étendues synchronisées.
Aucune étendue transactionnelle ne peut être imbriquée dans une étendue de transaction atomique.
Aucune étendue transactionnelle ne peut être imbriquée dans une orchestration ou une étendue non transactionnelle.
L'imbrication peut atteindre une profondeur maximale de 21 niveaux.
Les formes d’orchestration des appels peuvent être incluses dans des étendues, mais les orchestrations appelées sont traitées de la même manière que toute autre transaction imbriquée et les mêmes règles s’appliquent.
Les formes d’orchestration de démarrage peuvent être incluses dans les étendues. Les orchestrations démarrées ne sont concernées par aucune des limitations d'imbrication.
Vous pouvez déclarer des variables, telles que des messages et des ensembles de corrélations, au niveau de l'étendue. Une variable d'étendue et une variable d'orchestration ne peuvent toutefois pas porter le même nom. Le masquage de nom n'est pas autorisé.
Utilisation des transactions et gestion des exceptions
Transactions atomiques