TP: Modèles de données

Mises à jour:

  • 2012-09-20: mise à jour du dépôt mercurial pour corriger les problèmes du xsd (dépôt maj à ~ 16h).

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.

  • 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 contient les classes du modèles.

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.
  • Il vous est possible et même conseillé de fournir un fichier README.txt dans le répertoire racine du projet maven dans lequel vous pourrez mettre les remarques et/ou justifications à adresser au correcteur.

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.
  • Compléter le 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
  • Il peut être nécessaire d'ajouter des accesseurs destinés uniquement à JAXB

Extrait d'une base de films

Créer une classe tiw5.modele.InfosFilms contenant une liste de personnes, une liste de films et une liste de sociétés. Ajouter les annotations JAXB pour la sérialisation XML et mettez à jour le schéma XML.

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 film en fonction de son numéro, ainsi qu'une page HTML avec un formulaire pour la tester facilement. Changer la servlet pour envoyer la représentation XML d'une instance d'InfosFilms contenant le film et toutes les personnes et les sociétés qui y sont liées.

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. Les personnes/sociétés (et les détails les concernant) seront indiquées dans la description du film.

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