Ceci est une ancienne révision du document !
L'objectif de ce TP est de ce familiariser avec les technologies de mapping objet-relationnel au travers de l'API JPA de Java. Pour cela il est demandé de compléter le code de l'application fournie afin de la rendre fonctionnelle.
Le TP peut être réalisé seul ou en binôme. Les groupes de 3 étudiants ou plus sont interdits.
Le projet indiqué dans tomuss (c.f. ci dessous) sera utlisé pour récupérer le code source produit pour ce TP. Il est donc demandé de pousser le code final du TP sur le dépôt forge que vous avez créé précédement.
La date limite est fixée au vendredi 7 octobre 2016 à 23h59.
<note warning>Problèmes de quota disque liés à maven. Changer la configuration comme indiqué ici</note>
Créer un projet sur la forge et partagez le avec votre binôme. Cloner votre projet (on supposera que l'identifiant du projet est pxxxx-gdw-tp1
):
hg clone https://forge.univ-lyon1.fr/hg/pxxxx-gdw-tp1
Tirer ensuite le contenu de l'application depuis le dépôt de l'énoncé, puis pousser le tout vers votre dépôt sur la forge.
cd pxxxx-gdw-tp1 hg pull https://forge.univ-lyon1.fr/hg/inf1090m-2016-tp1 hg update hg push
Enregistrez la valeur pxxxx-gdw-tp1
dans la case TP1_Forge
de l'UE Gestion De Données Pour Le Web dans tomuss. A noter que les 2 membres du binôme doivent saisir cette même valeur qui sera utilisée pour identifier les groupes et les rendus.
Charger le projet dans votre IDE favori.
La base de données relationnelle utilisée dans ce TP est H2. Télécharger la base de données, puis lancer la console:
cd ..../h2/bin ./h2.sh -web -webAllowOthers -tcp -tcpAllowOthers -browser
Vérifier les paramètres dans la page web qui s'ouvre (enregistrer la connexion pour plus tard au cas où):
org.h2.Driver
jdbc:h2:tcp://localhost/~/gdw-db
Utiliser le script SQL src/main/resources/microblog.sql
pour générer les tables de la base de données.
Laisser la base de données démarrée.
Vérifier la connexion entre Java et la base H2 en lançant le test unitaire JPATest
.
Pour lancer l'application, deux possibilités:
mif04.gdw.tp1.App
depuis l'IDEmvn exec:java
depuis la racine du projetL'application lance une interface dans un navigateur. Cette interface n'est pour le moment pas réellement fonctionnelle, c'est à vous de prendre la main pour la compléter.
Le code comporte 3 packages d'intérêt:
modele
contient les classes que l'on fera correspondre à des tables de la base de données (à annoter avec JPA)dao
contient le code des classes faisant l'interface entre le support de persistance (i.e. JPA) et le code métiermetier
contient une seule classe, Blog
qui contient du code métier utilisé par l'interface. Les transactions sont gérées dans cette classe et ne doivent pas être gérées au niveau des DAOs.
Par ailleurs, le package itf
contient le code qui gère l'interface Web. Il n'est à priori pas nécessaire de comprendre en profondeur ce code.
modele
avec JPA, en procédant par exemple comme suit:User
Categorie
sauf ce qui concerne la collection des billets. Attention à la gestion de la clé primaire.Billet
en faisant attention aux clés primaires et étrangères définies sur la table BILLET
Categorie
@NamedQueries
.
Remarque: Le test unitaire JPATest
permet de vérifier que le mapping défini par les annotation est cohérent avec le schéma de la base H2.
Les modifications apportées au projet doivent respecter les contraintes suivantes:
javax.persistence
@EmbeddedId
, @Embbedable
, @IdClass
. Voir également @ElementCollection
/@CollectionTable
si les éléments de la collection ne sont pas des entités.@Column
, @JoinColumn
peuvent être dans le mappingmappedBy
, il est possible d'utiliser une valeur du type maCle.unChamp
pour indiquer que la relation inverse est référencée à partir d'un champ dans une clé composée (i.e. en présence de @Embbedable
/@EmbbeddedId
).@Lob
peut être utilisée pour les champs contenant de grandes données (type TEXT, CLOB ou BLOB).