2. Plan
● Principes des Frameworks de persistence
● Historique
● JPA 1.0
● JPA 2.0
● Demo
● Questions?
JUG Lyon / oct 2009 Java Persistent API 2
3. BIO
Noël Perez
● Architecte Java chez Hinnoya
http://www.hinnoya.fr
● Formateur :
● Java/JEE/Struts/Hibernate ( bientôt JPA )
http://www.proatis.fr
● Auteur :
● Article sur JPA paru dans linuxdevjournal mi 2008
http://www.pere-nono.net
JUG Lyon / oct 2009 Java Persistent API 3
4. Groupe Hinnoya
Hinnoya Centre Est
Centre de services informatique Lyonnais
Pôle .Net Pôle Php Pôle Java
Technos : ASP/C#, Technos : Symphony, Technos : JEE,
DotNetNuke, Joomla, Struts,
… PHP5, Spring / SEAM,
… GWT,
...
Délégation de compétences Conseil Centre de services
Organisme de formation agrée ●Formation téchnologique ●Bureautique
●Gestion de projet ●Applicatif métier
JUG Lyon / oct 2009 Java Persistent API 4
5. Plan
● Principes des Frameworks de persistence
● Historique
● JPA 1.0
● JPA 2.0
● Démo
● Questions?
JUG Lyon / oct 2009 Java Persistent API 5
6. ●
Principes
●Historique
●JPA 1.0
Problématique ●JPA 2.0
●Démo
●Questions?
● Application inconcevable sans sauvegarde des
données
● Beaucoup de codes répétitifs :
● ouverture de connexions,
● gestion de requêtes multiples,
● traitement du résultat, …
● Sauvegarde porte sur des objets métiers
→ 1 objet métier = 1 table
JUG Lyon / oct 2009 Java Persistent API 6
7. ●
Principes
●Historique
●JPA 1.0
Problème gestion JDBC ●JPA 2.0
●Démo
●Questions?
● Besoin d'experts pour créer schémas et
requêtes de la base,
● difficulté à maintenir ce même schéma et ces
requêtes,
● Opérations coûteuses
● Peu d’intérêt, très répétitive
● dépendance vis à vis de la base initiale
→ peut nuire à la montée en charge d'une
application.
JUG Lyon / oct 2009 Java Persistent API 7
8. ●
Principes
●Historique
●JPA 1.0
Couches ●JPA 2.0
●Démo
●Questions?
Utilisateurs
Couche interface utilisateur ( UI )
Couche métier
Couche d'accès aux données ( DAO )
Couche de persistence
JDBC
Base de données
JUG Lyon / oct 2009 Java Persistent API 8
9. ●
Principes
Solution : frameworks de ●Historique
●JPA 1.0
●JPA 2.0
persistence
●Démo
●Questions?
● Travail à partir de POJO
● Ajout d’informations permettant de mapper les
propriétés d’objets avec les colonnes des tables
● Possibilité de demander à sauver un objet, le
supprimer, le mettre à jour
● Possibilité d’interroger la base en manipulant
les objets ( pur java )
JUG Lyon / oct 2009 Java Persistent API 9
10. ●
Principes
●Historique
●JPA 1.0
Principe technique ●JPA 2.0
●Démo
●Questions?
● 1 classe à persister = 1 description du mode
persistance
● Indique la table
● Indique les correspondances de champs
– Type
– Obligation
– Clé
– Lien avec d’autres objets
● 1 fichier de configuration générale décrivant
l’accès à la base de données
JUG Lyon / oct 2009 Java Persistent API 10
11. Plan
● Principes des Frameworks de persistence
● Historique
● JPA 1.0
● JPA 2.0
● Démo
● Questions?
JUG Lyon / oct 2009 Java Persistent API 11
12. ●Principes
●Historique
●JPA 1.0
Historique ●JPA 2.0
●Démo
●Questions?
JPA2
Final draft mars 2009
JPA:mai 2006
JDO2.0:2005
Hibernate 3.5.0.Beta-1 août.2009
JDO : 2002
Hibernate3.0 : fin 2004
Hibernate0.8 : fin 2001
EJB1.0
JUG Lyon / oct 2009 Java Persistent API 12
13. ●Principes
●Historique
●JPA 1.0
Participant JSR 317 ●JPA 2.0
●Démo
●Questions?
JUG Lyon / oct 2009 Java Persistent API 13
14. Plan
● Principes des Frameworks de persistence
● Historique
● JPA 1.0
● JPA 2.0
● Demo
● Questions?
JUG Lyon / oct 2009 Java Persistent API 14
15. ●Principes
●Historique
●JPA 1.0
Couches ●JPA 2.0
●Démo
●Questions?
Utilisateurs
Couche interface utilisateur ( UI )
Simple POJO avec des annotations
Couche métier pour gérer la persistance
Couche d'accès aux données ( DAO )
Appel aux fonctions de persistance Objets persistants
JPA Ajout dans le code de l'application des
sauvegardes, chargement ou requete
Hibernate/OpenJPA/TopLink/... vers les objets persistant
JDBC
Base de données
JUG Lyon / oct 2009 Java Persistent API 15
16. ●Principes
●Historique
●JPA 1.0
Cycle de vie ●JPA 2.0
●Démo
●Questions?
Nouvelle
instance
Transient
remove persist
detach
refresh Persistant
Récupération par le
Fermeture du context / garbage collector
serialisation
merge
Détaché
JUG Lyon / oct 2009 Java Persistent API 16
18. ●Principes
●Historique
●JPA 1.0
Injections 2/2 ●JPA 2.0
●Démo
●Questions?
● Tient compte de l'héritage
● Les injections classe mère en dernier
● Possible de désactiver les appels de la classe mère
● Tient compte de l'ordre dans le fichier ( même
injection présente plusieurs fois )
JUG Lyon / oct 2009 Java Persistent API 18
19. ●Principes
●Historique
●JPA 1.0
Requetage ●JPA 2.0
●Démo
●Questions?
● SQL
● JPQL
select distinct joueur
from Club club,
Personne joueur
where joueur member of club.organisateurs
JUG Lyon / oct 2009 Java Persistent API 19
20. ●Principes
●Historique
●JPA 1.0
Fonctionnalités standards ●JPA 2.0
●Démo
●Questions?
● Lazy strategie sur les Fetch
● Traitement en cascade
● Gestion des transactions
● Lock d'objet
JUG Lyon / oct 2009 Java Persistent API 20
21. ●Principes
●Historique
●JPA 1.0
Autres fonctionnalités ●JPA 2.0
●Démo
●Questions?
● Création de requêtes nommées ( Named
Queries )
JUG Lyon / oct 2009 Java Persistent API 21
22. Plan
● Principes des Frameworks de persistence
● Historique
● JPA 1.0
● JPA 2.0
● Démo
● Questions?
JUG Lyon / oct 2009 Java Persistent API 22
23. ●Principes
●Historique
●JPA 1.0
JPQL ●
JPA 2.0
●Démo
●Questions?
Aucune nouveauté depuis la version 1.0
JUG Lyon / oct 2009 Java Persistent API 23
24. ●Principes
●Historique
●JPA 1.0
Criteria API 1/3 ●
JPA 2.0
●Démo
●Questions?
● Requetage en objet
● Construction de requêtes dynamiques très
aisée
● Voir modification après coup
● 2 modes de création :
● Metamodel
● Réference aux attributs
JUG Lyon / oct 2009 Java Persistent API 24
25. ●Principes
●Historique
●JPA 1.0
Criteria 2/3 ●
JPA 2.0
●Démo
●Questions?
En utilisant le metamodel :
CriteriaQuery q = qb.create();
Root<Customer> cust = q.from(Customer.class);
Join<Order, Item> item =
cust.join(Customer_.orders).join(Order_.lineitems);
q.select(cust.get(Customer_.name))
.where(
qb.equal(item.get(Item_.product).get(Product_.productType),
"printer"));
Order est un objet et la correspondance de sa classe dans le metamodel est
Order_
JUG Lyon / oct 2009 Java Persistent API 25
26. ●Principes
●Historique
●JPA 1.0
Criteria 3/3 ●
JPA 2.0
●Démo
●Questions?
● En utilisant les réferences aux attributs :
QueryBuilder qb = ...
CriteriaQuery q = qb.create();
Root<Customer> cust = q.from(Customer.class);
Join<Order, Item> item =
cust.join("orders").join("lineitems");
q.select(cust.get("name"))
.where(
qb.equal(item.get("product").get("productType"),
"printer"));
JUG Lyon / oct 2009 Java Persistent API 26
27. ●Principes
●Historique
●JPA 1.0
Cached API ●
JPA 2.0
●Démo
●Questions?
@Entity
@Table(schema="jpa", name = "participe")
@Cacheable(true)
public class Participe {
Dans persistence.xml : <caching>ALL</caching>
● ALL
● NONE
● ENABLE_SELECTIVE
● DISABLE_SELECTIVE
JUG Lyon / oct 2009 Java Persistent API 27
28. ●Principes
●Historique
●JPA 1.0
Validation ( javax.validation ) ●
JPA 2.0
●Démo
●Questions?
● Optionnel
– TraversableResolver accessible par l'EntityManager
– @valid
● javax.persistence.ValidationMode
– Auto ( defaut ) : validation utilisée si présente sans exeception
– Callback : validation obligatoire
– None
● Completée par la JSR-303 ( Bean validation )
JUG Lyon / oct 2009 Java Persistent API 28
29. ●Principes
●Historique
●JPA 1.0
Autres nouveautés ●
JPA 2.0
●Démo
●Questions?
● Apparition de la méthode ”detach”
●Passe objet en transient
● Changement de signification de la méthode ”remove”
●Supprime les entrées associées en base
● cascade=DETACH
● ValidatorFactory
● Possibilité d'accéder au metamodel ( disponible avec
hibernate mais pas en JPA1 )
JUG Lyon / oct 2009 Java Persistent API 29
30. ●Principes
●Historique
●JPA 1.0
Implementations disponibles ●
JPA 2.0
●Démo
●Questions?
● OpenJPA2.0 - 12/2009 ( Geronimo / Weblogic )
● Version déjà disponible et fonctionnelle ( partiel )
● Hibernate - ( JbossAS-5.2.0.Beta1 - non grand
public )
● preview disponible, non fonctionnelle JPA2
● Glassfish V3 ( preview était disponible )
● EclipseLink2.0 11/2009
● ...
JUG Lyon / oct 2009 Java Persistent API 30
31. Plan
● Principes des Frameworks de persistence
● Historique
● JPA 1.0
● JPA 2.0
● Démo
● Questions?
JUG Lyon / oct 2009 Java Persistent API 31
32. ●Principes
●Historique
●JPA 1.0
Démo : architecture ●JPA 2.0
●Démo
●Questions?
JVM1.6
OPENJPA
MySQL
BasketExample
JUG Lyon / oct 2009 Java Persistent API 32
33. ●Principes
●Historique
●JPA 1.0
Démo : modèle ●JPA 2.0
●Démo
●Questions?
JUG Lyon / oct 2009 Java Persistent API 33
34. ●Principes
●Historique
●JPA 1.0
Pour aller plus loin ●JPA 2.0
●Demo
●Questions?
References :
● JSR 220: Enterprise JavaBeansTM,Version 3.0
● JSR 317: JavaTM Persistence API, Version 2.0
Outils :
● OpenJPA: http:/ openjpa.apache.org/
/
Articles sur JPA :
● Initiation : Java Persistence API : Persistance universelle –
linuxdevjournal – Perez N.
● Avancé :
http://java.sun.com/javaee/5/docs/tutorial/doc/bnbpz.html
JUG Lyon / oct 2009 Java Persistent API 34
35. A vous de jouer :
Question?
JUG Lyon / oct 2009 Java Persistent API 35