SOA Cours 7 - Exercices : Exécution de processus



Les exercices de cette page ont pour objectif de vous familiariser avec l'exécution de processus de manière concrète. Pour cela, on s'intéresse à une entreprise qui souhaite informatiser son processus de gestion des demandes de congés dans le cadre d'une démarche SOA.

La solution retenue est d'utiliser un moteur de workflow appelé Bonita BPM sur lequel le processus sera adossé et qui permettra de faire des appels à des services applicatifs exposés au niveau du SI de l'entreprise.

La démarche proposée est la suivante :

  1. Analyser l'existant de l'entreprise : processus existant, applicatif existant, services existants ;
  2. Tester le moteur de workflow et déterminer comment l'interfacer avec un web service ;
  3. Réaliser le modèle complet du processus de façon à ce qu'il puisse être exécuté par le moteur de workflow ;
  4. Ajouter des fonctionnalités d'envoi de mails au processus.

Analyse de l'existant de l'entreprise

Cette partie présente différentes informations concernant le système de gestion des congés existant dans l'entreprise. Votre objectif est de prendre connaissance de ces informations pour pouvoir définir une façon d'adosser le processus de gestion des congés de l'entreprise sur le moteur de workflow.

Processus de gestion des congés

Le processus de gestion des congés actuel de l'entreprise est entièrement manuel et repose sur un formulaire papier qui circule entre l'employé qui demande des congés, la secrétaire d'entité qui gère les soldes des employés et le responsable d'entité qui valide les demandes.

Un modèle BPMN du processus a été réalisé (cliquer sur l'image pour la voir en taille réelle) :

Créer un document texte simple qui vous permettra de sauvegarder vos réponses aux questions au fur et à mesure des questions.

Lister les activités du processus qui peuvent être totalement automatisées, c'est-à-dire réalisées par des services exposés au niveau du SI de l'entreprise.

L'objectif des étapes suivantes est de prendre connaissance de l'existant applicatif de l'entreprise et d'identifier les services disponibles sur lesquels le processus pourrait être adossé.

Application de gestion des congés

L'entreprise dispose d'une application web pour la gestion des congés. Cette application est utilisée par la secrétaire d'entité pour vérifier et modifier les soldes CP et RTT des salariés.

Pour pouvoir tester le fonctionnement de cette application web, vous allez l'installer sur votre poste et la déployer sur le serveur GlassFish que vous avez déjà utilisé auparavant.

Télécharger ici l'archive zip qui contient l'application et l'enregistrer dans "C:\Utilisateurs\[votre login]\Documents\NetBeansProjects" (ATTENTION, cette étape est très importante sans quoi vous ne pourrez pas déployer votre module sur le serveur).

Si le répertoire "NetBeansProjects" n'existe pas dans "C:\Utilisateurs\[votre login]\Documents\", créez le.

Dézipper l'archive. Vous devez obtenir un répertoire nommé "Conges".

Lancer NetBeans, puis faire "File > Open Project", aller chercher le répertoire de l'application ("Conges") et cliquer sur "Open project".

Dans l'onglet "Projects" de NetBeans, cliquer droit sur le projet "Conges", sélectionner "Clean and build" puis "Deploy", et enfin "Run".

Vérifier que l'application se lance et que vous pouvez accéder à la page web de gestion des congés. Tester le fonctionnement de l'application.

Web services pour la gestion des congés

Dans une étape de prototypage, la DSI de l'entreprise a réalisé un premier web service qui permet d'exposer certaines fonctionnalités de l'application de gestion des congés.

Ou se trouve le web service en question dans l'application ?

Dans votre fichier texte de réponse, indiquer quelles sont les opérations exposées via ce service. Comment peuvent-elles être utilisées dans le processus de gestion des congés ?

Tester le web service et afficher son contrat WSDL.

Dans la partie suivante, vous devrez réutiliser le contrat WSDL du service, ainsi que les messages SOAP échangés avec le service lors de ces tests.

Test du moteur de workflow Bonita avec appel de web service

L'objectif de cette première étape est de comprendre comment Bonita fonctionne : informations qu'il est nécessaire de renseigner pour rendre un processus exécutable, génération automatique de formulaires, personnalisation des formulaires, interface utilisateur…

Création et exécution d'un processus simple avec Bonita

Lancer Bonita et créer un nouveau processus.

Pour le moment, ne créer que la première tâche du processus, "remplir le formulaire de demande de congés", comme indiqué sur la figure ci-dessous.

Cliquer sur la pool du processus. Dans l'onglet "Général", partie "Données", créer trois variables : une pour l'identifiant du salarié (chaine de caractères), une pour le solde courant de RTT dont dispose l'employé (entier) et enfin une pour le nombre de jours de RTT que le salarié souhaite poser (entier).

Lancer le processus pour tester le résultat.

Vous devez obtenir l'affichage successif de 2 formulaires contenant chacun 3 champs : un pour l'identifiant, un pour le solde de RTT de l'employé, et un pour le nombre jours de RTT demandés.

Personnaliser les formulaires (il est possible de ne pas faire apparaitre certains champs ou de rendre certains champs non modifiables par exemple) et ajouter d'autres données (pour gérer les CP notamment).

A ce stade, vous avez modélisé un processus très simple et vous avez rendu ce processus exécutable. Vous avez pu tester l'exécution de votre processus par le moteur de workflow Bonita. L'objectif des étapes suivantes est de connecter ce processus au web service de l'application de gestion des congés.

Appel du web service

L'objectif de cette étape est de permettre au salarié qui fait sa demande de congés de voir son solde courant de jours de RTT s'afficher lorsqu'il remplit le formulaire de demande de congés. Pour cela, nous utiliserons le web service découvert ci-dessus.

Il est possible d'appeler un web services dans une activité Bonita en utilisant le connecteur "Client Web Service" de la catégorie "Web Services".

Sur l'unique tâche de votre processus, ajouter un connecteur "Client Web Service" : dans l'onglet "Général", partie "Connecteur", faire "ajouter" puis sélectionner le connecteur "Client Web Service" dans la catégorie "Web Services".

Donner un nom au connecteur, et sélectionner l'événement "enter". Cela signifie que le web service sera appelé à l'entrée dans la tâche, ce qui permettra d'afficher le résultat de l'appel au web service directement dans le deuxième formulaire présenté à l'utilisateur.

Pour configurer l'accès au web service, trouver les informations suivantes dans le contrat WSDL du service :

  • Dans le champ "Cible NS / Target name space" du formulaire, mettre la valeur de l'attribut "targetNamespace" de l'élément "<definitions>" (premier élément du fichier WSDL).
  • Dans le champ "Nom du service / Service name" du formulaire, mettre la valeur de l'attribut "name" de l'élément "<service>".
  • Dans le champ "Nom du port / Port name" du formulaire, mettre la valeur de l'attribut "name" de l'élément "<port>".
  • Dans le champ "Requête / Request" du formulaire, mettre la requête SOAP à envoyer au service :
Vous pouvez utiliser l'une des requêtes SOAP générées lors des tests du service à l'étape précédente. Voici un exemple (qui devrait vous rappeler quelque-chose…) :

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c="http://www.oorsprong.org/websamples.countryinfo">
  <soap:Header>
  </soap:Header>
  <soap:Body>
    <c:CapitalCity>
      <c:sCountryISOCode>FR</c:sCountryISOCode>
    </c:CapitalCity>
  </soap:Body>
</soap:Envelope>

Dans cette requête, vous devez fournir l'identifiant d'un salarié pour que le web service renvoie son solde de RTT. Vous avez deux options :
  1. donner un identifiant prédéfini, par exemple bunny ;
  2. ou utiliser la variable que vous avez créée pour stocker l'identifiant de l'utilisateur, par exemple ${identifiantSalarie}.
  • Dans le champ "Adresse endpoint / Endpoint address" du formulaire, mettre l'URL indiquée en valeur de l'attribut "location" de l'élément "<address>" (ou "<soap:address>").
  • Dans le champ "Binding / Binding" du formulaire, mettre http://schemas.xmlsoap.org/wsdl/soap/.
  • Dans le champ "SOAP Action" du formulaire, ne rien mettre.

Il faut ensuite configurer la sortie du connecteur de manière à récupérer dans une variable de votre processus la valeur qui est retournée par le service. En effet, le web service renverra une réponse SOAP comme celle-ci :

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <m:CapitalCityResponse xmlns:m="http://www.oorsprong.org/websamples.countryinfo">
      <m:CapitalCityResult>Paris</m:CapitalCityResult>
    </m:CapitalCityResponse>
  </soap:Body>
</soap:Envelope>

Il faudra donc extraire la valeur retournée par le service du message SOAP obtenu.

Configurer la sortie du connecteur de manière à stocker le résultat de l'appel du service dans une variable du processus :

  • dans la partie "sortie du connecteur", sélectionner "editer l'expression" et copier le script ci-dessous à la place de "response". Ce script, écrit avec Groovy un langage de script construit sur Java, manipule l'arbre DOM du message SOAP retourné par le service :

import javax.xml.transform.dom.DOMSource;

def output = (DOMSource) response
output.getNode().childNodes.item(0).textContent

  • dans la partie "variable cible", sélectionner la variable représentant le solde de RTT.

Lancer le processus pour tester le résultat.

Lors de l'affichage du deuxième formulaire, le champ pour le solde de RTT doit être rempli avec le solde courant du salarié que vous avez choisi.

Vous avez maintenant un processus executable qui fait appel à un web service ! Il ne vous reste plus qu'à terminer de modéliser le processus de gestion des congés…

Processus de gestion des congés complet

Il s'agit maintenant d'obtenir un modèle complet et exécutable du processus de gestion des congés dans Bonita.

Compléter le modèle du processus de gestion des congés : ajouter les branchements, les autres tâches, configurer les données nécessaires, expliciter les conditions sur les flux sortant des branchements (les opérateurs de test ont une syntaxe proche de Java : ==, !=, >, >=, …), personnaliser les formulaires…

Compléter le web service de l'application de gestion des congés pour qu'il expose l'ensemble des fonctions nécessaires pour le processus. S'inspirer des fonctions déjà exposées dans le service.

Configurer les connecteurs sur les tâches du processus qui nécessitent l'accès au web service.

Et bien sûr, tester régulièrement l'exécution de votre processus !

Envoi d'emails

L'entreprise souhaite qu'un email soit envoyé au salarié à la fin du processus de demande de congés avec le récapitulatif de sa demande et de la décision obtenue.

Ajouter une tâche au processus pour modéliser l'envoi du mail.

Sur cette tâche, dans la partie "Connecteurs", ajouter un connecteur d'envoi d'email (catégorie "messagerie").

Configurer le connecteur. Vous pouvez utiliser les informations suivantes :

  • Hôte : le serveur SMTP à utiliser (pour Supélec il s'agit de smtp.supelec.fr)
  • Port : 465
  • Authentification : votre login/mot de passe

' Créer un email type. Vous pouvez utiliser les variables du processus. Attention : pour le champ "À" utiliser une adresse email de destinataire que vous pourrez consulter (pour les tests…) !

Tester votre processus.

Dans ces exercices, vous avez pu découvrir un outil d'exécution de processus orienté workflow appelé Bonita. Il est possible de déployer ce type d'outils sur un ESB de manière à supporter à la fois les orchestrations et les workflow avec une grande palette de connecteurs. Vous avez pu vous rendre compte que l'exécution d'un processus nécessite une configuration très fine des utilisateurs, des données et des connecteurs en plus de la modélisation et que toutes les constructions de BPMN ne sont pas supportées par un outil d'exécution tel que Bonita.