Pré. | Proc. |
Signal Événements
Un événement de signal offre la facilité de facilité de manière lâche les « lanceurs » et les « attrapeurs » par l'intégration de la publication et de l'abonnement. Un « lanceur » diffusera un signal plutôt que de l'adresser à un processus particulier ; tout processus écoutant cet événement particulier pourrait déclencher une nouvelle instance à l'aide d'un événement Signal Début .
Un signal peut être lancé à partir d'un événement intermédiaire de lancer ou d'un événement final de lancement, et peut être Début dans un événement de début ou un événement intermédiaire de rattrapage (y compris un événement de signal de bordure ).
Dans cet exemple, nous démontrons ces Événements de Signal et leur impact sur les lignes de vie des tâches, via le paramétrage de BPSim.
- Début de l'événement Signal :
- Début By Signal1 dans le processus de niveau supérieur (Pool1)
- Début Par Signal2 Interruption dans le sous-processus d' événement eventSubProcess2
- Début By Signal1 Non Interrupting in event sub-process eventSubprocess1
- Lancer un événement de signal intermédiaire :
- Signal de diffusion1
- Attraper l'événement de signal intermédiaire :
- Recevoir Signal1 (normal)
- Recevoir Signal2 (normal)
- Recevoir Signal2 ( bordure Interrompre)
- Recevoir Signal1 ( bordure sans interruption)
- Recevoir Signal2 (dans Event Passerelle )
- Événement signal de fin :
- Terminer en lançant Signal2
Créer un Modèle BPMN
Afin de démontrer la capacité à 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 diagramme appelé CollaborationForTestingSignalEvents , (choisissez l'option 'Créer ce diagramme dans un nouveau Modèle de collaboration '). Cliquez-droit sur le nom du diagramme dans la fenêtre Navigateur et sélectionnez l'option 'Encapsulate Process'.
Un Pool PoolMain et un processus BusinessProcess_PoolMain sont créés, et ces balises 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ébut Event S1 et ajouter une Flux séquence à un Fork Parallel Passerelle parallelFork
Ajouter Séquence flux de séquence à :
- Une Tâche Abstraite Tâche1 (20) puis ajoutez cette chaîne de Flux de Séquence :
- Vers un signal de diffusion d'événement de signal intermédiaire de lancement1
- Puis à une Tâche Abstraite Tâche2 (10)
- Puis à un événement de réception de signal intermédiaire de capture Signal2 (normal)
- Puis à une Tâche Abstraite Tâche3 (20)
- Puis à une Merge Parallel Passerelle parallelMerge
- Puis à un End Event E1
- Une Tâche Abstraite Tâche4 (10) puis ajoutez cette chaîne de Flux de Séquence :
- Vers un événement de réception de signal intermédiaire de réception Signal1 (normal)
- Puis à une Tâche Abstraite Tâche5 (100), sur laquelle vous créez une Bordure Interruption Attrape
Intermediate Signal Event Receive Signal2 ( bordure interrompant)
- Puis à une Tâche Abstraite Tâche6 (10)
- Puis à l'ancien Merge Parallel Passerelle parallelMerge
- Une Tâche Abstraite Task7 (30) , puis ajoutez cette chaîne de Séquence Flows :
- Vers une Tâche Abstraite Tâche8 (5)
- Puis à l'ancien Merge Parallel Passerelle parallelMerge
- Un signal de réception d'événement de signal intermédiaire de capture Signal2 (dans Event Passerelle ), puis cette chaîne de flux de Séquence :
- Vers une Tâche Abstraite Tâche9 (10)
- Puis à l'ancien Merge Parallel Passerelle parallelMerge
- Attente d'événement de minuterie intermédiaire de capture (25) , puis cette chaîne de flux de Séquence :
- Vers une Tâche Abstraite Tâche10 (10)
- Puis à un End Event E2
Créer un sous-processus d'événement (déclenché par un événement de signal Début sans interruption) dans le processus principal
- Créez une activité eventSubProcess1 et, dans sa boîte de dialogue ' Propriétés ', définissez le champ ' Type ' sur subProcess et changez l'attribut 'triggeredByEvent' en true
- Dans eventSubProcess1, créez un Début Event Début By Signal1 Non Interrupting et, dans sa boîte de 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âche11 (20)
- Ajoutez une Flux séquence à une cible End Event End By Throwing Signal2 et, dans la boîte de dialogue de l'élément ' Propriétés ', 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 Cliquez-droit sur Pool1 dans la fenêtre Navigateur et sélectionnez l'option 'Encapsulate Process'; un processus BusinessProcess_Pool1 est créé et la balise 'Pool1.processRef' est définie sur BusinessProcess_Pool1
Créer le processus principal pour Pool1
- Créer un événement Signal Début Début par Signal1
- Ajouter une Flux séquence à une cible Tâche abstraite Tâche12 (100)
- Ajouter une Flux séquence à un End Event cible E3
Créer un sous-processus d'événement pour interrompre Pool1
- Créez une Activité eventSubProcess1 et, dans la boîte de dialogue ' Propriétés ', définissez le champ ' Type ' sur subProcess ; changer l'attribut 'triggeredByEvent' en true
- Dans eventSubProcess2, créez un Début Event Début By Signal2 Interrupting et, dans la boîte de 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âche13 (10)
- Ajouter une Flux séquence à un End Event cible E4
Créez les éléments de signal Événements et configurez-les pour les événements de signal
Dans la Toolbox BPMN 2.0, déroulez la page 'BPMN 2.0 - Types' et faites glisser l'icône 'Signal' sur le diagramme ; nommez l'élément Signal1 . Faites à nouveau glisser l'icône sur le diagramme pour créer Signal2 . Ce sont des éléments racine (qui peuvent être utilisés par tous les processus) donc ils seront créés directement sous le modèle Paquetage .
Double-cliquez sur chacun des éléments Signal Event et, dans le champ 'Value' de la balise 'signalRef', cliquez sur le bouton et naviguez jusqu'à l'élément Signal approprié.
Conseils : Alternativement, vous pouvez glisser l'élément Signal depuis la fenêtre Navigateur et le déposer sur les éléments Evénement du diagramme ; un menu contextuel s'affiche, à partir duquel vous sélectionnez l'option 'set signalRef'.
- Définissez signalRef sur 'Signal1' sur :
- Signal de diffusion1
- Début By Signal1 dans le processus de niveau supérieur ( Pool1 )
- Début By Signal1 Non Interrupting in Event sub-process eventSubprocess1
- Recevoir Signal1 (normal)
- Recevoir Signal1 ( bordure sans interruption)
- Définissez signalRef sur 'Signal2' sur :
- Début By Signal2 Interrupting in Event sub-process eventSubProcess2
- Recevoir Signal2 (normal)
- Recevoir Signal2 ( bordure Interrompre)
- 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 Signal Événements ne nécessite de configuration BPSim. Tout ce que nous avons à faire est de définir le temps de traitement des tâches afin de pouvoir observer comment les processus, les threads et les tâches sont démarrés et interrompus.
Tâche |
La 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 passé l'élément Passerelle parallelMerge dans une simulation. Ceci est très utile pour certaines statistiques et analyses. Cependant, il 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 les paramètres de propriété. Nous créons donc un paramètre factice. Dans la boîte de dialogue 'Configuration BPSim', développez le groupe 'BusinessProcess'.
|
Temps de traitement des tâches |
Développez le groupe 'Activité' et pour chaque élément Tâche listé ici : sélectionnez l'onglet 'Temps', 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 'Constant' et 'Numérique', tapez la valeur comme indiqué dans le champ 'Constant Numeric' et sélectionnez 'secondes' dans le champ 'TimeUnit'.
|
Exécuter Simulation
- Dans la barre d'outils de la boîte de dialogue 'Configurer BPSim', cliquez sur l'icône ' Exécuter ' pour ouvrir la boîte de dialogue 'BPSim Simulation Controller'
- 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 de la barre d'outils pour afficher la boîte de dialogue 'BPSim PropertyParameter Values'
- Cliquez sur le bouton Query et sur l'onglet 'Group by Property', et développez 'dummyVariable'
Une analyse
D'après les résultats directs de la simulation, il se peut que ce qui s'est passé ne soit pas évident ; cependant, si nous dessinons la ligne de vie pour chaque tâche, cela devient assez clair.
- Tâche1, Tâche4 et Tâche7 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 Throwing Intermediate Event Broadcast Signal1 et :
- Le signal de réception 1 (normal) a été activé et la tâche 5 a démarré
- Début By Signal1 Non-Interrupting a été activé et Task11 dans eventSubProcess1 a démarré
- Début By Signal1 a été activé et Task12 dans Pool1 a démarré
- À 40 secondes, Signal2 a été diffusé par End Event 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âche5 a été interrompue et la tâche6 a démarré
- Receive Signal2 (dans Event Passerelle ) a été activé et Task9 a démarré
- Début By Signal2 Interrupting a été activé, et :
> Le processus principal du Pool1 a été interrompu et la Tâche12 s'est arrêtée
> Task13 dans eventSubProcess2 démarré
- L' événement SubProcess2 à l'intérieur de 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' attente d'événement de minuterie intermédiaire (25) n'a pas été activée 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é, par :
- Double-cliquer sur l'élément <<BPSimReport>>.
- Développer le groupe "Heure".
- Développer l'élément de tâche.
- Vérifier 'Temps total dans la tâche'.