0% ont trouvé ce document utile (0 vote)
44 vues21 pages

TP 2

Transféré par

k.persik89
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
44 vues21 pages

TP 2

Transféré par

k.persik89
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

TP2 - Orchestration de Services avec


Camunda

Télécharger PDF

[../tp2.pdf]

Objectifs du TP
Création d'un processus métier (Business Process) en utilisant Camunda.

Outils et Versions
Camunda [https://camunda.org/download/] Version: 7.7.0

Java [http://www.oracle.com/technetwork/java/javase/downloads/index-
jsp-138363.html] Version 1.8.0_121 (7+ needed).

127.0.0.1:8000/tp2/ 1/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

IntelliJ IDEA [https://www.jetbrains.com/idea/download/] Version Ultimate


2016.1 (ou tout autre IDE de votre choix)

Camunda Modeler [https://camunda.org/download/modeler/] Version


1.10.0

Camunda [https://camunda.org]
Camunda est une plateforme open source pour la gestion des processus métier.
C'est un framework Java qui support BPMN pour l'automatisation des
processus, CMMN pour le Case Management, et DMN pour le Business Decision
Management.

BPMN 2.0 [http://www.bpmn.org/]


BPMN 2.0 (Business Process Modeling Notation) est un standard développé par
le Object Management Group (OMG) pour fournir une notation facilement
compréhensible par tous les utilisateurs métier: les analystes métier, les
développeurs implémentant les technologies exécutant ces processus et les
personnes gérant et supervisant ces processus. BPMN permet d'établir un pont
minimisant le gap entre les conceptions des processus et leurs
implémentations.

Dans sa première version, la spéci cation BPMN permettait de fournir


uniquement une notation graphique, et est devenue rapidement célèbre parmi les
analystes métier. Elle dé nissait la manière dont les concepts tels que les tâches
humaines et les scripts exécutables, pouvaient être visualisées de manière
standard, indépendante d'un constructeur particulier.

Cette deuxième version étend ce standard en incluant des sémantiques


d'exécution et un format d'échange commun. Ce qui veut dire que les modèles
de processus BPMN 2.0 peuvent être échangés entre des éditeurs graphiques
différents, et exécutés sur n'importe quel moteur compatible avec BPMN 2.0, tel
que Camunda et Activiti.

Installation

127.0.0.1:8000/tp2/ 2/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Pour installer l'environnement nécessaire à ce TP, il faut suivre les étapes


suivantes:

Télécharger Camunda [https://camunda.org/download/] (Distribution


Tomcat), IntelliJ IDEA [https://www.jetbrains.com/idea/download/] et
Camunda Modeler [https://camunda.org/download/modeler/].

Décompresser le chier .zip Camunda téléchargé, et exécuter start-


camunda.sh (pour les systèmes Unix-based) ou start-camunda.bat (pour les
systèmes Windows).

Ouvrir la page d'accueil du serveur d'application dans votre navigateur


préféré.

Lancer le Camunda Modeler.

Premier Projet Camunda BPMN: Helloworld


Création du Projet et Dépendances

Vous allez maintenant créer un nouveau projet Java pour dé nir le


comportement de votre processus.

Ouvrir IntelliJ et créer un nouveau projet Maven (sans archetype).

Vous pouvez choisir les paramètres suivants:

Group Id: tn.insat.eservices.tp2

Artifact Id: Helloworld

Project Name: HelloworldCamunda

Dans le chier pom.xml, indiquer que l'application sera déployée plus tard
sous la forme d'un chier war. Pour cela, ajouter la ligne suivante, juste
après la version:

<packaging>war</packaging>

Ajouter les dépendances nécessaires vers Camunda dans votre projet. Pour
cela, insérer les lignes suivantes dans votre chier pom.xml

127.0.0.1:8000/tp2/ 3/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-bom</artifactId>
<version>7.7.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>

Faire un build de votre projet. Pour cela, créer une nouvelle con guration de
type Maven, que vous appellerez maven-install par exemple, et vous écrirez
dans la partie Command Line : install, comme suit:

127.0.0.1:8000/tp2/ 4/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Lancer le build et véri ez bien que vos packages ont bien été installés.

Création de la classe principale pour le processus

La prochaine étape permet de construire une classe pour le processus. Cette


classe représente l'interface entre votre application et le moteur de processus
Camunda.

package tn.insat.eservices.tp2.helloworld;

import org.camunda.bpm.application.ProcessApplication;
import org.camunda.bpm.application.impl.ServletProcessApplication;

@ProcessApplication("Helloworld App")
public class HelloworldApplication extends
ServletProcessApplication {
// empty implementation
}

Ajouter ensuite le chier processes.xml sous le répertoire


src/main/resources/META-INF. Ce chier nous permet de fournir une
con guration pour le déploiement de ce processus dans le moteur de processus.

127.0.0.1:8000/tp2/ 5/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

<?xml version="1.0" encoding="UTF-8" ?>


<process-application

xmlns="http://www.camunda.org/schema/1.0/ProcessApplication"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<process-archive name="helloworld">
<process-engine>default</process-engine>
<properties>
<property name="isDeleteUponUndeploy">false</property>
<property
name="isScanForProcessDefinitions">true</property>
</properties>
</process-archive>

</process-application>

A partir de ce point, nous allons commencer à modéliser le processus.

Modélisation d'un processus BPMN 2.0

La modélisation du processus se fera grâce au Camunda Modeler. Pour cela:

Démarrer l'application, et créer un nouveau diagramme BPMN en cliquant


sur File > New File > BPMN Diagram.

127.0.0.1:8000/tp2/ 6/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Double-cliquer sur l'évènement de départ (le petit rond) pour modi er son
nom. Nous l'appelerons Dis Bonjour.

Cliquer sur l'évènement de départ, choisir le rectangle (représentant une


activité) à partir du menu contextuel qui apparaît, et le glisser vers un
emplacement adéquat. Nous appellerons le nouvel évènement inséré Ajouter
Bonjour.

Cette tâche sera celle où l'utilisateur va indiquer son nom pour l'éternel
Bonjour <nom>!. Pour cela, nous devons indiquer que le traitement fait ici
sera réalisé par un humain. Pour cela, en cliquant sur l'activité créée, cliquer
dans le menu contextuel sur la clef à molette, puis choisir User Task.

127.0.0.1:8000/tp2/ 7/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Rajouter une tâche de n au processus.

Nous obtenons pour nir le diagramme suivant:

Con guration du processus

Pour con gurer la tâche utilisateur Ajouter Bonjour, cliquer dessus, et remplir
le panneau des propriétés (sur la droite). Dé nir l'utilisateur auquel sera
destinée cette activité. Pour cela, dans le champ Assignee, insérer john.

127.0.0.1:8000/tp2/ 8/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

John est un utilisateur prédé ni sur le serveur Camunda. Plus tard, vous
pourrez dé nir votre propre liste d'utilisateurs et de rôles.

Pour con gurer le processus en entier, cliquer sur un endroit vide du


canevas. Dans le panneau des propriétés, indiquer les champs suivants:

Id: helloworld

Name: Helloworld

Executable: true

Vous obtiendrez le résultat suivant:

Sauvegarder le diagramme sous le répertoire src/main/resources du projet


que vous avez créé. Vous l'appellerez helloworld.bpmn

Déploiement du processus

Con gurer l'application pour qu'elle soit déployée sur le serveur tomcat
intégré dans votre installation Camunda. Pour cela, dans IntelliJ:

127.0.0.1:8000/tp2/ 9/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Aller au menu File > Project Structure...

Cliquer sur Artifacts.

Dé nir le type de l'archive à déployer: Web Application: Archive

Dé nir comme Output Directory le répertoire webapps, se trouvant en


général sous le répertoire $CAMUNDA_HOME/server/apache-tomcat-
<version>/webapps.

En bas de la fenêtre, vous trouverez un bouton Create Manifest. Cliquer


dessus, cela permettra de créer le chier Manifest responsable du
déploiement.

Vous obtiendrez le résultat suivant:

Faire un make du projet. Pour cela, aller au menu Build > Make Project ou

cliquer sur . Normalement, un nouveau chier helloworld-1.0-


SNAPSHOT.war sera créé dans le répertoire webapps du serveur.

127.0.0.1:8000/tp2/ 10/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Pour véri er que le processus a bien été déployé sur le serveur Tomcat,
consulter le chier log se trouvant sous $CAMUNDA_HOME/server/apache-
tomcat-<version>/logs et ouvrir le chier catalina.out.

 Tip

Le meilleur moyen de consulter en permanence le chier log sur les systèmes Linux-like est
d'ouvrir un terminal, et de taper tail -f catalina.out .

Le chier devra contenir les lignes suivantes:

Véri cation du déploiement avec Cockpit

Camunda offre l'outil Cockpit pour inspecter les processus en cours d'exécution
et complétés, et gérer les différents incidents. Pour cela, si votre serveur
Camunda est bien lancé, vous pourrez visualiser vos processus dans le
navigateur, en tapant: http://localhost:8080/camunda/app/cockpit .
Identi ez-vous comme administrateur en tapant les credentials: demo/demo .
Cliquer sur le nombre sous Process De nitions (cela devra être 2 dans votre cas),
vous devriez retrouver votre processus, avec un état checked.

127.0.0.1:8000/tp2/ 11/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Démarrage du processus

Aller au Camunda Tasklist


( http://localhost:8080/camunda/app/tasklist ), puis lancer le processus
en cliquant sur le bouton Start Process (en haut à droite).

Cliquer sur votre processus Helloworld.

Ajouter autant de variables que nécessaire dans le formulaire générique.


Nous allons dans notre cas ajouter une variable nom de type chaîne de
caractères. Pour cela, cliquer sur Add a variable et remplir comme suit
(mettez votre nom bien sûr, pas le mien ):

En rafraîchissant maintenant le Cockpit, vous trouverez que le processus est


passé à l'état Running.

Con guration des permissions

Pour permettre à l'utilisateur John de visualiser et lancer le processus


Helloworld, il faudra lui rajouter les autorisations. Pour cela:

127.0.0.1:8000/tp2/ 12/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Aller à Camunda Admin


( http://localhost:8080/camunda/app/admin/default/#/authorization?
resource=0 ).

Ajouter une nouvelle autorisation dans la partie Process De nition, pour


permettre à John de manipuler la dé nition du processus Helloworld.

Dans la partie Process Instance, ajouter la permission de créer une instance


de processus à John.

Vous authenti er comme étant John, en utilisant (john/john), de préférence


sur un autre navigateur. Vous pourrez ainsi visualiser le processus
Helloworld, tel qu'il est visible par John. Il pourra ainsi ajouter les variables
de son choix, et compléter le processus.

127.0.0.1:8000/tp2/ 13/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Création d'un formulaire personnalisé

Pour créer votre propre formulaire, avec des variables en entrée qui peuvent être
manipulées par le service, suivre les étapes suivantes:

Revenir vers IntelliJ, et créer un chier dis-bonjour.html sous le répertoire


src/main/webapp/forms. Ajouter le contenu suivant:

<form name="disBonjour">
<div class="form-group">
<label for="nom">Nom</label>
<input class="form-control"
cam-variable-type="String"
cam-variable-name="nom"
name="nom" />
</div>
</form>

Ouvrir le processus avec le Modeler, et cliquer sur l'évènement de départ.


Dans le panneau des propriétés, choisir la tabulation Forms et insérer
embedded:app:forms/dis-bonjour.html dans le champ Key. Cela indique
que nous voulons utiliser un formulaire intégré dans la Tasklist, et qu'il sera
chargé à partir de l'application.

Sauvegarder, et rafraîchir le projet dans IntelliJ.

De même, nous allons créer le formulaire qui va permettre à John de dire


Bonjour. On l'appellera bonjour.html.

127.0.0.1:8000/tp2/ 14/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

<form name="bonjour">
<div class="form-group">
<label for="salutation">Salutation</label>
<input class="form-control"
cam-variable-type="String"
cam-variable-name="salutation"
name="salutation" />
</div>
<div class="form-group">
<label for="nom">Nom</label>
<input class="form-control"
cam-variable-type="String"
cam-variable-name="nom"
name="nom"
readonly="true" />
</div>
</form>

Affecter ce formulaire à la tâche Ajouter Bonjour de la même manière que


précédemment.

Sauvegarder tout et re-déployer le projet.

Lancer maintenant le processus. Saisir votre nom dans la rubrique Nom.

Identi ez-vous comme John de nouveau, vous trouverez le deuxième


formulaire:

127.0.0.1:8000/tp2/ 15/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Pour l'instant, en cliquant sur compléter, rien ne se passe, car nous n'avons
indiqué nulle part ce qui doit être réalisé suite à la saisie du "Bonjour" par John.
Cela sera fait grâce à un Service Task.

Ajout d'un Service Task Java

Pour dé nir le comportement à faire de votre service, suivre les étapes


suivantes:

Utiliser le Modeler pour ajouter un service task juste après le user task. Pour
cela, sélectionner une activité dans la palette de gauche, et la glisser entre la

tâche utilisateur et l'évènement de n. Avec la clef à molette ,


sélectionner l'option Service Task. Appeler le service Dire Bonjour. Vous
obtiendrez le résultat suivant:

Ajouter maintenant l'implémentation du Service Task. Pour cela, ajouter une


classe dans le projet IntelliJ appelée ProcessRequestDelegate qui
implémente l'interface JavaDelegate, comme suit:

package tn.insat.eservices.tp2.helloworld;

import java.util.logging.Logger;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;

public class ProcessRequestDelegate implements JavaDelegate {

private final static Logger LOGGER = Logger.getLogger("Hello-


Greetings");

public void execute(DelegateExecution execution) throws


Exception {
LOGGER.info("Hey! " + execution.getVariable("salutation")
+ " " + execution.getVariable("nom") + "!");

127.0.0.1:8000/tp2/ 16/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Utiliser le panneau des propriétés pour référencer la classe dans le


processus. Pour cela, cliquer sur le Service Task, et dé nir son
implémentation par la Java Class:
tn.insat.eservices.tp2.helloworld.ProcessRequestDelegate .

Déployer votre application, et observer le résultat. Il sera a ché dans le log


de votre serveur Tomcat (catalina.out), comme suit:

Appel d'un Service Web REST


Grâce aux connecteurs, Camunda peut intégrer des services web REST ou SOAP.
Pour cela, nous allons faire appel à un service web classique de météo. Dans
son formulaire, John va saisir le nom d'une ville, et le processus devra retourner
la température actuelle dans cette ville, en plus de l'usuel Bonjour.

Commencer par ajuster le formulaire bonjour.html, en lui ajoutant un autre


champs de texte: ville après le champs nom.

Revenir dans le Modeler, et ajouter un Service Task, qu'on appellera


Consulter Météo, entre Ajouter Bonjour et Dire Bonjour.

Dans ce service, indiquer que le type d'implémentation est Connector, et


vous déplacer vers l'onglet Connector pour le con gurer.

Donner les paramètres suivants à votre connecteur;

Id: http-connector

Input: Les input prendront toutes les informations nécessaires pour


envoyer la requête REST au service web OpenWeatherMap. Ce service
prend en paramètre la ville, qui sera insérée dans notre cas à partir du
formulaire précédent, dans le champs ville.

127.0.0.1:8000/tp2/ 17/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Nom Type Valeur

url Script / var ville=execution.getVariable("ville");


JavaScript 'http://api.openweathermap.org/data/2.5/weather
/ Inline ?
Script APPID=17db59488cadcad345211c36304a9266&q='+vill
e;

method Text GET

headers Map key: accept, value:application/json -


key:content-type, value:application/json

Output: Le service utilisé renvoie un document json qui ressemble à ce


qui suit:

{
coord: {
lon: 10.17,
lat: 36.82
},
weather: [
{
id: 801,
main: "Clouds",
description: "few clouds",
icon: "02d"
}
],
base: "stations",
main: {
temp: 299.87,
pressure: 1018,
humidity: 39,
temp_min: 299.15,
temp_max: 301.15
},
visibility: 10000,
wind: {
speed: 3.6,
deg: 40
},
clouds: {
all: 20

127.0.0.1:8000/tp2/ 18/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

},
dt: 1506864600,
sys: {
type: 1,
id: 6318,
message: 0.0039,
country: "TN",
sunrise: 1506834907,
sunset: 1506877308
},
id: 2464470,
name: "Tunis",
cod: 200
}

Si l'objectif est de retourner la valeur de la température, on doit naviguer vers


l'élément main puis à son ls temp. L'output de notre service aura donc la forme
suivante:

Nom Type Valeur

WsResponse Script / JavaScript / S(response).prop("main").prop("temp").nu


Inline Script mberValue();

 Tip

Toujours tester votre web service REST sur navigateur avant de l'utiliser dans une quelconque
application!

Maintenant, ajouter le code d'exploitation de ce service dans la classe


ProcessRequestDelegate, pour lui indiquer d'a cher le résultat de la requête:

public class ProcessRequestDelegate implements JavaDelegate {

private final static Logger LOGGER = Logger.getLogger("Hello-


Greetings");

public void execute(DelegateExecution execution) throws


Exception {
LOGGER.info("Hey! " + execution.getVariable("salutation") +
" "
+ execution.getVariable("nom")

127.0.0.1:8000/tp2/ 19/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

+ "! La température aujourd'hui à "


+ execution.getVariable("ville")
+ " est de "
+ execution.getVariable("WsResponse")+"!");
}

Tout sauvegarder puis déployer le service. En l'exécutant, vous obtenez le


résultat suivant:

L'utilisateur demo saisit son nom:

L'utilisateur john rajoute la salutation et la ville:

Le processus a che ce résultat sur le log:

 TAF

127.0.0.1:8000/tp2/ 20/21
02/02/2020 TP2 - Orchestration de Services avec Camunda - TP eServices

Vous remarquerez que le service web REST que nous avons appelé rend la température en
degré Kelvin. Chercher un service web qui fasse la conversion du ºK vers le ºC, puis appelez-le
avant de faire l'a chage.

127.0.0.1:8000/tp2/ 21/21

Vous aimerez peut-être aussi