Projets#

Description#

Le projet consiste à réaliser une mini-application fortement centrée sur la conception du modèle de données et sa réalisation avec JPA/Hibernate. Des énoncés sont donnés ci-dessous.

Pour chacun, la ligne directrice est la même. Je fournis des énoncés dans ce qui suit, vous êtes libres de choisir celui qui vous convient.

Ce qui est impératif#

Il faut impérativement effectuer les étapes suivantes qui constituent le noyau des connaissances à acquérir.

  • concevoir le modèle de données avec UML (ou équivalent) en distinguant bien les classes, les associations et les relations de généralisation (héritage); ce modèle peut être validé par votre enseignant avant tout début de réalisation, en me l’envoyant par mail (raphael.fourniersniehotta@lecnam.net, cette validation est optionnelle);

  • créer le schéma de la base de données et le modèle Java, sur la base de la conception effectuée précédemment; bien entendu, les deux doivent être liés par un mapping JPA;

  • insérer quelques données et implanter une mini-application Web MVC qui permet de naviguer dans la base et de consulter les données.

Avec JPA, le but et de concevoir des applications orientées-objet dont la persistance n’est qu’un aspect. La base de données ne sert qu’à représenter les données, « nues », les classes représentent les données et les comportements (logique métier). Pour que cela soit bien clair, il sera bon d’implanter quelques calculs « métiers » et de montrer leur résultat. Les énoncés sont prévus en ce sens.

Ce qui est optionnel#

En plus des étapes impératives, l’évaluation du projet tiendra compte des fonctionnalités suivantes:

  • intégration de l’interface Web dans un template avec menu, logo, etc., comme vu en cours;

  • utilisation intensive des liens HTML, pour « naviguer » dans la base et bien mettre en évidence sa structure de graphe d’objets;

  • minimisation des requêtes SQL par utilisation appropriée de HQL;

  • réalisation d’une transaction applicative.

Ce qui est apprécié#

Enfin, des critères non spécifiques à JPA/Hibernate seront appréciés: bonne organisation de vos classes, normalisation des règles de nommage, documentation, commentaires. C’est l’aspect le moins essentiel, mais pensez à le soigner quand même.

Rendu du projet#

Le code du projet doit être fourni sous la forme d’une archive d’application Web .war. Cette archive doit pouvoir s’installer directement sous un environnement Tomcat/MySQL/JPA/Hibernate conforme à celui décrit dans l’ensemble du cours. La validation par les enseignants consiste à installer l’application, à consulter les différentes pages et à vérifier les fonctionnalités implantées. Un extrait de la base de données avec laquelle vous avez travaillé devra être également fourni, pour faciliter le test des fonctionnalités de votre projet.

Un bref rapport devra accompagner le projet, décrivant l’installation, le schéma de la base, éventuellement un jeu de données (vous pouvez exporter votre base MySQL), une liste des fonctionnalités et quelques copies d’écran. Le fichier sera fourni au format pdf et ne devra pas excéder 10 pages (minimum 1 page).

Les règles de nommage à respecter sont les suivantes :

  • la base sql porte votre nom. Le dump a pour extension .sql. Exemple : fournier.sql, contenant la base fournier.

  • le fichier contenant le code porte aussi votre nom, suivi du type de projet. Exemples : fournier-sport.war, fournier-mediatheque.war

  • le rapport a le même schéma de nommage que l’archive, mais pour extension .pdf. Exemple : fournier-sport.pdf

  • les trois fichiers sont inclus dans une archive au format zip (exemple : fournier-mediatheque.zip), déposée sur la plateforme Moodle. La date butoir de rendu est fixée au vendredi 22 février 2020 à 19h59, la plateforme ne permettra pas les rendus au-delà du dimanche suivant (et les retards seront indiqués).

Le non-respect du schéma de nommage sera sanctionné. Les envois de pièces jointes par mail ne seront pas acceptés.

Projet 1 : Un club de sport#

Les besoins#

Un club de sport de raquettes propose à ses adhérents de faire du tennis (indoor), du badminton ou du squash. Vous allez être en charge de la réalisation d’une application qui permettra au propriétaire de connaître l’état de son club : quel est l’état de ses installations ? Et quel est l’état de l’abonnement de chaque joueur ?

Les joueurs effectuent des réservations de terrains, à une date et une heure données (par exemple : le 10 février 2018 à 20h30), pour une heure à chaque fois. Il y a, évidemment, un type de salle par sport, avec des attributs partiellement communs (dates de mise en service et état général avec une note entre 1 et 5 pour chaque salle) et partiellement spécifiques :

  • les courts de tennis ont des surfaces différentes (appelées « greenset » et « terre battue »);

  • les courts de squash peuvent être vitrés (ou non) et ont un parquet dont il faut stocker la date de remplacement;

  • les dates d’achats des filets et poteaux de badminton doivent être conservées.

Les joueurs ont deux types d’abonnement, au forfait, ou au ticket. Au ticket, ils ne règlent rien initialement, mais paient ensuite plus cher l’heure de sport (disons 22, 20 et 18 euros pour du tennis, du badminton et du squash, respectivement). Au forfait, ils paient un abonnement annuel, disons de 200 euros, qui leur donne accès aux courts pour 11, 10 et 9 euros de l’heure, respectivement.

La conception (diagramme UML)#

  • Proposez une modélisation du système d’informations, avec les différentes classes, les associations. Précisez soigneusement l’emplacement des attributs.

  • Définissez une ou plusieurs méthodes permettant de calculer ce qui a été payé par un joueur le mois précédent (s’il est au forfait, intégrez dans le calcul 1/12 du montant du forfait annuel). Spécifiez chaque méthode avec précision et concision en fonction des attributs définis précédemment (pseudo-code).

  • Maintenant complétez le modèle en intégrant les informations sur les types de sport. Spécifiez la ou les méthodes donnant le prix d’une heure de chaque sport pour chaque joueur.

  • Définir une méthode qui indique le chiffre d’affaire du mois dernier.

L’implantation (JPA/Hibernate)#

  • Donnez le schéma de la base résultant du modèle UML. Implantez ce schéma avec MySQL.

  • Réalisez le modèle JPA de l’application.

  • Réalisez une mini-application MVC affichant les données de la base et capable de calculer le chiffre d’affaire.

Remarque :#

Vous pouvez être créatifs et changer les valeurs des montants payés, ajouter des fonctionnalités.

Projet 2: Le site d’une médiathèque municipale#

Les besoins#

Une médiathèque municipale prête des documents à différents abonnés (deux catégories : enfants et adultes), qui peuvent les emprunter pour des durées variables (selon la catégorie d’abonné et le type de documents). Les documents peuvent être de différentes nature (DVD, Livre, Périodique).

Les adultes ont le droit d’emprunter 10 documents simultanément, dont 3 DVD (maximum) et 2 périodiques. Les DVD ne peuvent être empruntés plus d’une semaine, livres et périodiques peuvent être conservés 3 semaines. Les enfants ne peuvent emprunter que 6 documents simultanément, dont 2 DVD et 1 périodique. Ils ne peuvent garder les documents que 2 semaines maximum.

Le site est une version simplifiée, avec des fonctionnalités réduites par rapport à ce que l’on attendrait d’un vrai site. Votre site Web doit permettre aux utilisateurs de réserver des documents. Faites simple, pas de gestion de « panier » comme sur des sites marchands ici : un utilisateur doit pouvoir afficher la liste des documents présents dans la base, puis cliquer sur « réserver » sur un bouton à côté du document pour l’emprunter (sauf, bien sûr, s’il dépasse alors le quota qui lui est autorisé). Pour éviter de gérer des « sessions utilisateurs », vous vous en tiendrez à un nombre restreint d’utilisateurs (par exemple 4, 2 adultes et 2 enfants), et afficher des liens sous la forme « réserver en tant que Adulte1 », « réserver en tant qu’Enfant2 ».

Le site doit aussi permettre aux documentalistes de voir si des utilisateurs ont des documents en retard. Là encore, version simplifiée : toutes les pages sont accessibles à tous les utilisateurs. Il faut donc une page dans laquelle est listé si un document est actuellement emprunté, par qui, et est-ce que le document devrait être de retour (à calculer avec les informations fournies ci-dessus).

La conception (diagramme UML)#

  • Proposez une modélisation des différentes entités et associations requise par l’application

  • Indiquez comment calculer le retard des documents

L’implantation (JPA/Hibernate)#

  • Donnez le schéma de la base résultant du modèle UML. Implantez ce schéma avec MySQL.

  • Réalisez le modèle JPA de l’application.

  • Réalisez une mini-application MVC affichant les données de la base, comme décrit ci-dessus.

En option#

  • triez l’affichage des pages de documents par leurs catégories, n’affichez pas les documents déjà empruntés, permettez l’ajout de documents dans la base.