Pré. | Proc. |
Signal Événements
Un événement Signal fournit la facilité de coupler de manière souple les « lanceurs » et les « capteurs » par une intégration de type publication-abonnement. Un « lanceur » diffusera un signal plutôt que de l'adresser à un processus particulier ; tout processus à l'écoute de cet événement particulier pourrait déclencheur une nouvelle instance à l'aide d'un événement Signal Démarrer .
Un signal peut être lancé soit à partir d'un événement intermédiaire de lancement, soit à partir d'un événement de fin de lancement, et peut être attrapé dans un événement Démarrer ou un événement intermédiaire de capture (y compris un événement de signal bordure ).
Dans cet exemple, nous démontrons ces Événements de signal et leur impact sur les lignes de vie des tâches, via les paramètres BPSim.
- Démarrer Signal Événement :
- Démarrer par Signal1 dans le processus de niveau supérieur (Pool1)
- Démarrer Par Signal2 Interruption dans le sous-processus événementiel eventSubProcess2
- Démarrer par Signal1 Non interrompu dans le sous-processus événementiel eventSubprocess1
- Lancer un événement de signal intermédiaire :
- Signal de diffusion1
- Capture d'un événement de signal intermédiaire :
- Réception du signal 1 (normal)
- Réception du signal 2 (normal)
- Réception du signal 2 ( bordure d'interruption)
- Réception du signal 1 ( bordure non interrompue)
- Recevoir Signal2 (dans Event Passerelle )
- Signal de fin d'événement :
- Terminez en lançant le signal 2
Créer Modèle BPMN
Afin de démontrer la capacité de communiquer entre les processus via un événement de signal, nous créons un modèle de collaboration avec un pool principal et un processus dans un autre pool ( Pool1 ).
Créer la collaboration et le processus principal
Créez un nouveau diagramme de collaboration BPMN2.0 appelé CollaborationForTestingSignalEvents , (choisissez l'option 'Créer ce diagramme dans un nouveau Modèle de collaboration'). Cliquez-droit sur le nom diagramme dans la fenêtre Navigateur et sélectionnez l'option 'Encapsuler le processus'.
Un Pool PoolMain et un processus BusinessProcess_PoolMain sont créés, et ces étiquettes sont définies avec les valeurs automatiques :
- CollaborationForTestingSignalEvents.mainPool est défini sur PoolMain
- PoolMain.processRef est défini sur BusinessProcess_PoolMain
Créer les éléments du processus principal
Créer un Démarrer Event S1 et ajouter une Flux séquence à une Fork Parallel Passerelle parallelFork
Ajoutez des flux Séquence à :
- Une tâche abstraite Tâche 1 (20) puis ajoutez cette chaîne de flux Séquence :
- Vers un événement de signal intermédiaire de lancement Signal de diffusion1
- Ensuite, vers une tâche abstraite Tâche 2 (10)
- Ensuite, vers un événement de signal intermédiaire de capture , recevoir le signal 2 (normal)
- Ensuite, une tâche abstraite Tâche 3 (20)
- Ensuite vers une Passerelle Parallèle Merge parallelMerge
- Puis vers un événement final E1
- Une tâche abstraite Tâche 4 (10) puis ajoutez cette chaîne de flux Séquence :
- Vers un événement de signal intermédiaire de capture Recevoir Signal1 (normal)
- Ensuite à une Tâche Abstraite Tâche 5 (100), sur laquelle vous créez une Bordure Interrupting Catching
Événement de signal intermédiaire Réception du signal 2 ( bordure interrompante)
- Ensuite, une tâche abstraite Tâche 6 (10)
- Ensuite, à la précédente Merge Parallel Passerelle parallelMerge
- Une tâche abstraite Tâche 7 (30) , puis ajoutez cette chaîne de flux Séquence :
- À une tâche abstraite Tâche 8 (5)
- Ensuite, à la précédente Merge Parallel Passerelle parallelMerge
- Un événement de signal intermédiaire de capture reçoit le signal 2 (dans l'événement Passerelle ), puis cette chaîne de flux Séquence :
- À une tâche abstraite Tâche 9 (10)
- Ensuite, à la précédente Merge Parallel Passerelle parallelMerge
- Un événement de temporisation intermédiaire de capture Wait (25) , puis cette chaîne de flux Séquence :
- À une tâche abstraite Tâche 10 (10)
- Puis vers un événement final E2
Créer un sous-processus d'événement (déclenché par un événement Démarrer Signal non interrompant) dans le processus principal
- Créez un événement d'activité SubProcess1 et, dans sa dialogue « Propriétés », définissez le champ « Type » sur subProcess et modifiez l'attribut « triggeredByEvent » sur true
- Dans eventSubProcess1 créez un événement Démarrer Démarrer By Signal1 Non Interrupting et, dans sa dialogue ' Propriétés ', définissez le champ ' Type ' sur Event Sub-Process Non-Interrupting > Signal
- Ajouter une Flux séquence à une cible Tâche abstraite Tâche 11 (20)
- Ajoutez une Flux séquence à un événement de fin cible End By Throwing Signal2 et, dans la dialogue « Propriétés » de l'élément, définissez le champ « Type » sur Signal
Créer un autre processus
- Depuis la boîte à outils, faites glisser et déposez l'icône « Pool » sur le diagramme et nommez l'élément Pool1
- Cliquez-droit sur Pool1 dans la fenêtre Navigateur et sélectionnez l'option 'Encapsuler le processus' ; un processus BusinessProcess_Pool1 est créé et l' étiquette 'Pool1.processRef' est définie sur BusinessProcess_Pool1
Créer le processus principal pour Pool1
- Créer un événement Signal Démarrer Démarrer par Signal1
- Ajouter une Flux séquence à une cible Tâche abstraite Tâche 12 (100)
- Ajouter une Flux séquence à un événement de fin cible E3
Créer un sous-processus d'événement pour interrompre Pool1
- Créez un événement d'activité SubProcess1 et, dans la dialogue « Propriétés », définissez le champ « Type » sur subProcess ; modifiez l'attribut « triggeredByEvent » sur true
- Dans eventSubProcess2, créez un événement Démarrer Démarrer By Signal2 Interrupting et, dans la dialogue « Propriétés », définissez le champ « Type » sur Event Sub-Process Interrupting > Signal
- Ajouter une Flux séquence à une cible Tâche abstraite Tâche 13 (10)
- Ajouter une Flux séquence à un événement de fin cible E4
Créez les éléments de signal BPMN2.0 et configurez-les pour Événements de signal
Dans la boîte à outils BPMN 2.0, développez la page « BPMN 2.0 - Types » et faites glisser l'icône « Signal » sur le diagramme ; nommez l'élément Signal1 . Faites glisser à nouveau l'icône sur le diagramme pour créer Signal2 . Il s'agit d'éléments racines (qui peuvent être utilisés par tous les processus) et ils seront donc créés directement sous le modèle Paquetage .
Double-cliquez sur chacun des éléments de l'événement Signal et, dans le champ « Valeur » de l' étiquette « signalRef », cliquez sur le bouton et accédez à l'élément Signal approprié.
Conseils : Alternativement, vous pouvez faire glisser l'élément Signal depuis la fenêtre Navigateur et le déposer sur les éléments Événement dans le diagramme ; un menu contextuel s'affiche, à partir duquel vous sélectionnez l'option 'set signalRef'.
- Régler signalRef sur « Signal1 » sur :
- Signal de diffusion1
- Démarrer par Signal1 dans le processus de niveau supérieur ( Pool1 )
- Démarrer par Signal1 sans interruption dans le sous-processus Event eventSubprocess1
- Réception du signal 1 (normal)
- Réception du signal 1 ( bordure non interrompue)
- Régler signalRef sur « Signal2 » sur :
- Démarrer par Signal2 Interrompre dans le sous-processus Event eventSubProcess2
- Réception du signal 2 (normal)
- Recevoir le signal 2 ( bordure d'interruption)
- Recevoir Signal2 (dans Event Passerelle )
Configurer BPSim
Dans cette section, nous créons l'artefact de configuration, spécifions le modèle Paquetage et configurons les valeurs des paramètres de chaque élément.
La configuration est assez simple car aucun des Événements Signal ne nécessite de configuration BPSim. Il suffit de paramétrer le temps de traitement des tâches pour pouvoir observer comment les processus, les threads et les tâches sont démarrés et interrompus.
Tâche |
Description |
---|---|
Configurer la configuration |
|
Événements sans signal |
|
Variable fictive pour le processus |
Le contrôleur de simulation affiche une liste indiquant le nombre de jetons d'exécution pour chaque élément. Par exemple, 4 jetons ont dépassé l'élément Passerelle parallelMerge dans une simulation. Cela est très utile pour certaines statistiques et analyses. Cependant, cela n'indique pas QUAND parallelMerge a été traversé pendant la simulation. Afin d'obtenir la trace exacte d'un seul jeton, nous utilisons l'utilitaire de trace de propriété, qui s'appuie sur des paramètres de propriété. Nous créons donc un paramètre factice. Dans la dialogue « Configuration BPSim », développez le groupe « BusinessProcess ».
|
Temps de traitement des tâches |
Développez le groupe « Activité » et pour chaque élément de tâche répertorié ici : sélectionnez l'onglet « Heure », cliquez sur la flèche déroulante « Nouveau paramètre » et sélectionnez « Temps de traitement », puis cliquez sur le bouton dans la colonne « Valeur », sélectionnez « Constante » et « Numérique », saisissez la valeur comme indiqué dans le champ « Constante numérique » et sélectionnez « secondes » dans le champ « Unité de temps ».
|
Exécuter Simulation
- Dans la barre d'outils de la dialogue « Configurer BPSim », cliquez sur l'icône « Exécuter » pour ouvrir la dialogue « Contrôleur Simulation BPSim »
- Cliquez sur la flèche déroulante de l'icône « Exécuter » et sélectionnez « Simulation standard »
- Après la simulation, cliquez sur le bouton dans la barre d'outils pour afficher la dialogue « Valeurs PropertyParameter BPSim »
- Cliquez sur le bouton Query et sur l'onglet « Grouper par propriété », puis développez « dummyVariable »
Analyse
À partir des résultats directs de la simulation, il n’est peut-être pas évident de savoir ce qui s’est passé ; cependant, si nous traçons la ligne de vie de chaque tâche, cela devient assez clair.
- Tâche 1, Tâche 4 et Tâche 7 démarrées en parallèle
- La tâche 2 a commencé immédiatement après la fin de la tâche 1 (sans s'arrêter à l'événement de lancer)
- À 20 secondes, Signal1 a été diffusé par le Signal1 de diffusion d'événement intermédiaire de lancer et :
- Le signal de réception 1 (normal) a été activé et la tâche 5 a démarré
- Démarrer By Signal1 Non-Interrupting a été activé et Task11 dans eventSubProcess1 a démarré
- Démarrer By Signal1 a été activé et Task12 dans Pool1 a démarré
- À 40 secondes, Signal2 a été diffusé par l'événement de fin End By Throwing Signal2 et :
- Le signal de réception 2 (normal) a été activé et la tâche 3 a démarré
- La tâche 5 a été interrompue et la tâche 6 a démarré
- Le signal de réception 2 (dans Event Passerelle ) a été activé et la tâche 9 a démarré
- Démarrer By Signal2 L'interruption a été activée, et :
> Le processus principal de Pool1 a été interrompu et Task12 s'est arrêté
> La tâche 13 dans eventSubProcess2 a démarré
- L' événement EventSubProcess2 dans BusinessProcess_Pool1 s'est terminé lorsque E4 a été atteint à 50 secondes
- Le BusinessProcess_MainPool s'est terminé lorsque E1 a été atteint à 60 secondes
- L'événement de temporisation intermédiaire Wait (25) n'a pas été activé car l'événement de signal dans la Passerelle a été activé en premier ; par conséquent, la tâche 10 n'a jamais été démarrée
Note : Le temps d'exécution réel de chaque tâche peut être observé à partir de l'élément BPSimReport généré, en :
- Double-cliquez sur l'élément <<BPSimReport>>.
- Extension du groupe « Heure ».
- Extension de l'élément de tâche.
- Vérification du « Temps total dans la tâche ».