TIW5 TP Modèle de données

Année 2014-2015

Sources des données: Freebase (cf le type Film).

Objectifs

L'objectif est de réviser / de prendre en main les APIs de persistance standard Java des objets vers le relationnel (JPA) et vers XML (JAXB).

Binômes / Trinômes

Les binômes / trinômes pour ce TP sont à constituer de la manière suivante:

  • maximum 2 étudiant(e)s ayant fait le M1 au département l'an dernier;
  • minimum 1 étuduant(e) ayant fait le M1 au département l'an dernier;
  • tout trinôme doit contenir au moins un étudiant n'ayant pas fait le M1 au département l'an dernier;
  • les binômes/trinômes sont à choisir dans la mesure du possible au sein des groupes TI5.

Rendu

Le TP est à rendre pour 25/09/2014, 23h59. Saisir dans tomuss l'identifiant du projet forge de votre TP dans la colonne TP1_F:

  • tous les membres du groupe doivent le faire
  • c'est identifiant qu'il faut saisir, pas l'url mercurial, ni la page web du projet forge
  • l'identifiant est la partie après projects/ (resp. hg/) dans l'url de la page du projet (resp. l'url mercurial)
  • les dates de commit pourront être utilisées pour vérifier la date de rendu

Versionner un fichier README.txt contenant les noms et numéros des étudiants du groupe (binôme ou trinôme) ainsi que tout commentaire à destination du correcteur du TP.

Mise en place

Télécharger le projet maven suivant: inf2018m-2014-base.zip.

Alternativement, il est possible de cloner le dépôt de l'énoncé: https://forge.univ-lyon1.fr/hg/inf2018m-2014-base .

Ce projet contient:

  • un fichier pom.xml préconfiguré avec les dépendances vers junit, hibernate et h2 pour les tests
  • un fichier src/main/resources/setup-h2.sql qui contient le code SQL pour créer des tables dans H2
  • un script build-h2.sh, dont il faut éventuellement éditer la variable H2JAR pour initialiser une base H2 dans le répertoire target1)
  • un fichier XML Schema src/main/resources/film.xsd
  • des classes dans les packages sw.film.model et sw.film.model.dao situés dans src/main/java

<note tip>La commande java -cp la/ou/est/h2.jar org.h2.tools.Console permet de lancer une console Web pour regarder le contenu d'une base H2 et exécuter des sciprts (cf tutoriel h2)</note>

Le zip est une archive d'un dépôt Mercurial. Créer un projet sur la forge que vous utiliserez pour versionner votre TP. Pousser le dépôt local 2) vers votre projet forge. N'oubliez pas de partager votre projet avec votre binôme (vos trinômes).

Travail demandé

  1. Comprendre les schémas SQL et XML
  2. Utiliser JPA (cf TP Mise en oeuvre de mappings Objet/Relationnels) pour annoter les classes du package sw.film.model (sauf FilmCollection) de façon à pourvoir utiliser une base H23) comme support de persistance.
  3. Compléter les classes du package sw.film.model.dao.jpa en utilisant JPA.
  4. Ecrire une classe de test unitaire pour vérifier le bon fonctionnement du mapping JPA.
  5. Annoter les classes du package sw.film.model (y compris FilmCollection) avec JAXB pour pouvoir (dé)sérialiser des objets de ces classes au format XML. Le format XML produit/lu devra être valide vis-à-vis du schéma XSD fourni.
  6. Ecrire une4) classe de test unitaire pour vérifier le bon fonctionnement de la (dé)sérialisation avec JAXB, y compris le respect du schéma XSD.

<note warning>Attention, il est interdit de modifier les interfaces du package sw.film.model.dao et les classes qui implémentent des interfaces de ce package doivent continuer à le faire. Vous pouvez par contre ajouter à loisir des méthodes publiques supplémentaires dans les classes d'implémentation. Il est interdit de changer la signature des méthodes publiques des classes fournies.</note> <note warning>De même, il est interdit de changer le schéma de la BDD ou le schéma XML.</note>

Ressources

Quelques liens utiles:

Fichier persistence.xml placé dans src/test/resources/META-INF:

persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>...</class> <!-- compléter ici avec les classes du mapping OR -->
    <properties>
      <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
      <property name="hibernate.connection.url" value="jdbc:h2:target/test-db"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="validate"/>
    </properties>
  </persistence-unit>
</persistence>

<note warning>Attention, le hibernate.hbm2ddl.auto doit bien être à validate sous peine de modifier le schema de la BDD.</note>

1)
je suis preneur d'un éventuel .bat similaire pôur Windows
2)
i.e. le projet maven
3)
typiquement celle créée par le script build-h2.sh décrit ci-dessus
4)
au moins