Ambiti
Un ambito è un framework per il raggruppamento delle azioni e viene utilizzato principalmente per l'esecuzione transazionale e la gestione delle eccezioni.
Un ambito può contenere uno o più blocchi. Dispone di un corpo e possono esservi aggiunti svariati blocchi di gestione delle eccezioni. A seconda della natura dell'ambito, è anche possibile che disponga di un blocco di compensazione facoltativo. Alcuni ambiti sono destinati esclusivamente alla gestione delle eccezioni e non richiedono compensazione, mentre altri ambiti sono esclusivamente transazionali e dispongono sempre di un gestore di compensazione predefinito, insieme a un gestore di compensazione facoltativo creato appositamente. Un ambito transazionale dispone anche di un gestore eccezioni predefinito e di un numero variabile di gestori eccezioni aggiuntivi creati appositamente.
È possibile specificare che gli ambiti debbano essere sincronizzati o non sincronizzati. Mediante la sincronizzazione di un ambito è possibile garantire che i dati condivisi utilizzati in tale ambito non vengano modificati da una o più azioni parallele nell'orchestrazione, né vengano modificati mentre vengono letti da un'altra azione.
Gli ambiti di transazioni atomiche sono sempre sincronizzati. Tutte le azioni in un ambito sincronizzato sono considerate sincronizzate, così come tutte le azioni nei relativi gestori eccezioni. Le azioni nel gestore di compensazione per un ambito transazionale non sono sincronizzate.
Attenzione
Si noti che, se non si progettano attentamente i processi, è possibile riscontrare una condizione di blocco critico (deadlock). Ad esempio: due rami di un'istruzione parallela nell'orchestrazione A accedono allo stesso messaggio, un ramo lo invia e uno lo riceve, pertanto entrambi devono utilizzare un ambito sincronizzato. Una seconda orchestrazione riceve il messaggio e lo invia nuovamente. È possibile che il ramo mittente nell'orchestrazione A riceva i blocchi prima del ramo ricevente, pertanto si verificherà un blocco critico.
È possibile annidare le forme Ambito all'interno di altre forme Scope . Le regole per la nidificazione degli ambiti sono le seguenti:
Gli ambiti transazionali e/o sincronizzati non possono essere annidati in ambiti sincronizzati, inclusi i gestori eccezioni degli ambiti sincronizzati.
Negli ambiti di transazioni atomiche non possono essere annidati altri ambiti transazionali.
Gli ambiti transazionali non possono essere annidati in ambiti non transazionali o in orchestrazioni.
È possibile nidificare elementi fino a 21 livelli.
Le forme di orchestrazione delle chiamate possono essere incluse all'interno di ambiti, ma le orchestrazioni chiamate vengono trattate come qualsiasi altra transazione nidificata e si applicano le stesse regole.
È possibile includere le forme di orchestrazione all'interno degli ambiti. e non sono soggette a limitazioni di nidificazione.
È possibile dichiarare le variabili come messaggi e set correlazioni a livello dell'ambito. Non è, tuttavia, possibile utilizzare per una variabile di ambito lo stesso nome di una variabile di orchestrazione né nascondere i nomi.
Uso delle transazioni e gestione delle eccezioni
Transazioni atomiche