====== TP JPA/JAXB ====== ===== Rendu ===== Le TP est à rendre pour le **24/09/2015**. Saisir l'identifiant du projet forge (pas l'url, seulement la fin, par exemple ''p23456789-tiw5-tp1'') dans la case "TIW5 TP1" de votre page [[http://tomusss.univ-lyon1.fr|tomuss]]. ===== 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). ===== Mise en place ===== Créer un projet forge pour ce TP, le cloner puis faire un pull sur le dépôt suivant: https://forge.univ-lyon1.fr/hg/inf2018m-2015-base Explorer le projet, en comprendre la structure et réfléchir aux rôles des deux fichiers ''pom.xml''. Pour être à l'aise dans ce TP il peut être utile de se familiariser avec la base de données java [[http://www.h2database.com/html/download.html|H2]] ([[http://www.h2database.com/html/tutorial.html#tutorial_starting_h2_console|tutoriel]]). ===== Travail demandé ===== - Comprendre le schéma XML et l'exemple de fichier ''carte1.xml''. - Utiliser JPA pour annoter les classes du package ''tiw5.restaurants.modele'' Plat et Menu. Penser que le contenu du fichier ''carte1.xml'' devra à terme pouvoir être insérer en base. - Compléter la classe ''CarteORMDAO'' de manière appropriée - Faire des tests unitaires: - Créer un test unitaire utilisant l'unité de persitance ''test-pu'' définie dans le fichier de configuration ''persistence.xml''. Ce test devra vérifier que la mise ne place des mappings ne provoque pas d'erreur. - Créer, dans le même fichier ''persistence.xml'', une deuxième unité de persistance sur le modèle de la première, mais en changeant l'[[http://www.h2database.com/html/features.html#database_url|URL JDBC]] de façon à utiliser une base H2 que vous aurez démarrée depuis la console H2 (utiliser une URL TCP dans la console H2 pour démarrer un serveur à la volée). Réfléchir à une bonne valeur pour ''hibernate.hbm2ddl.auto''. - Changer l'unité de persistance du test unitaire et vérifiez dans la console H2 que le schéma est conforme à vos attentes. - Ajouter des tests unitaires pour vérifier le bon fonctionnement de votre DAO. Vérifier les données insérées/supprimées avec la console H2. - Repasser l'unité de persitance de vos tests sur ''test-pu'' - Changez vos tests pour utiliser JDBC afin de vérifier le comportement du DAO vis-à-vis des ajouts/suppressions/modifications de données. - Annoter les classes ''Carte'', ''Menu'' et ''Plat'' avec JAXB de façon les faires correspondre au schéma XML. - Compléter la classe ''CarteJAXBDAO''. - Faire des tests unitaires: - Créer un test unitaire vérifiant la bonne mise en place des annotation JAXB en sérialisant un plat, un menu et une carte. - Ecrire des tests unitaires vérifiant le bon fonctionnement du DAO XML. Essayer de trouver un moyen de faire qui évite de créer des fichiers sur disque. * Parmi les tests effectués, au moins un test devra vérifier la validité du XML produit par le DAO vis-à-vis du schéma XSD fourni - Compléter la classe ''ImportExport'' afin de pouvoir importer et exporter le contenu de la base relationnelle depuis/vers un document XML. Ecrire des tests unitaire pour en vérifier le bon fonctionnement. Il est interdit de supprimer ou de modifier la signature des méthodes publiques des classes fournies. Il est par contre possible d'ajouter des nouvelles méthodes publiques à ces classes. ===== Ressources ===== Quelques liens utiles: * Le cours sur les {{:enseignement:bdav:mapping-objets-relationnel-xml.pdf|ORM+JAXB}}, et le [[enseignement:tp:bd:tp-orm|TP associé]]. * Le [[http://java.sun.com/javaee/6/docs/tutorial/doc/bnbpy.html|tutoriel JEE sur la persistance]]. * L'[[http://download.oracle.com/javaee/6/api/|API JEE]] -> package javax.persistence. * [[:enseignement:aide:apis#junit|Mini-intro JUnit]] * [[http://jaxb.java.net/tutorial/|Tutoriel JAXB]] * [[http://download.oracle.com/javase/6/docs/api/|API Java 6]] -> package javax.xml.bind et sous-packages