Pré. | Proc. |
Exemple : Motif d'événement différé
Enterprise Architect supporte le Motif d'événement différé.
Pour créer un événement différé dans un State :
- Créer une auto-transition pour l’ State .
- Modifiez le « type » de transition en « interne ».
- Spécifiez le Déclencheur comme étant l'événement que vous souhaitez différer.
- Dans le champ « Effet », saisissez « defer(); ».
- Sélectionnez « Simuler > Simulation Dynamique > Simulateur > Ouvrir la fenêtre Simulation ». Sélectionnez également 'Simuler > Simulation Dynamique > Événements ' pour ouvrir la fenêtre Simulation Événements .
- La fenêtre Événements du Simulateur vous aide à déclencheur des événements ; double-cliquez sur un déclencheur dans la colonne ' Déclencheurs en Attente '.
- La fenêtre Simulation affiche l'exécution sous forme de texte. Vous pouvez saisir « dump » dans la ligne de commande du simulateur pour afficher le nombre d'événements différés dans la file d'attente. Le résultat peut ressembler à ceci :
[24850060] Pool d'événements : [NOUVEAU,NOUVEAU,NOUVEAU,NOUVEAU,NOUVEAU,]
Exemple d'événement différé
Cet exemple montre un modèle utilisant Événements différés et la fenêtre Événements Simulation affichant tous Événements disponibles.
Nous configurons d'abord les contextes (les éléments de classe contenant les Statemachines ), les simulons dans un contexte simple et déclenchons l'événement depuis l'extérieur de celui-ci ; puis nous simulons dans un contexte client-serveur avec le mécanisme d'envoi d'événement.
Créer un contexte et Statemachine
Créer le contexte du serveur
Créez un diagramme de classes et :
- Un élément de classe TransactionServer , auquel vous ajoutez une Statemachine ServerStateMachine .
- Un élément de classe TestClient , auquel vous ajoutez une Statemachine ClientStateMachine .
- Une association de TestClient à TransactionServer , avec le rôle cible nommé serveur.
Modélisation pour ServerStateMachine
- Ajoutez un nœud initial Initial au diagramme Statemachine et passez à un State inactif .
- Transition (avec événement NEW_REQUEST comme Déclencheur ) vers un State busy .
- Transition (avec événement QUIT comme Déclencheur ) vers un State Final Final .
- Transition (avec événement AUTORISÉ comme Déclencheur ) vers idle .
- Transition (avec événement NEW_REQUEST comme Déclencheur et defer(); comme effet) vers busy
Modélisation pour ClientStateMachine
- Ajoutez un nœud initial Initial au diagramme Statemachine et passez à un State State0 .
- Transition (avec l'événement RUN_TEST comme déclencheur ) vers un State State1 .
- Transition (avec effet : %SEND_EVENT("NEW_REQUEST", CONTEXT_REF(serveur))%;) vers un State State2.
- Transition (avec effet : %SEND_EVENT("NEW_REQUEST", CONTEXT_REF(serveur))%;) vers un State State3 .
- Transition (avec effet : %BROADCAST_EVENT("NEW_REQUEST")%;) vers un State State4 .
- Transition (avec effet : %SEND_EVENT("AUTHORIZED", CONTEXT_REF(serveur))%;) vers un State State5 .
- Transition vers un State final final.
Simulation dans un contexte simple
Créer l'artefact Simulation
- Créez un artefact Statemachine Exécutable avec le nom Simulation avec événement différé et le champ « Langue » défini sur JavaScript .
- Agrandissez-le, puis appuyez sur et faites glisser l’élément TransactionServer sur l’artefact et collez-le en tant que propriété avec le serveur de noms.
Exécuter la Simulation
- Sélectionnez l'Artefact, puis sélectionnez l'option 'Simuler > States Exécutables > Statemachine > Générer , Build et Exécuter ', et spécifiez un répertoire pour votre code ( Note : tous les fichiers du répertoire seront supprimés avant le démarrage de la simulation).
- Cliquez sur le bouton Générer .
- Sélectionnez l'option « Simuler > Simulation Dynamique > Événements » pour ouvrir la fenêtre Simulation Événement.
Lorsque la simulation démarre, l' état inactif sera l'état actif.
- Double-cliquez sur NEW_REQUEST dans la fenêtre Simulation Event pour l'exécuter comme le Déclencheur ; idle est quitté et busy est activé.
- Double-cliquez sur NEW_REQUEST dans la fenêtre Événement Simulation pour l'exécuter à nouveau car le Déclencheur ; busy reste activé et une instance de NEW_REQUEST est ajoutée dans le pool d'événements.
- Double-cliquez sur NEW_REQUEST dans la fenêtre Événement Simulation pour l'exécuter une troisième fois pendant que le Déclencheur ; busy reste activé, et une instance de NEW_REQUEST est ajoutée dans le pool d'événements.
- Type dump dans la ligne de commande de la fenêtre Simulation ; notez que le pool d’événements comporte deux instances de NEW_REQUEST.
- Double-cliquez sur AUTORISÉ dans la fenêtre Simulation Event pour l'exécuter en tant que Déclencheur ; ces actions se déroulent :
- le mode occupé est quitté et le mode inactif devient actif
- un événement NEW_REQUEST est récupéré du pool, l'inactivité est quittée et l'occupation devient active - Type dump dans la ligne de commande de la fenêtre Simulation ; il n'y a maintenant qu'une seule instance de NEW_REQUEST dans le pool d'événements.
Simulation interactive via envoi/diffusion d'événement
Créer l'artefact Simulation
- Créez un artefact Statemachine Exécutable avec le nom Simulation interactive avec événement différé et le champ « Langue » défini sur JavaScript ; agrandissez l'élément.
- Ctrl+faites glisser l’élément TransactionServer sur l’artefact et collez-le en tant que propriété avec le serveur de noms.
- Ctrl+Faites glisser l’élément TestClient sur l’artefact et collez-le en tant que propriété avec le nom client .
- Créer un connecteur du client au serveur .
- Cliquez sur le connecteur et appuyez sur pour sélectionner l’association de l’élément TestClient à l’élément TransactionServer .
Exécuter Simulation interactive
- Lancez la simulation de la même manière que pour le contexte simple.
Une fois la simulation démarrée, le client reste à l'état 0 et le serveur reste à l'état inactif .
- Double-cliquez sur RUN_TEST dans la fenêtre Simulation Event pour le déclencheur . L'événement NEW_REQUEST sera déclenché trois fois (par SEND_EVENT et BROADCAST_EVENT) et AUTHORIZED sera déclenché une fois par SEND_EVENT.
Type dump dans la ligne de commande de la fenêtre Simulation . Il reste une instance de NEW_REQUEST dans le pool d'événements. Le résultat correspond à notre test de déclenchement manuel.