Telechargé par aminata koné

presentation-jpa108

publicité
Java Persistence API
JS Bournival
5 juin 2006
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 1
Un peu d’histoire …
Entity Beans EJB 1.0 -> 2.1
 Complexité
 La courbe d’apprentissage trop prononcée
 Modèle de programmation non-intuitif
 Performance
 Le coût pour effectuer certaines requêtes était hors de proportions, le
cycle de vie du container devenait un boulet
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 2
Un peu d’histoire …
Les équipes IT se sont de plus en plus tourné vers d’autres produits sur le marché:
 Hibernate
 Le plus répandu dans la communauté présentement. Toutefois, la responsabilité de
compatibilité avec différents serveurs d’application revient à la communauté.
 JDO
 Bien que JDO soit un standard, appuyé par la JSR 243 (JDO 2.0), cette technologie
a reçu bien peu d’appui.
 Produits commerciaux (ex. TopLink)
 API propriétaires, onéreux, non-standard …
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 3
Les besoins
Clairement, 2 grands besoins se dégagèrent, répondant à l’industrie
et aux développeurs:
1.
Avoir une API simple d’utilisation, attrayante pour les
développeurs, appliquant les techniques apprises des cadres
d’applications de la communauté open source.
2.
Avoir un standard respecté par les fournisseurs de serveurs
d’applications.
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 4
EJB 3.0 vs. Java Persistence API
Le standard tant souhaité, émerge avec la JSR 220, soit EJB 3.0.
Cette spécification se divise en 2 parties:


EJB 3.0, modèles de composants d’affaires (SLSB, SFSB, MDB)
JPA, Java Persistence API
Toutefois, cette spécification sera scindée en 2, de façon à faire
évoluer la JPA, qui n’a plus rien à voir avec les EJB, seule de
son côté.
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 5
Java Persistence API: Quoi de neuf?
On a littéralement évacué la complexité

Plus besoin de ces innombrables interfaces (Home, Remote, Local …)

On peut l’utiliser tant à l’extérieur, qu’à l’intérieur d’un container JEE

Chaque entité est maintenant un simple POJO *

Les mappings sont facilement mis en place, à l’aide d’annotations (Java SE
5.0)
* POJO – n.m. [pôdjô]
POJO is an acronym for Plain Old Java Object, and is
favoured by advocates of the idea that the simpler the design,
the better. - Wikipedia.
"We wondered why people were so against using
regular objects in their systems and concluded that it was
because simple objects lacked a fancy name. So we gave them
one, and it's caught on very nicely."
- Martin Fowler
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 6
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 7
Java Persistence API: Mappings de base
EMP
@Table(name="EMP")
@Entity
ID
EMP_NAME
NAME
SALARY
public class Employee {
« BLOB »
@Id
private int id;
@Column(name="EMP_NAME")
private String name;
private double salary;
@Lob
private byte[] pic;
// getters & setters
...
}
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
PIC
2006
Page 8
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 9
Relations
4 types de relations à définir entre les entités de la JPA:
 One to One
 Many to One
 One to Many
 Many to Many
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 10
Relationship: Many to One
@Entity
@Table(name="EMP")
@Entity
public class Department {
public class Employee {
@Id
private int id;
@Id
private int id;
private String dname;
// getters & setters
...
@ManyToOne
@JoinColumn(name="DEPT_ID")
private Department d;
}
// getters & setters
...
}
DEPARTMENT
EMP
ID
DEPT_ID
ID
PK
FK
PK
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
DNAME
Page 11
Relationship: One to Many
@Entity
@Table(name="EMP")
@Entity
public class Department {
public class Employee {
@Id
private int id;
@Id
private int id;
private String dname;
@ManyToOne
@JoinColumn(name="DEPT_ID")
@OneToMany(mappedBy="d")
private Collection<Employee> emps;
private Department d;
// getters & setters
...
// getters & setters
...
}
}
DEPARTMENT
EMP
ID
DEPT_ID
ID
PK
FK
PK
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
DNAME
Page 12
Relationships: One to One
@Entity
@Table(name="EMP")
@Entity
public class ParkingSpace {
public class Employee {
@Id
private int id;
@Id
private int id;
private int lot;
private String location;
@OneToOne
@JoinColumn(name="P_SPACE")
private ParkingSpace space;
@OneToOne(mappedBy="space")
private Employee emp;
// getters & setters
...
// getters & setters
...
}
}
PARKINGSPACE
EMP
ID
P_SPACE
ID
PK
FK
PK
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
LOT
LOCATION
Page 13
Relationships: Many to Many
@Entity
@Table(name="EMP")
@Entity
public class Project {
public class Employee {
@Id
private int id;
@Id
private int id;
private String name;
@ManyToMany(mappedBy="p")
private Collection<Employee> e;
@JoinTable(name="EMP_PROJ",
joinColumns=
// getters & setters
...
@JoinColumn(name="EMP_ID"),
inverseJoinColumns=
}
@ManyToMany
@JoinColumn(name="PROJ_ID"))
private Collection<Project> p;
}
EMP_PROJ
EMP
ID
NAME
SALARY
PK
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
PROJECT
EMP_ID
PROJ_ID
ID
PK,FK1
PK,FK2
PK
2006
Page 14
NAME
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 15
Héritage
L’héritage est supporté dans la JPA. Pour y arriver, 3 stratégie de mappings
sont proposées:



strategie 1 (single table + discriminator)
strategie 2 (joined tables)
strategie 3 (table per class)
Employee
-id
-name
-startDate
ContractEmployee
-dailyRate
-term
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
NurunEmployee
-vacation
Page 16
Héritage: single table
Cette stratégie applatit la hiérachie de classes dans une seule table contenant
tous les attributs de la hiérarchie. Les spécialisations sont différiencées
par un discriminateur.
Employee
-id
-name
-startDate
EMP
PK
ID
NAME
START_DATE
DAILY_RATE
TERM
VACATION
EMP_TYPE
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
ContractEmployee
-dailyRate
-term
2006
NurunEmployee
-vacation
Page 17
Héritage: joined table
Cette stratégie imite la hiérachie de classes dans plusieurs table reliées. Ici
aussi un discriminateur est nécessaire.
ContractEmployee
PK,FK
Employee
-id
-name
-startDate
ID
DAILY_RATE
TERM
EMP
PK
ID
NAME
START_DATE
EMP_TYPE
NurunEmployee
PK,FK
ID
VACATION
ContractEmployee
-dailyRate
-term
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
NurunEmployee
-vacation
Page 18
Héritage: table per concrete class
Ici, tous les attributs d’une classe + ses attributs hérités, sont mis ensemble
dans une seule table. Une par classe feuille (concrete class). Les
superclasses ne sont pas représentées dans cette stratégie.
Employee
-id
-name
-startDate
ContractEmployee
PK,FK
ID
NAME
S_DATE
DAILY_RATE
TERM
NurunEmployee
PK,FK
ID
NAME
S_DATE
VACATION
ContractEmployee
-dailyRate
-term
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
NurunEmployee
-vacation
Page 19
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 20
Entity Manager: le cœur de la JPA
Les entités, une fois annotées, ne peuvent se persister de par ellesmêmes. Elles ont besoins d’un engin, qui lui, performera les
opérations sur la base de données, en concordance avec les
mappings définis dans les annotations.
 Étape 1: mettre la main sur une instance EntityManager
 Étape 2: persister nos POJO
 Étape 3: … euh, il n’y a pas d’étape 3!
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 21
Entity Manager: petit exemple
Regardons un petit exemple qui implique un EntityManager. Faisons-le à l’aide
d’un Stateless Session Bean (EJB 3.0) tout simple.
public class EmployeeServlet extends HttpServlet {
@PersistenceUnit(unitName="emp")
EntityManagerFactory emf;
public Employee
void createEmployee()
find(int id) {
EntityManager
EntityManager
emem
= =
emf.createEntityManager();
emf.createEntityManager();
}
}
return
Employee
em.find(Employee.class,
emp = new Employee();
id);
// apply setters
// ...
em.persist(emp);
}
}
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 22
EntityManager: déclarer le persistence unit
Le fichier persistence.xml, est l’endroit où l’on déclare notre
persistence unit. C’est aussi là où l’on configure notre
persistence manager.
<?xml version="1.0"?>
<persistence>
<persistence-unit name="emp">
<jta-data-source>jdbc/EmployeeDS</jta-data-source>
<!–- autres propriétés du persistence provider -->
</persistence-unit>
</persistence>
persistence.xml
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 23
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 24
Queries
La JPA introduit le JPA-QL, qui est, tout comme le EJBQL ou
encore le HQL, un langage de requête du modèle objet, basé sur
SQL.
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 25
Queries: NamedQueries
On peut sauvegarder des gabarits de requête dans nos entités.
C’est ce qu’on appelle une NamedQuery. Ceci permet :
 La réutilisation de la requête
 D’externaliser les requête du code.
@Entity
@NamedQuery(name="myQuery", query="Select o from MyPojo o")
public class MyPojo { … }
public class MyService {
public void myMethod() {
…
List results = em.createNamedQuery("myQuery").getResultList();
…
}
}
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 26
Queries: NativeQueries
Une façon de faire des requête en SQL natif. Sert principalement à
avoir plus de contrôle sur les requêtes à la base de donnée.
public class MyService {
public void myMethod() {
…
List results
= em.createNativeQuery(“SELECT * FROM MyPojo“, MyPojo.class)
.getResultList();
…
}
}
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 27
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 28
Transactions
2 façons de mettre en place les transactions:
 JTA
 En utilisant la Java Transaction API, typiquement in-container
 Resource-local
 En utilisant le modèle de transaction du persistence manager
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 29
Transactions: JTA
Pour utiliser la JTA, il est requis de mettre la main sur la transaction
en cours.
public class MyServlet extends HttpServlet {
…
@Resource UserTransaction utx;
public void doGet(…) {
utx.begin()
// persistence operations …
utx.commit();
}
}
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 30
Transactions: Resource-local
Contrôllée manuellement. Tient compte uniquement de la
transaction actuelle, indépendamment du serveur d’application.
public class MyServlet extends HttpServlet {
…
public void doGet(…) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// persistence operations …
em.getTransaction().commit();
em.close();
}
}
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 31
Agenda
 Présentation
 Les mappings de base
 Relations
 Héritage
 EntityManager
 Queries
 Transactions
 Demo
 Support et outils
 Références
 Questions
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 32
Petite demo sympathique
Amusons-nous tous ensemble avec:
 NetBeans 5.5
 Glassfish (JEE 5.0)
 MySQL (5.0)
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 33
Support de l’industrie
La JPA a fait concensus à JavaOne2006, tous les grands acteurs y trouvent leur
compte, et jusqu’à preuve du contraire, vont supporter et endosser cette
technologie.
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 34
Application server / persistence engine
Les serveurs d’application ont tous placé leurs pions en vue de
l’avènement de la JPA. Chacun a intégré un persistence
manager de leur choix:





JBoss AS
BEA Weblogic 9.2
Sun GlassFish
Oracle 10g AS
IBM WS 7.0 (p-ê?)
-> Hibernate EntityManager
-> SolarMetric Kodo (OpenJPA!)
-> Oracle TopLink Essentials
-> Oracle TopLink Essentials
-> ???
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 35
Outils
Open source
 Eclipse 3.2.x w/ DALI
 NetBeans 5.5
Commerciaux
 Oracle Jdeveloper
 BEA Workshop Studio (Eclipse++)
 JBoss IDE (Eclipse++) gratuit
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 36
References
Web
JSR 220
Projet DALI
Glassfish
Hibernate EntityManager
SolarMetric Kodo
Oracle Toplink
BEA dev2dev
http://www.jcp.org/en/jsr/detail?id=220
http://www.eclipse.org/dali/
https://glassfish.dev.java.net/
http://hibernate.org/299.html
http://solarmetric.com/Software/Kodo/kodoejb.php
http://www.oracle.com/technology/products/ias/toplink/JPA/index.html
http://dev2dev.bea.com/persistence/
Blogs
Mike Keith
Gavin King
The Aquarium
http://www.jroller.com/page/mkeith
http://blog.hibernate.org/
http://blogs.sun.com/theaquarium
Bouquin
Pro EJB 3: Java Persistence API
http://apress.com/book/bookDisplay.html?bID=10093
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 37
Questions?
[email protected]
Ext. 2112
Communication interactive et nouvelles technologies /
Interactive Communications through New Technologies
2006
Page 38
Téléchargement