PROTOGEST
PFE 025 - DOODLE POUR AVOCATS
Professeur-superviseur
Alain April
L’équipe du projet de fin d’études aimerait remercier chaleureusement les personnes suivantes
qui ont joué un rôle clé dans la réalisation du projet de fin d’études. Tout d’abord, nos
remerciements s’adressent à Frank Calendriello, le promoteur du projet, pour son soutien lors
de la conception de la solution. Ses connaissances et son expertise dans le domaine juridique
ont été fort utiles et nous ont permis d’affiner nos objectifs et guider le développement.
Nous tenons également à remercier le professeur Alain April. Il nous a rencontrés de façon
hebdomadaire tout au long du projet. Il nous a guidés pour le choix technologique de la solution.
De plus, il nous a aidés à développer une suite d’objectif cohérent et réalisable dans le cadre
du cours. Ses conseils ont été appréciés à chaque décision critique du projet.
2
PROTOGEST
PFE 025 - DOODLE POUR AVOCATS
Résumé
Le défi principal est d’optimiser le temps consacré aux tâches de coordination requises par les
procédures de protocoles d’instances mises en place par les cours provinciales et fédérales.
Les objectifs principaux de ce projet de fin d’études sont : De comprendre les exigences et de
produire un document de vision; identifier une technologie libre pour effectuer le prototypage
du logiciel; effectuer la conception et la réalisation d’un premier prototype logiciel. Ce prototype
servira de preuve de concept et permettra de 1) remplir les documents demandés par la cour
plus efficacement et 2) améliorer la planification des dates de chaque évènement entre les
différents intervenants. Le document de vision que nous avons produit peut être retrouvé en
cliquant sur le lien de la référence 10 de ce document. Il y est enregistré sous le nom Protogest-
vision.docx.
3
Table des matières
Page
Objectifs ....................................................................................................................................................................9
Présentation du promoteur ......................................................................................................................................9
Architecture existante ..............................................................................................................................................9
Besoins du promoteur..............................................................................................................................................9
Mandat du projet ....................................................................................................................................................10
Composition de l’équipe ........................................................................................................................................11
Livrables et itérations .............................................................................................................................................12
Risques ....................................................................................................................................................................13
Méthode de travail ..................................................................................................................................................14
Gestion de projet ...................................................................................................................................................14
Suivi du projet ........................................................................................................................................................15
Outils ......................................................................................................................................................................15
Présentation détaillée des technologies ..............................................................................................................17
Spring Boot ....................................................................................................................................... 17
Vue d’ensemble .............................................................................................................................................17
Configuration Service ....................................................................................................................................18
Zuul Service (Gateway) .................................................................................................................................18
Service Discovery (Eureka) ...........................................................................................................................18
OAUTH2 Server .............................................................................................................................................19
Microservices .................................................................................................................................................20
ReactJS ....................................................................................................................................................................24
Thème Jumbo React .............................................................................................................................................24
Structure application « front-end » ........................................................................................................................25
Redux.....................................................................................................................................................................25
Composants React Utilisés ...................................................................................................................................26
Différence entre React Redux et MVC traditionnel ...............................................................................................26
Pages, routes et actions possibles ........................................................................................................................27
Base de données H2 ...............................................................................................................................................29
Google Rest Calendar ........................................................................................................................... 30
JsPDF .................................................................................................................................................. 30
Intégration ...............................................................................................................................................................31
Diagramme de déploiement ..................................................................................................................................31
Intégration continue (à faire) ..................................................................................................................................34
Problèmes rencontrés ............................................................................................................................................35
Ce qu’il reste à faire ................................................................................................................................................35
Recommandations ..................................................................................................................................................36
Contributions de l’équipe ......................................................................................................................................37
Conclusion ..............................................................................................................................................................39
Liste de références .................................................................................................................................................40
4
Annexe(s)
5
Liste des tableaux
Page
Tableau I : Liste des abréviations, sigles et acronymes. 8
6
Liste des figures
Page
Figure I : Vue d’ensemble du tableau des tâches Trello. 14
7
Liste des abréviations, sigles et acronymes
Terme Définition
8
Objectifs
Présentation du promoteur
Le promoteur du projet se nomme Frank Calendriello. Il est avocat et possède sa propre firme
d’avocats. Son entreprise se situe à Montréal.
Architecture existante
Le client utilise présentement un calendrier personnel sur Outlook. La cour fournit un document nommé
protocole d’instance qui doit être rempli par un ensemble d’intervenants impliqués dans la cause. Selon
le protocole, un ensemble de dates doivent être décidées et approuvées par l’ensemble des
intervenants. Présentement, le tout est fait à l’aide de communications téléphoniques et courriels. De
plus, les différentes itérations sont généralement faites avec peu d’échange d’avis et information. Il n’y
a donc aucun logiciel en place pour appuyer cette tâche. Un exemple du protocole d’instance peut-être
retrouvé à la référence 10 de ce document.
Besoins du promoteur
Le client décrit qu’il doit présentement produire le document de protocole d’instance à plusieurs reprises
jusqu’à ce qu’il soit approuvé par tous les autres intervenants/avocats. Dans le cas où une entente ne
peut pas être trouvée, le juge finit par choisir la cédule qui est meilleure à son avis. Cette décision peut
désavantager une des deux parties. Le promoteur de ce projet voudrait un logiciel qui permettant de
faciliter la communication et la négociation de dates, par Internet, évitant ainsi le va-et-vient (c.-à-d.
appels téléphoniques et courriels) lors de demandes/changements de dates. De plus, l’automatisation
pourrait peut-être augmenter les chances d’obtenir un calendrier qui plait aux deux parties plus
rapidement. Ce logiciel devrait être accessible facilement par toutes les personnes concernées. Il est
important que les informations personnelles des clients soient bien protégées. De plus, il faudrait faire
une distinction entre le créateur d’un cas et ceux qui y participent. Ainsi, seul le créateur du cas aurait
certains droits, comme le choix lors de la modification des dates afin d’accommoder les autres parties.
Les intervenants non créateurs du cas ont droit d’approuver ou refuser les dates proposées et, en cas
de refus, peuvent proposer de nouvelles dates. De plus, le promoteur souhaite que le produit permette
de faire un profit aux propriétaires du système.
9
Mandat du projet
Le mandat de l’équipe de projet de fin d’études est de produire une preuve de concept. Le prototype
résultant ne sera pas utilisé en production, mais permettra d’éclaircir et valider les fonctionnalités
requises. Le prototype logiciel prendra la forme d’un logiciel accessible sur le Web. Ses interfaces
utilisateurs seront accessibles par les participants, préalablement autorisés, ayant besoin d’interagir
avec le choix des dates des activités décrites au protocole d’instance. Les fonctionnalités visées par ce
projet sont : la création d’un calendrier commun pour un cas; l’affichage du calendrier; et la possibilité
des intervenants d’accepter ou refuser les dates proposées. Finalement, ce premier prototype devra
permettre de générer un rapport en format PDF du protocole d’instance complété pour la cour. Afin
de faciliter notre compréhension du protocole d’instance, le client nous a fourni un tableau explicatif des
dates importantes pour notre prototype dans le document ainsi que les règles d’affaires associées. Ce
document peut être trouvé en partie à l’annexe 5.
10
Composition de l’équipe
11
Livrables et itérations
13
Méthode de travail
Gestion de projet
L’outil de gestion du projet Kanban a été Trello (https://trello.com).Nous avons créé un tableau Trello
pour l’équipe. Dans ce tableau Trello, des tâches étaient créées pour les livrables majeurs durant les
réunions d’équipe. Par la suite, les différents membres de l’équipe créaient leurs propres tâches afin de
pouvoir suivre la progression du travail ainsi que l’effort. La somme des heures effectuées est par la
suite entrée dans un tableau Google Sheets par le gestionnaire de projet à l’aide des commentaires sur
les tâches Trello archivées. Une réunion d’équipe était organisée chaque semaine afin de suivre la
progression des tâches, planifier le travail de la semaine suivante ainsi que de discuter des bloquants.
Par la suite, les différents membres de l’équipe s’assignaient des tâches à faire pour la semaine à venir.
Chaque semaine, la progression des livrables était présentée devant les autres membres de l’équipe
lors de la réunion hebdomadaire. La progression des versions du code était enregistrée et gérée à
l’aide de Github. La partie « back-end » du produit était enregistrée sur un dépôt Git public, alors que la
partie « front-end » était sur un dépôt privé pour des raisons de licence du produit utilisé. En effet,
l’utilisation d’un système payant pour le développement de l’interface Web du produit nous impose de
ne pas partager publiquement ce code source.
14
Suivi du projet
Le projet a débuté par une analyse des besoins et le développement d’une proposition de projet
avec le promoteur et le superviseur du projet. Chaque semaine, nous avions des réunions d’équipe
afin de suivre l’avancement du projet et de voir où le projet était rendu. Durant ces réunions, dites
agiles, les différents membres de l’équipe s’associaient des tâches. De plus, une démonstration du
projet était faite au superviseur de notre projet de manière hebdomadaire. Finalement, le projet s’est
conclu par la rédaction du présent rapport final et la production d’une présentation académique du
projet de fin d’études.
Outils
● GitHub
○ Le github du « front-end » est accessible à l’adresse :
https://github.com/walidbe/protogest-react
○ Le github du « back-end » est accessible à l’adresse :
https://github.com/walidbe/protogest
● Trello
Ce logiciel libre sert à faire de la gestion de projet, de style Kanban. En effet, l’interface
permet la simulation d’un tableau de « Post-it ». Les fonctionnalités de base sont gratuites,
et nous nous sommes restreints à cette utilisation. Notre tableau Trello nous a permis de
suivre plusieurs informations pertinentes sur le projet. Premièrement, nous avons séparé le
tableau en quatre colonnes, “à faire”, “en cours”, “terminée” et “hebdomadaire”. Les trois
premières représentés l’état des tâches alors que la dernière sert au suivi des activités
répétitives, tel que les rencontres. Un tableau d’exemple a été produit pour la représentation
du tableau de base, à l’annexe 2. Les tâches étaient créées et attitrées à un ou plusieurs
membres de l’équipe lors des réunions. Elles commençaient dans la colonne “à faire”. Une
fois un effort effectué sur la tâche, le responsable de la tâche la place dans la section “en
cours. Après avoir investi du temps dans une tâche, la personne doit y ajouter un
commentaire comprenant la semaine de travail ainsi que le nombre d’heures, sous le format
: “semaine X : Y heures”. Un exemple est présent à l’annexe 3. Une fois la tâche considérée
terminée, elle passe à la colonne “terminée”. Elle y restera jusqu’à la prochaine réunion
d’équipe. À ce moment, un retour sera fait sur l’ensemble des tâches qui seront archivées
en cas de complétion, ou retourné dans la section “à faire” si des ajustements doivent être
faits. Une fois la tâche archivée, le temps est ajouté à la Google Sheet qui garde les
15
informations en lien avec le temps de travail. Un code de couleur a aussi été utilisé pour
ajouter de l’information aux tâches, telles que l’importanceou un état d’attente. Une prise
d’écran exemple de nos tâches archivées peut être trouvée à l’annexe 4.
● Google Docs
L’éditeur de texte gratuit de Google. La fonctionnalité intéressante de ce produit est la capacité,
pour tous les membres, de travailler sur un document en même temps. De plus, le partage de
droit sur un document est pratique pour le partage d’information. Nous avons utilisé cet outil pour
la création et le partage de l’ensemble des documents pour ce projet.
● Google Sheets
Comme Google Docs, Google Sheets est un produit gratuit qui permet un partage facile des
documents produit. Par contre, celui-ci produit des tableaux et feuilles de calcul. Dans le cadre
du projet, nous avons utilisé un tableau du genre pour faire les calculs en lien avec le temps de
travail des membres de l’équipe. Le tableau peut-être retrouvé en Annexe et au lien suivant
https://drive.google.com/drive/u/2/folders/1F7UhpO5JQXTQr8FuuNWbfR5Ec86VrCiy
● Lucid Charts
Lucid Charts est un logiciel permettant de faire divers diagrammes facilement et rapidement. Cet
outil permet autant de faire des diagrammes UML que des schémas de bases de données. Il
nous a permis de faire tous les diagrammes présents dans notre document de vision/SRS ainsi
que ceux de notre rapport technique.
16
Présentation détaillée des technologies
Spring Boot
Vue d’ensemble
La figure suivante présente une vue d’ensemble de l’architecture du système Protogest :
17
Configuration Service
Nous utilisons Spring Cloud Configuration qui est en effet un service de configuration de nos
microservices. Ce module est en effet extensible horizontalement pour notre système distribué.
En fait, nous utilisons actuellement 1 seul type de profil soit celui du développement qui est pour le
moment en stockage local pour chaque microservice. Idéalement, il faudrait partager le dossier config-
repository en créant tous les fichiers de configuration pour chaque microservice à l’intérieur de ce
dossier, et finalement utiliser une couche de référentiel qui prend en charge le stockage Git.
L’utilisation d’un dossier partagé contenant toutes les configurations selon plusieurs profils soit (dev,
prod) va faciliter l’accès des microservices à leur configuration selon le profil activé.
Le but de l’utilisation d’un « gateway » est pour avoir un point d’entrée unique dans le système, soit la
seule entité exposée à l’extérieur pour le client est Zuul-Service. Son utilisation consiste à traiter les
demandes du client et rediriger les requêtes vers le microservice approprié. L’utilisation du Gateway est
non seulement pour la redirection, mais peut aussi être utilisée pour la sécurité, la gestion du trafic, etc.
Une solution alternative à cela sera d’appeler directement les microservices, mais cette solution est
facilement très limité étant donné qu’il faudrait connaître le port et l’adresse de chaque microservice,
cela devient vite un goulot d’étranglement vu que le système est extensible horizontalement, sans
oublier que les microservices deviennent vulnérables aux entités extérieures.
Eureka permet en général la découverte des autres microservices. En effet, il s’agit de la détection
automatique des emplacements réseau des instances de chaque microservice, exemple : user- service,
« event-service », etc. Ces derniers doivent s’enregistrer au « Service Registry » et ce pour chaque
microservice puisse communiquer avec un autre. Cet attribut est très commun dans les systèmes
18
distribués où l’infrastructure est hétérogène et donc les communications se font par un « middleware
» pour que tous les systèmes puissent se comprendre.
OAUTH2 Server
Nous utilisons « OAuth2 » pour la gestion de « token » et des ressources. Notre serveur
d’autorisation est utilisé pour l’autorisation de l’utilisation à accéder au système en plus de la
sécurisation de chaque fonction de nos microservices.
Spring Cloud Security fournit des annotations pour faciliter l’implémentation du serveur d’autorisation.
En effet, lorsque l’utilisateur envoie son courriel et son mot de passe dans une session X, le serveur
d’autorisation qui génère le « token » appelé pour valider les informations de l’utilisateur. Une fois validé,
un « token » sera généré et retourné à la session de l’utilisateur. Ce « token » est très important, car il
sera utilisé pour accéder aux fonctions de chaque microservice, étant donné qu’il contient le type de
l’utilisateur ainsi que ses autres informations, tells que: le nom, prénom, etc.
Idéalement, selon les bonnes pratiques, il devrait y avoir trois points de validation lors de l’autentification:
19
Figure III : Schéma montrant les principes de OAuth2.
Microservices
Event-Service: Ce service gère la création des évènements, l’affichage, la modification ainsi que la
gestion de conflit des évènements avec le calendrier de l’utilisateur. Une architecture plus détaillée sera
expliquée dans les paragraphes et sections suivantes.
Chaque microservice bénéficie d’une architecture en couche entre ses composantes. En effet, nous
utilisons des patrons communs pour chaque application, conséquemment chaque service contient
minimalement 5 couches : 1) Configuration; 2) Controller; 3) Service; 4) Mapper; et 5) Repository:
Controller : cette couche permet, en général, de récupérer les requêtes envoyées par le client et
les rediriger vers la couche de service.
Service : Cette couche fait le traitement des requêtes reçues et retourne le résultat au contrôleur.
Mapper : Les objets reçus par la base de données peuvent être lourds, car ils contiennent des
références sur d’autres objets et ainsi de suite. Pour régler ce problème, nous avons décidé de créer
des objets de type DTO (Data Transfer Object) qui seront retournés comme résultat au client.
Idéalement, chaque mapper, de chaque service, doit contenir minimalement deux fonctions: 1) la
fonction pour convertir un objet DAO à un objet DTO; et 2) une autre fonction pour convertir un objet
DTO à un objet DAO. Cette dernière fonction (c.-à-d. la deuxième) sera appelée lorsque nous voulons
sauvegarder un objet dans la base de données. Cette approche qui consiste à faire le « mapping »
manuellement n’est pas la meilleure, car il existe des librairies qui peuvent effectuer ce travail, comme
« ModelMapper » qui semble une librairie assez solide et efficace. Il est donc recommandé de l’utiliser
dans les prochaines itérations du prototype.
Repository: Cette couche contient des interfaces qui héritent de « CrudRepository ». En effet, Spring
utilise « JPA » pour accéder et stocker les données dans la base de données. Sa caractéristique la plus
intéressante est la possibilité de créer des implémentations de référentiel. Cette technique facilite
beaucoup la gestion des requêtes SQL. Par exemple, si nous avons besoin d’une requête pour lire le
nom de l’utilisateur, au lieu de faire la requête typique SQL (c.-à-d. SELECT nom from utilisateur).
Nous pouvons créer une interface qui hérite de « CrudRepository<Utilisateur, Object> », et nous
pouvons créer la signature de la fonction qui va remplacer la requête traditionnelle. Par exemple, «
findAll() ».
21
Figure IV : Diagramme de dépendances entre les couches du microservice event.
Report-Service: Ce service gère la génération des rapports selon les évènements créés.
22
Email-Service : Comme son nom l’indique, ce microservice s’occupe de la gestion de courriel, soit
l’envoi des notifications aux utilisateurs.
Vote-Service : Ce microservice n’a pas été utilisé, mais il doit gérer les votes des utilisateurs
concernant les dates des évènements en question.
23
ReactJS
ReactJS est une bibliothèque JavaScript afin de faciliter la création d’applications Web monopage (c.-
à-d. Single Page Application). Nous utilisons actuellement un gabarit configurable pour bâtir notre
prototype d’application. L’architecture de notre prototype d’application Web est basée sur des
composants qui vont former un « DOM » au rendu de l’application et qui peuvent être intégrés et
réutilisés sur notre plateforme.
Grâce à ces éléments disponibles, il nous a été possible d’avoir une belle interface graphique sans trop
d’effort. Aussi, la structure du thème est bonne et il est facile de se retrouver à travers les différents
dossiers et fichiers du thème. En effet, avec React les fichiers sont regroupés par routes.
Un autre avantage de l’utilisation de Jumbo React, est que ce thème est multilingue, mais pour nos
besoins nous avons seulement utilisé le français et l’anglais. Aussi, Jumbo React est « responsive »
(c.-à-d. qu’il s’affiche bien sur toutes les plateformes populaires), donc il s’adapte autant à un écran
d’ordinateur de bureau, une tablette ou encore un mobile.
Liens utiles :
● Démo : http://demo.g-axon.com/jumbo-react/#/app/dashboard/default
● Documentation : http://jumbo-react.g-axon.com/docs/material/
● Achat fait sur : https://themeforest.net/item/react-material-bootstrap-4-admin-
template/20978545
24
Structure application « front-end »
La structure de notre application Web utilisant React se décompose en petits blocs pour chacun des
modules de l’application, comme le démontre le schéma suivant :
Redux
Redux est l’une des implémentations les plus importantes pour faire une gestion centralisée de notre
application Web. En gros, Redux est nécessaire pour gérer l’état global entre les composants. Par
exemple, un évènement utilisateur va déclencher une action. Cette dernière va mettre à jour l’état global
de notre application pour ensuite mettre à jour l’interface utilisateur. Avec Redux, on ajoute en effet la
notion de store. Ce dernier est toujours global. Il contient donc toutes les informations de tous les
composants de l’application.
● Store : Le store contient l’état global de l’application. En effet, il contient les références
immuables de l’état des composants et ne peuvent être modifiées qu’en appelant les
25
actions.
● Action : Les actions contiennent tout simplement les informations à envoyer au Store, c’est
l’équivalent d’un contrôleur dans une architecture MVC.
● Reducers : Les « reducers » s’occupent de récupérer les actions et tout simplement mettre à
jour le Store.
● Axios : Gestion des appels REST vers le gateway du back-end pour ensuite récupérer les
données;
26
direction du « flow » n’est pas pareil, avec React, le « flow » est unidirectionnel alors qu’en MVC le
flow peut-être souvent bidirectionnel. Troisièmement, React utilise un « store » central qui contient tous
les états des éléments React alors qu’en MVC, c’est normalement les objets qui possèdent leurs propres
états et non l’application centrale. Pour terminer, React Redux est avantageux, car nous changeons
l’état par des actions qui sont des objets JavaScript purs. Cela signifie que nous pouvons à tout moment
recréer l’état à partir de zéro si nous conservons un journal des actions. En effet, la journalisation des
évènements nous permet de savoir qui modifie l’état et quand exactement. D’autre part, le débogage
est facile avec React, car en enregistrant toutes les actions, nous pouvons recréer l’état entier.
Page : Connexion
Route : /signin
Action(s) possible(s) : Connexion à l’application (porte d’entrée) avec un compte préalablement
créé.
Autorisation : Aucune
27
Action(s) possible(s) : Dans cette page, on peut créer un cas à l’aide du formulaire. On peut aussi
ajouter des intervenants avec leur adresse courriel. Une logique de date est implémentée pour ne pas
qu’une date arrivée une fin de semaine.
Autorisation : Il faut avoir une autorisation spéciale pour faire la création de cas.
Page : My Requests
Route : /requests
Action(s) possible(s) : Dans cette page, un intervenant peut approuver une date pour un évènement
d’un cas ou encore il peut proposer deux nouvelles dates pour cet évènement. Il est aussi possible de
faire une recherche à travers les demandes de dates.
Autorisation : Aucune
28
Base de données H2
Pour faciliter l’accès aux données et leurs configurations pour le développement, nous avons décidé
d’utiliser la technologie H2 (http://www.h2database.com/html/main.html). Les requêtes SQL sont
semblables à celles de MySQL. De plus, les tables de H2 peuvent être créées en mémoire vive ce qui
améliore considérablement la performance d’accès aux données. Pour un déploiement en production,
il serait mieux d’utiliser une base de données MySQL.
29
Hibernate/JPA
Pour gérer la persistance des objets dans notre base de données relationnelle, nous utilisons
Hibernate/JPA qui nous permet d’accéder et de sauvegarder rapidement un objet java dans la base de
données. En effet, JPA et Hibernate permettent d’éviter l’écriture de requêtes SQL. Hibernate va donc
se charger de faire la correspondance entre les objets et la table correspondante dans la base de
données.
JsPDF
Pour faire la génération des documents PDF du protocole d’instance, nous avons utilisé la libraire libre
« jsPDF ». Cette librairie est très simple à utiliser et permet facilement de générer des documents PDF
modifiables et personnalisables. Il suffit de déclarer une nouvelle variable JavaScript. Par la suite, il
suffit de choisir la police et le différent style à appliquer au texte. Par la suite, il suffit d’ajouter le texte
dans l’objet PDF. Finalement, on génère l’objet PDF à l’aide d’une autre instruction JavaScript.
30
Intégration
Diagramme de déploiement
Déployer un système utilisant une architecture distribuée est souvent plus difficile que de déployer une
application ayant une architecture monolithique. En effet, les microservices de notre système sont
complètement indépendants les uns des autres, il est donc nécessaire d’avoir une compréhension du
fonctionnement de ces derniers.
D’une autre part, nous pensons utiliser la base de données MySQL en production, soit en utilisant un
service de stockage de données en ligne offert par PCF qui est un service extensible et facile à
configurer.
Étant donné que nous utilisons un « gateway » pour la redirection de nos requêtes. Notre application
ReactJS communiquera seulement avec notre service « Zuul-service » en utilisant un protocole « https
».
Étant donné que ReactJS crée des applications monopage (c.à-d. Single Page Application), nous
pouvons utiliser un fichier JavaScript qui contient la totalité des composantes de l’application, la même
chose que pour nos microservices « back-end », PCF offre des services pour les applications ReactJS,
ainsi qu’une variété d’application côté client, par exemple: AngularJS. Nous pensons donc encapsuler
cela dans un service PCF.
Configuration
Pour déployer nos microservices sur PCF, il faut créer un fichier de configuration pour chaque
application qui contient les informations concernant le service ainsi qu’aux autres services nécessaires
pour le fonctionnement de notre application.
Par exemple, « event-service » est un micro-service qui nécessite la communication avec le service «
Eureka » soit le « registry-service » pour s’enregistrer et pouvoir communiquer avec les autres
applications infonuagiques, ainsi que d’autre service comme « config-service ». « Event-service » a
aussi besoin du lien de la base de données, heureusement nous n’avons pas besoin de spécifier le lien
au complet de la base
32
de données, car cette dernière se trouve aussi sur PCF, il est juste nécessaire de spécifier le nom de
chaque service que nous voulons lier à notre microservice.
Voici un exemple d’utilisation d’un fichier de configuration yaml pour le déploiement du service « event
» sur PCF :
33
Intégration continue (à faire)
L’utilisation d’un outil d’intégration pour avoir une infrastructure du système complètement automatisée
ou avec d’autres termes la livraison continue nous permet de toujours disposer d’un artéfact prêt au
déploiement. Travis est un outil d’intégration continue qui nous permettra d’automatiser les tests, ainsi
que chaque modification du code sera testée, analysée ensuite déployée.
Dans la figure suivante, après avoir poussé du code sur GitHub, un déclenchement d’évènement par «
Travis » va permettre de rouler tous les tests unitaires ainsi que de rouler un outil d’analyse de code
comme « Static analysis tools ». Finalement, si le tout est correct, « Travis » va marquer des images
pour chaque microservice réussi, pour chaque image « Docker», elle sera déployée sur PCF soit en
production ou en développement.
34
Problèmes rencontrés
Lors de ce projet de fin d’études, l’un de nos plus grands défis fut d’apprendre ReactJS. En effet, c’était
une nouvelle technologie pour tous les membres de notre équipe (sauf Walid). Nous avons donc dû
investir beaucoup de temps afin d’apprendre comment fonctionne ReactJS. Cela a pris beaucoup
d’effort, car en plus d’apprendre un nouveau langage de programmation, nous avons eu à apprendre
une nouvelle façon de concevoir et programmer. En effet, React ne fonctionne pas selon un modèle
MVC standard. Il introduit un nouveau paradigme avec les notions de store et de composants. Nous
avons donc eu à nous familiariser avec ce nouveau paradigme.
De plus, nous avons aussi eu quelques problèmes avec les services Rest de Google Calendar. En effet,
notre application utilise les services Rest de Google Calendar, pour se connecter et accéder au
calendrier de l’utilisateur. Le microservice « calendar-service » ne donnait pas la permission à
l’application d’obtenir les autorisations nécessaires pour se connecter au calendrier de l’utilisateur. Nous
avons donc eu à développer une solution temporaire afin de pouvoir obtenir ces autorisations. Cette
solution est de rouler le service « SpringGmailCalendarAPI ». On peut le trouver au lien suivant :
https://github.com/walidbe/SpringGmailCalendarAPI.
Il reste quelques tâches à compléter afin de pouvoir dire que le premier prototype soit complet. En effet,
il reste à implémenter la logique d’affaire pour les différentes dates et évènement d’un cas. En effet,
certains évènements du protocole d’instance des avocats doivent nécessairement avoir lieu dans un
certain délai après les évènements précédents. Il reste à implémenter ces restrictions dans notre
système afin que ces délais soient respectés. Une liste des évènements et des délais est disponible en
annexe ainsi que dans le dossier Google Drive de l’équipe. Pour l’instant, nous n’affichons pas tous les
évènements dans notre prototype.
35
De plus, il nous reste aussi à générer les documents officiels que les différents avocats pourraient
soumettre à la cour afin de pouvoir faire avancer une cause devant les tribunaux. En effet, pour l’instant,
nous faisons seulement générer un document PDF générique à notre système. Ce document ne contient
que les noms des différents évènements d’un cas ainsi que les dates associées à ceux-ci. Dans le futur,
il faudrait améliorer cette fonctionnalité afin qu’elle puisse produire le document officiel avec les bonnes
dates aux bons endroits. Par la suite, il resterait seulement à envoyer le document à la cour. Une option
pour envoyer ce document automatiquement pourrait être implémentée dans le futur.
Il reste également à faire le déploiement de notre prototype comme nous l’avons mentionné dans les
sections précédentes. Nous ne l’avons pas fait par manque de temps. De plus, cela était aussi peu
prioritaire dans le cas de la réalisation d’un prototype.
Il reste aussi à continuer de travailler sur différents services afin de les peaufiner et de bien les faire
fonctionner. En effet, par exemple, vote-service n’a pas été utilisé, mais il devrait gérer les votes des
utilisateurs concernant les dates des évènements en question. Il faudrait continuer à le développer afin
de mieux faire la gestion des votes des différents avocats.
Il faudrait aussi faire un mode d’administration de l’application afin de pouvoir modifier des délais de
certains protocoles d’instances ainsi que de pouvoir donner le privilège à certains usagers de créer des
cas. Par contre, ce n’est qu’une suggestion afin de rendre le prototype plus vivant.
Recommandations
ModelMapper
Dans le système actuel, nous procédons d’une façon manuelle pour convertir les classes DTO à des
classes DAO et vice-versa, il s’agit en effet de la création de deux fonctions principales pour chaque
modèle qui permettent de faire l’implémentation de ce principe. Cette solution n’est pas efficace à long
terme, mais aussi c’est un travail supplémentaire pour le programmeur, car il existe des librairies qui
permettent d’effectuer cette conversion. En fait, modelmapper est une librairie disponible sur JAVA qui
permet de convertir nos classes à une version plus légère soit DTO.
Pour prendre connaissance de la librairie et de ses fonctionnalités, merci de voir le lien suivant :
https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application
36
MySQL
Comme expliqué auparavant, pour le développement local, nous utilisons la base de données H2 pour le
stockage de nos données. Pour un déploiement, nous devons utiliser MySQL, il n’existe en effet aucune
configuration supplémentaire à faire étant donné que nous utilisons Hibernate/JPA pour une meilleure
portabilité.
Gestion d’autorisation
L’accès au calendrier personnel de l’utilisateur nécessite une autorisation de deux tiers. D’une part,
l’utilisateur doit accorder les droits à l’application d’utiliser les services REST, d’une autre part, l’application
doit être autorisée par les services de Google pour avoir le privilège d’accès au calendrier personnel. Ce
deuxième point est en effet problématique, car le prototype actuel ne permet pas cela, il existe une solution
temporaire pour parvenir à régler ce problème qui est disponible dans le répertoire suivant :
https://github.com/walidbe/SpringGmailCalendarAPI
Contributions de l’équipe
Pour la réalisation du projet de fin d’études, chaque membre à contribuer au travail.
Anthony 80 heures 24 0
Simon 80 heures 3 0
Alexis 70 heures 0 0
Tableau VI : Contributions des membres
37
Membre de l’équipe Responsabilité
Walid • Programmation du Back-End
• Programmation des micros-services
• Programmation de la gestion d’un cas et
de ses évènements
• Rencontre avec le client
Anthony • Programmation du Front-End
• Programmation de la gestion du calendrier
d’un cas et ses évènements
• Gestion des composants Jumbo React
• Affichage des cas dans le menu
• Génération du prototype statique
Simon • Programmation du Front-End
• Programmation de la gestion du calendrier
d’un cas et ses évènements
• Génération des documents PDF
Alexis • Programmation du Front-End
• Programmation de la gestion du calendrier
d’un cas et ses évènements
• Assurance qualité
• Gestion de projet
• Rencontre avec le client
• Génération du prototype statique
Tableau VII : Contributions des membres/Responsabilités
38
Conclusion
Ce projet de fin d’études avait pour mandat de concevoir un prototype logiciel qui permet à des avocats
de différentes firmes de s’entendre sur les dates des différentes étapes d’un cas avant d’aller à la cour
(c.-à-d. de remplir le protocole d’instance). L’objectif est de raccourcir le temps et de diminuer l’effort
nécessaire à coordonner les intervenants et ainsi améliorer le fonctionnement du système de justice
québécois. Bien qu’il y ait beaucoup de temps consacré à la formation, dans le cadre de ce projet, ce
fut un investissement nécessaire puisque certains membres de l’équipe n’avait pas d’expérience avec
la technologie ReactJS au préalable. Nous avons pu apprendre une nouvelle technologie émergente
qui nous a permis de développer nos compétences. Finalement, l’équipe a réussi à produire un premier
prototype. Cette première version du prototype n’est pas complète, cependant, elle fournit une
excellente base de départ qui sera utile pour les équipes qui continueront à le développer et à le
peaufiner à l’avenir.
39
Liste de références
3) Levkovsky, Mikhali. 2017. Thinking in Redux (when all you’ve known is MVC). Repéré à
https://hackernoon.com/thinking-in-redux-when-all-youve-known-is-mvc-c78a74d35133
9) Spring. 2018. GETTING STARTED - Building an Application with Spring Boot, Repéré à
https://spring.io/guides/gs/spring-boot/
40
ANNEXE I
PROTOTYPE STATIQUE
41
Écran : Page Accueil
42
Écran : Page d’un cas
43
Écran : Page création d’un cas (pop-up)
44
Écran : En cas de refus (défendeur)
45
ANNEXE II
46
ANNEXE III
47
ANNEXE IV
48
ANNEXE V
49
ANNEXE VI
50