Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008...
Transcript of Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008...
![Page 1: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/1.jpg)
Object Relational MappingJava Persistence API
Alexandre COLLIGNON Ingénieurs 2000
22 Janvier 2008
![Page 2: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/2.jpg)
22 Jan. 2008 Alexandre COLLIGNON 2
Sommaire
● Introduction
● Object Relational Mapping
● Java Persistence API
● Exemple d'utilisation
● Conclusion
![Page 3: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/3.jpg)
22 Jan. 2008 Alexandre COLLIGNON 3
Introduction Les bases de données relationnelles
● Basées sur le langage relationnel
Opérations ajout / lecture / modification / suppression
● Eléments de même “constitution” stockés dans des tables
● Stockent de grande quantité de données de façon
Uniforme Maîtrisée Interopérable
![Page 4: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/4.jpg)
22 Jan. 2008 Alexandre COLLIGNON 4
IntroductionLe monde objet
● Ensemble d'entités
Autonomes En relation Qui coopèrent
● Un objet correspond à
Ensemble de membres (primitif ou objet) Ensemble de méthodes UNE responsabilité
![Page 5: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/5.jpg)
22 Jan. 2008 Alexandre COLLIGNON 5
Object Relational Mapping
● Relier les mondes objet et relationnel
Stocker les objets dans des bases de données relationnelles
● Offrir une couche d'abstraction au SGBDR
● Séparer les responsabilités
● Implémentation dans de nombreux langages
Framework Ruby on Rails contient un ORM Rose::DB::Object en Perl PDO pour Python
![Page 6: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/6.jpg)
22 Jan. 2008 Alexandre COLLIGNON 6
Java Persistence API
● L'O.R.M à la sauce Java
● Une partie de la spécification EJB3 (JSR220)
Intégrée à Java Enterprise Edition 5 Fruit du rassemblement des travaux des ORMs Java
existants
● Différentes implémentations disponibles
Toplink Essential (Reference Implementation) Hibernate (JBoss) Open JPA (Apache)
![Page 7: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/7.jpg)
22 Jan. 2008 Alexandre COLLIGNON 7
Java Persistence API
● Environnement d'exécution
Application Standalone (Architecture 2Tiers) Conteneur d'EJB (Architecture 3Tiers)
● Code indépendant de l'environnement
Souplesse évidente Maintenabilité accrue
![Page 8: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/8.jpg)
22 Jan. 2008 Alexandre COLLIGNON 8
Java Persistence API
● Cinq composants principaux
L'unité de persistance Le modèle des objets du domaine Les métadonnées API Requêtes
![Page 9: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/9.jpg)
22 Jan. 2008 Alexandre COLLIGNON 9
Java Persistence APIUnité de persistance
● Correspond à l'environnement
Configuration de l'accès à la base de données Paramètrage de la couche de persistance
● Spécifiée à l'aide du fichier persistence.xml
![Page 10: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/10.jpg)
22 Jan. 2008 Alexandre COLLIGNON 10
Java Persistence APIUnité de persistance
● Exemple hors conteneur d'EJBs
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"><persistence-unit name="xposejpa-javadb">
<provider>oracle.toplink.essentials.PersistenceProvider
</provider><class>fr.umlv.etudiant.acollign.jpa.bom.Person</class>...<properties>
<property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" /><property name="toplink.jdbc.url" value="jdbc:derby://localhost/xpose" /><property name="toplink.jdbc.user" value="xpose" /><property name="toplink.jdbc.password" value="china" /><property name="toplink.ddl-generation" value="create-tables" />
</properties></persistence-unit>
</persistence>
![Page 11: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/11.jpg)
22 Jan. 2008 Alexandre COLLIGNON 11
Java Persistence APIUnité de persistance
● Exemple dans un conteneur d'EJB
<persistence version="1.0"><persistence-unit name="xpose-jpa">
<jta-data-source>jdbc/xpose</jta-data-source></persistence-unit>
</persistence>
![Page 12: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/12.jpg)
22 Jan. 2008 Alexandre COLLIGNON 12
Java Persistence APIObjet du domaine Entity
● Objet métier sous forme de POJO (Plain Old Java Object)
Création par un simple new Simple Maîtrisé
● Aucune contrainte d'implémentation / héritage
● Entity = POJO + Clé primaire + Méta données
![Page 13: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/13.jpg)
22 Jan. 2008 Alexandre COLLIGNON 13
Java Persistence APIObjet du domaine Entity
● Un simple JavaBean
Constructeur par défaut Accesseur pour chaque champ
● getFieldName / setFieldName (non booléen)● isFieldName / setFieldName (booléen)
Gestion d'évènement sur les modifications des propriétiés● non requis par JPA
![Page 14: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/14.jpg)
22 Jan. 2008 Alexandre COLLIGNON 14
Java Persistence APIObjet du domaine Entity
● Un exemple de JavaBeanpublic class Person {
private String lastname;private String firstname;private Address address;
public Person() {}
public Person(String lastname, String firstname, Address address) {this.firstname = firstname;this.lastname = lastname;this.address = address;
}
public String getLastname() {return lastname;
}public void setLastname(String lastname) {
this.lastname = lastname;}...
}
![Page 15: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/15.jpg)
22 Jan. 2008 Alexandre COLLIGNON 15
Java Persistence APIObjet du domaine – Clé primaire
● Obligatoire
● Référence unique vers un Entity en base de données
● Deux formes possibles
Simple (un type primitif) Composé (N type(s) primitif(s) ou objet(s))
![Page 16: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/16.jpg)
22 Jan. 2008 Alexandre COLLIGNON 16
Java Persistence APIObjet du domaine – Clé primaire
● Génération automatique des clés primaires simples
AUTO● Au choix du provider de peristance
TABLE● Une valeur dans une table utilisée pour tous les entities
SEQUENCE● Fonction sequence du SGBDR (pas toujours portable)
IDENTITY● Fonction identity du SGBDR (pas toujours portable)
![Page 17: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/17.jpg)
22 Jan. 2008 Alexandre COLLIGNON 17
Java Persistence APIObjet du domaine – Clé primaire
● Clé primaire composée
Plusieurs champs de l'objet Un objet externe contenant plusieurs champs
![Page 18: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/18.jpg)
22 Jan. 2008 Alexandre COLLIGNON 18
Java Persistence APIMéta données
● Définition dudit mapping
Correspondance entre entities et tables Correspondance entre membres et colonnes Renseignement des relations entre entities Spécification de la génération des clés primaires
![Page 19: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/19.jpg)
22 Jan. 2008 Alexandre COLLIGNON 19
Java Persistence APIMéta données
● Deux méthodes
Annotation Java Fichier de description XML orm.xml
● Ces deux méthodes peuvent être mélangées
Technique appelée “merged metadata” Parfois utile Souvent dangeureux
![Page 20: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/20.jpg)
22 Jan. 2008 Alexandre COLLIGNON 20
Java Persistence APIMéta données Exemple
● Utilisation des annotations@Entitypublic class Person {
@Id@GeneratedValueprivate long id;
@Column(name="LASTNAME")private String lastname;
private String firstname;
private Address address;
public Person() {}
public String getLastname() { return lastname;}
public void setLastname(String lastname){this.lastname = lastname;
}...
}
![Page 21: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/21.jpg)
22 Jan. 2008 Alexandre COLLIGNON 21
Java Persistence APIMéta données Exemple
● Utilisation du fichier orm.xml
<?xml version="1.0" encoding="UTF-8" ?><entity-mappings version="1.0">
<entity class="fr.umlv.etudiant.acollign.jpa.bom.Person"><attributes>
<id name="id"><generated-value />
</id><basic name="lastname">
<column name="LASTNAME" /></basic>
</attributes></entity>
</entity-mappings>
![Page 22: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/22.jpg)
22 Jan. 2008 Alexandre COLLIGNON 22
Java Persistence APILe manager d'entité (EntityManager)
● Entity managé par l'objet EntityManager
Lecture / ajout / modification / suppression Factory de requêtes Récupération de la transaction d'entité Attribué à une unité de persistance
● EntityManagerFactory
Créé sur la factory method Persistence.createEntityManagerFactory
Méthode createEntityManager
![Page 23: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/23.jpg)
22 Jan. 2008 Alexandre COLLIGNON 23
Java Persistence APIRequête (Query)
● JPA dispose du langage JPQL (aka EJBQL)
Inspiré fortement du langage SQL Plus proche de l'objet que SQL Une abstraction supplémentaire Facile à manipuler (quand on connaît SQL ou pas)
● SQL reste cependant utilisable
Parfois nécessaire Mais déconseillé
![Page 24: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/24.jpg)
22 Jan. 2008 Alexandre COLLIGNON 24
Java Persistence APIRequête (Query)
● L'objet Query
Représente une requête Instantiation à l'aide de factory method sur un EntityManager
● em.createQuery● em.createNativeQuery● em.createNamedQuery
![Page 25: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/25.jpg)
22 Jan. 2008 Alexandre COLLIGNON 25
Java Persistence APIRequête (Query)
● Exemple de requêtes JPQL
Select s From Student s Select s From Student s Where s.firstname = “Alexandre”
● Les requêtes paramètrées
Select s From Student s Where s.firstname = :fs Peuvent être compilées > performances Enrichies des paramètres (place holder) après création
● query.setParameter(“fs”, “Alexandre”);
![Page 26: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/26.jpg)
22 Jan. 2008 Alexandre COLLIGNON 26
Java Persistence APIRequête (Query)
● Named Query
Utilisation d'annotation @NamedQuery sur un Entity Associe un nom à une requête JPQL Plus de cohérence Compilée (et donc plus rapide) @NamedQuery(“Student.findAll”, “Select s from Student s”)
● Utilisation via factory method spécifique● em.createNamedQuery(“Student.findAll”);
/!\ Espace de nom partagé > Attention au conflit● Convention ClassName.QueryDescription
![Page 27: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/27.jpg)
22 Jan. 2008 Alexandre COLLIGNON 27
Java Persistence API
● Exemple d'utilisation avec
Des étudiants (et donc des personnes) et leurs filières Toplink Essential comme implémentation JPA Deux SGBDR
● Java DB (aka Apache Derby DB)● PostgreSQL
SQuirreLSQL Eclipse en IDE
![Page 28: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/28.jpg)
22 Jan. 2008 Alexandre COLLIGNON 28
Conclusion
● Les avantages
Séparation couche métier – accès à la base de données Simplification de l'utilisation des données Abstraction du SGBDR sousjacent
● Les faiblesses (subjectives)
Jeunesse de la norme Implémentation aux compléments hétérogènes
● Utilisation des bonus empêche de changer d'implémentation
![Page 29: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/29.jpg)
22 Jan. 2008 Alexandre COLLIGNON 29
Conclusion
● Le futur de JPA
Ecriture de la version 2.0 en cours Spécification sera extraite de celle des EJBs
● Les alternatives aux ORMs (et au SGBDR)
Utilisation de SGBD Objet (Caché, Versant)
● Ce qui n'a pas pu être vu en détail
Gestion des relations Gestion des transactions
![Page 30: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/30.jpg)
22 Jan. 2008 Alexandre COLLIGNON 30
Références
● Approche objet http://wwwigm.univmlv.fr/~dr/DESS/Objet/
● ORM http://www.objectmatter.com/vbsf/docs/maptool/ormapping.html
● JPA – Informations JEE http://www.parleys.com/display/PARLEYS/Home
Conférence “Writing JPA Applications”, SpringOne Conférence “JEE 5 Blueprints JPA”, JavaOne 2006 Conférence “Advanced Topic in JPA”, JavaZone 2007
![Page 31: Object Relational Mapping Java Persistence APIHibernate (JBoss) Open JPA (Apache) 22 Jan. 2008 Alexandre COLLIGNON 7 Java Persistence API Environnement d'exécution Application Stand](https://reader034.fdocuments.net/reader034/viewer/2022042520/5f473a5100ff3b5b1747532d/html5/thumbnails/31.jpg)
22 Jan. 2008 Alexandre COLLIGNON 31
Questions ?