Exemples d'objets Sync
Cette rubrique décrit deux domaines d'application typiques des objets Sync.
Exemple : Vous souhaitez contrôler l'accès à la base de données
Dans cet exemple, vous voulez être sûr que
- 3 tâches au maximum pourront accéder à la base de données simultanément.
- L'accès exclusif à la base de données par une tâche sera également possible.
-
Créer un objet Sync avec les deux états suivants :
- EXCLUSIVE
- SHARE
-
Associer ces états avec les valeurs suivantes :
- EXCLUSIVE : 0 : utilisation d'une seule tâche dans la base de données
- SHARE : 3 : 3 tâches au maximum pourront accéder à la base de données simultanément
Ces valeurs ne sont pas explicitement écrites dans l'objet Sync, elles sont intégrées dès que des actions sont définies (voir un peu plus loin dans cette rubrique).
-
Définir les 4 actions suivantes dans la section Définition des actions.
-
USE
Accès normal (partagé) à la base de données.
Cette action peut être déclenchée si l'objet Sync a le statut SHARE et une valeur inférieure à trois. Elle conserve le statut existant, mais augmente la valeur de un. Elle est prévue pour les tâches normales accédant à la base de données.
Ces tâches vérifient si l'utilisation multiple de la base de données est possible. Elles vérifient également que la valeur est inférieure à trois, car seules trois tâches sont autorisées à accéder à la base de données simultanément. La valeur est augmentée de un, car une tâche de plus utilise maintenant la base de données.
-
USE_EXCLUSIVE
Cette action peut être déclenchée si l'objet Sync a le statut SHARE et une valeur de zéro. Cette action n'est possible que si aucune autre tâche n'utilise la base de données.
-
RELEASE
Libération après un accès normal (partagé).
Une tâche normale se termine après avoir utilisé la base de données. Le statut existant est conservé, mais la valeur est réduite de un.
-
RELEASE
Libération après un accès exclusif.
Une tâche ayant utilisé la base de données exclusivement se termine maintenant et, ce faisant, l'utilisation partagée de la base de données est à nouveau possible.
L'ordre de définition des actions est important. Le premier est le statut de départ de l'objet Sync appliqué à un objet exécutable.
-
-
Affecter l'objet Sync à un objet exécutable.
Dans notre exemple, nous affectons l'objet Sync à un job. Lors du traitement de ce job, la base de données devant être accessible aux autres tâches, nous choisirons l'action USE :
-
Voilà ce qui se produit :
- Le job démarre et exécute l'action USE.
- Il vérifie si la base de données peut être utilisée de façon partagée, et combien de tâches l'utilisent. Le job ne peut démarrer que si moins de trois tâches utilisent la base de données.
- L'action définie sous "Sinon" est exécutée si la limite de 3 tâches a été atteinte. Dans ce cas, le job attend la fin d'une des tâches.
- Dès que cela se produit, le job en attente démarre et soit accède avec succès à la base de données soit échoue et l'action RELEASE est exécutée.
Exemple : Vous souhaitez synchroniser l'exécution de deux jobs dans deux workflows différents
Deux processus de votre entreprise sont complètement indépendants l'un de l'autre. Vous avez créé deux workflows pour les automatiser, eux-mêmes également exécutés de manière indépendante. Il s'agit de WORKFLOW_A et WORKFLOW_B.
Workflow A a deux jobs, JOB_A1 et JOB_A2. Workflow B a deux jobs, JOB_B1 et JOB_B2.
Ces jobs ne peuvent pas être exécutés simultanément. Ils doivent être exécutés l'un après l'autre, chacun dans son workflow respectif.
WORKFLOW_A doit se terminer avant que WORKFLOW_B ne démarre, ce qui signifie que JOB_B2 ne peut démarrer avant que JOB_A1 ne soit terminé.
-
Créer l'objet SYNC.
L'objet SYNC EXAMPLE_STATE mappe l'état de JOB_A1 et contient deux états :
- DONE, qui signifie que le traitement est terminé
- READY, qui permet le traitement
Les objets exécutables auxquels l'objet est affecté peuvent déclencher des actions prédéfinies. Dans notre exemple, nous n'utilisons pas de valeurs, mais nous définissons les actions suivantes :
-
SET_READY
Cette action se déclenche lorsque l'état de l'objet SYNC est DONE. Le résultat de cette action est le statut READY.
Cette action ne peut donc être exécutée qu'une fois le traitement terminé.
-
SET_DONE
Cette action se déclenche lorsque l'état de l'objet SYNC est READY. Le résultat de cette action est le statut DONE.
Cette action ne peut donc être exécutée que lorsqu'un traitement est possible.
-
Affecter l'objet Sync à JOB_A1.
Ce job fait partie de WORKFLOW_A. Il n'a pas d'action START. Quand il se termine, il déclenche l'action SET_DONE dans l'objet Sync. Celle-ci a pour effet de définir le statut à DONE (traitement terminé). Pour que cela soit possible, il est nécessaire que le job ait le statut "READY" (prêt pour le traitement).
-
Affecter l'objet Sync à JOB_B2.
Ce job fait partie de WORKFLOW_B2. Il démarre avec le SET_READY de l'objet Sync. Cette action ne peut être exécutée que si le statut courant est DONE. Ceci ne peut se produire que si JOB_A1 est terminé. En même temps, cette action définit le statut READY (prêt pour le traitement).
-
Exécuter les Workflows et observer le résultat.
- WORKFLOW_A et WORKFLOW_B s'exécutent simultanément. Leur statut est ACTIF.
- JOB_A2 attend que JOB_A1 se termine. Ceci est l'ordre normal de traitement du Workflow.
- JOB_A1 est en cours d'exécution. Son statut est ACTIF.
- JOB_B2 attend que l'état de l'objet Sync passe à DONE. Tant que l'exécution de JOB_A1 se poursuit, l'objet Sync a le statut READY. Ce n'est qu'une fois JOB_A1 terminé que le statut de Sync passe à DONE. C'est à ce moment que JOB_2 démarre.
Voir aussi :