Contenu de l'arborescence de messages après une exception
Le contenu de l'arborescence de messages est mis à jour si une exception est émise.
Si aucune exception ne se produit lors du traitement du message, la structure arborescente et le contenu reçus par un noeud de flux de messages individuel sont déterminés par l'action des noeuds précédents dans le flux. Si une exception se produit dans le flux de messages, le contenu des quatre arborescences dépend des facteurs suivants:
- Si l'exception est renvoyée au noeud d'entrée et que le terminal d'interception du noeud d'entrée n'est pas connecté, les arborescences sont supprimées. Si le message se trouve dans une transaction, il est renvoyé à la file d'attente d'entrée pour traitement ultérieur. Lorsque le message est traité à nouveau, une nouvelle structure arborescente est créée. Si le message n'est pas dans une transaction, il est supprimé.
- Si l'exception est renvoyée au noeud d'entrée et que le terminal d'interception est connecté, les arborescences de message et d'environnement local créées à l'origine par le noeud d'entrée et propagées via le terminal de sortie sont restaurées et toutes les mises à jour apportées à leur contenu dans les noeuds qui ont suivi le noeud d'entrée sont perdues. L'arborescence d'environnement n'est pas restaurée et son contenu est conservé. Si les noeuds qui suivent le noeud d'entrée incluent un noeud Compute qui crée un nouvel environnement local ou une arborescence de messages, ces arborescences sont perdues. L'arborescence de la liste d'exceptions reflète une ou plusieurs exceptions qui ont été enregistrées.
- Si l'exception est interceptée dans le flux de messages par un noeud TryCatch , les arborescences de messages et d'environnements locaux précédemment propagées via le terminal d'essai du noeud TryCatch sont restaurées et propagées via le terminal d'interception. Toutes les mises à jour apportées à leur contenu dans les noeuds qui ont suivi le noeud TryCatch sont perdues. L'arborescence d'environnement n'est pas restaurée et son contenu est conservé. Si les noeuds qui suivent le noeud TryCatch incluent un noeud Compute qui crée un nouvel environnement local ou une arborescence de messages, ces arborescences sont perdues. L'arborescence de la liste d'exceptions reflète une ou plusieurs exceptions qui ont été enregistrées.
Chemins de traitement des exceptions dans un flux de messages
Les chemins de traitement des exceptions commencent au niveau d'un terminal d'échec (la plupart des noeuds de traitement des messages en possèdent), du terminal d'interception d'un noeud d'entrée, d'un noeud TryCatch ou d'un noeud AggregateReply , mais ils ne sont pas différents en principe d'un chemin de flux de messages normal. Un tel flux est constitué d'une séquence de noeuds reliés entre eux par le concepteur du flux de messages. Les chemins de traitement des exceptions diffèrent dans le type de traitement qu'ils font pour enregistrer ou réagir à l'exception. Par exemple, ils peuvent examiner la liste des exceptions pour déterminer la nature de l'erreur et prendre les mesures appropriées ou consigner les données du message ou de l'exception.
L'environnement local et l'arborescence de messages qui sont propagés au chemin de flux de messages de traitement des exceptions sont ceux qui se trouvent au début du chemin d'exception, et non ceux qui se trouvent au moment où l'exception est émise. La figure suivante illustre ce point:

- Un message (M1) et un environnement local (L1) sont en cours de traitement par un flux de messages. Ils sont transmis via le noeud TryCatch à Compute1.
- Compute1 met à jour le message et l'environnement local et propage un nouveau message (M2) et l'environnement local (L2) au noeud suivant, Compute2.
- Une exception est émise dans Compute2. Si le terminal d'échec de Compute2 n'est pas connecté (point B), l'exception est propagée au noeud TryCatch , mais le message et l'environnement local ne le sont pas. Le chemin de traitement des exceptions commençant au point A a accès au premier message et à l'environnement local, M1 et L1. L'arborescence d'environnement est également disponible et conserve le contenu qu'elle avait lorsque l'exception s'est produite.
- Si le terminal d'échec de Compute2 est connecté (point B), le message et l'environnement local M2 et L2 sont propagés au noeud connecté à ce terminal d'échec. L'arborescence d'environnement est également disponible et conserve le contenu qu'elle avait lorsque l'exception s'est produite.