Ceci est une ancienne révision du document !


TP: Modèles de données

Modalités

Ce TP est à rendre pour le 03/10/2012, à raison d'un rendu par binôme.
URL de rendu SPIRAL: http://spiralconnect.univ-lyon1.fr/spiral/spiral.html#/activities/goto_folder/1742262

  • Les binômes sont à constituer au sein des groupes de projet TI. En cas de nombre impair d'étudiants, des binômes inter-groupes peuvent être constitués.

Il est demandé de rendre le TP sous forme d'un dépôt Mercurial qui aura été initialisé en clonant le dépôt indiqué ci-dessous. Mercurial est un gestionnaire de version, au même titre que par exemple git. A la différence de svn ou CVS c'est système décentralisé, permettant de réaliser des commit sans connexion avec un quelconque serveur central. Une introduction rapide à Mercurial est à disposition ici.

  • Dans le cas contraire le rendu se fera par spiral en déposant une archive du dépôt zippé. Il sera demandé de ne pas mettre les fichiers issus de la compilation du projet dans le zip, ce qui peut se faire d'une des manières suivantes:
    • cloner le projet courant dans un nouveau répertoire:
      hg clone mon-repertoire-de-dev le-repertoire-a-zipper

      puis zipper le répertoire ainsi obtenu;

    • alternativement, exécuter
      mvn clean

      dans le projet racine (projet) avant la compression, en ayant quitter l'environnement de développement afin d'éviter toute recompilation intempestive.

Introduction

Le but de ce TP est mettre en place un petit modèle de données objet ainsi que des mappings entre ce modèle et les modèles relationnels et semi-structurés.

Un projet maven de départ est disponible ici:

hg clone https://forge.univ-lyon1.fr/hg/inf2018m-2012-tpbase

Ce projet comporte des sous-projets. Le projet modele contenant les classes du modèles est dans le répertoire projet.

Remarques:

  • tous les affichages de debug devront se faire via une API de log. Le projet maven intègre les dépendances vers l'API slf4j.
  • Il est conseillé d'utiliser une application comme sonar afin de disposer de quelques indicateurs sur la qualité de votre code. Une partie de la note de ce TP pourra être directement issue des indicateurs de cette application.

Etapes

Modèle relationnel

Mettre en place un mapping avec un modèle relationnel en utilisant l'API JPA dans une base relationnelle1):

  • Annoter les classes à rendre persistantes en utilisant les annotations JPA
  • Créer un fichier de configuration META-INF/persistence.xml approprié ← déjà fait
  • Écrire un test unitaire pour tester la configuration du mapping relationnel en utilisant un gestionnaire d'entités pour sauver un objet en base2). ← déjà fait

Il est possible de modifier le modèle, en particulier en ajoutant/modifiant des méthodes. Toute modification doit cependant être justifiée dans le fichier README.txt.

Quelques liens utiles:

Remarque: les dépendances sur l'API JPA et le runtime hibernate sont déjà déclarées dans le pom.xml du projet, ainsi qu'une dépendance vers les pilotes JDBC pour derby dans le cadre des tests.

  • url jdbc pour derby: jdbc:derby:nomDeLaBd
  • driver jdbc pour derby: org.apache.derby.jdbc.EmbeddedDriver
  • dialect hibernate pour derby: org.hibernate.dialect.DerbyDialect
  • il est conseillé de mettre hibernate.hbm2ddl.auto à update

Modèle semi-structuré

Mettre en place un mapping avec XML via JAXB3):

  • Annoter les classes à sérialiser de façon à obtenir une représentation cohérente avec le schéma XML fourni dans le projet de départ.
  • Écrire un test unitaire qui vérifie que la sérialisation d'un objet est conforme au schéma XML fourni.

Quelques liens utiles:

Remarque:

  • Il peut être utile d'annoter les accesseurs (setXXX) avec @XmlTranscient

Extension du modèle

Ajouter les classes tiw5.modele.Artiste au modèle, mettre à jour les mappings relationnels et XML, ainsi que le schéma XML. On considère qu'un artiste a au moins un nom et un prénom, ainsi qu'un identifiant numérique. La classe Cd doit avoir la liste principale des artistes associés. On souhaite pouvoir préciser pour chaque piste un ensemble d'artistes ayant participé directement à ce morceau, en plus des artistes de la liste principale du cd. Adapter le schéma XML pour prendre en compte les artistes. Adapter vos tests unitaires le cas échéant.

Accès web

Le projet maven interface-web contient un squelette d'application Web. Créer une servlet renvoyant une représentation XML d'un album en fonction de son numéro, ainsi qu'une page HTML avec un formulaire pour la tester facilement. Ajouter la possibilité de passer paramètre format donnant le choix entre le format XML défini dans le fichier xsd du modèle et le format XHTML. La présentation XHTML se fera via l'application d'une feuille de style XSL

1)
par exemple une base derby qui évite de configurer un SGBD sur la machine de développement
2)
Attention: le test doit pouvoir être exécuté plusieurs fois de suite
3)
annotations de mapping XML JEE