Comme je vous le disais en introduction, nous allons faire une Tartiflette. Alors préparez votre environnement de développement :
four
plat à gratin
pommes de terre...
Vraiment ? Mais je n'ai pas de Reblochon sous la main !
Bon OK, j'utiliserai l'analogie de la tartiflette, mais pas seulement ! En plus, je vous propose de développer une « vraie application ». Même la tartiflette a ses limites !!
Dans ce cours, je vous propose de suivre en fil rouge la création d'un système de gestion de tickets d'incident et de demandes d'évolution.
Pour cela, il vous faudra mettre en place votre environnement de développement.
Voici celui qui j'ai retenu :
JDK 8
Projet géré avec Apache Maven™
Base de données PostgreSQL
Serveur d'application Apache Tomcat
EDI : IntelliJ IDEA, mais vous pouvez utiliser Eclipse avec le plugin Spring Tools.
Pour la mise en place de l'environnement de développement, je vous conseille de suivre les chapitres :
Configurez votre environnement de développement du cours Organisez et packagez une application Java avec Apache Maven ;
Mettez en place votre environnement de développement du cours Faites une base de données avec UML.
Initialiser le projet
L'initialisation d'un projet Maven est abordé dans le chapitre Créez votre premier projet Maven du cours Organisez et packagez une application Java avec Apache Maven.
Afin de gagner du temps et de ne pas me répéter, je vous propose de partir du projet déja initialisé disponible sur GitHub. Il vous suffit de le télécharger et de l'importer dans votre EDI.
Ce projet contient déjà certains éléments, comme vous pourrez le voir.
Comment est organisé le projet ?
Pour vous repérer, voici le diagramme de classes du domaine fonctionnel du projet ainsi que le modèle physique de données (MPD). Tous les éléments du domaine fonctionnel ne sont pas codés.
Le projet est un projet Maven multi-modules, organisé suivant une architecture multi-tiers où chaque couche fait l'objet d'un module Maven.
Voici le contenu du projet :
Le module ticket-webapp contient l'application web. Pour plus de simplicité, l'application web ne fournit pas d'interface graphique mais uniquement des données, via une simple API proposant des webservices (backend). Ces données sont destinées à être consommées par une interface graphique web (frontend) qui ne sera pas développée dans ce cours.
Le module ticket-batch contient les batchs de l'application.
Le module ticket-business contient la logique métier de l'application avec notamment les classes Manager.
Le module ticket-consumer contient les éléments d'interaction avec les services extérieurs (base de données, webservices...). S'y trouvent notamment les DAO.
Le module ticket-model contient les objets métiers (les beans).
Le module ticket-technical contient les éléments et dépendances techniques de l'application (gestion des logs...). Tous les autres modules dépendent de ce module technique.
Module ticket-model
Contenu :
package
org.example.demo.ticket.model.bean
: les objets du domaine fonctionnel (les beans).les beans sont répartis dans des sous-packages (projet, ticket...)
package
org.example.demo.ticket.model.recherche
: les objets de définition des recherches (critères de recherche, de chargement...)même découpage en sous-package que pour les beans
package
org.example.demo.ticket.model.exception
: les exceptions propres à l'application
Module ticket-consumer
Non implémenté dans la version fournie
Module ticket-business
Contenu :
package
org.example.demo.ticket.business.manager
: Business Managers, c'est-à-dire les gestionnaires métier liés aux beans.un manager par sous-packages de beans
nommé du nom du sous-package suffixé par
Manager
(ex: ProjetManager, TicketManager...)
Module ticket-webapp
Les webservices REST fournis par l'application web utilisent l'API JAX-RS et Jersey comme implémentation. Je ne rentrerai pas dans le détail de l'implémentation de webservices REST en Java, cela n'a pas d'importance pour ce cours. Ils nous permettront un peu d'interactivité à titre d'illustration.
L'implémentation des webservices REST se trouve dans le package org.example.demo.ticket.webapp.rest
:
sous-package
resource
: les Ressources RESTun sous-package par sous-packages de bean (projet, ticket...)
une classe de ressource par beans
nommée du nom du bean suffixé par
Resource
(ex: ProjetResource, TicketResource...)