JDO - LabUnix

publicité
Présentation
La persistance avec JDO
Kerlyne FOSTINE
Figaro LUC
INF7115-Base de données
1
Plan
1. Introduction à JDO
2. Architecture
3. Gestion des transactions
4. Les interfaces et les classes JDO
5. Les requêtes JDO
6. Exemple d’implémentation
7. Références
INF7115-Base de données
2
1. Introduction à JDO
 JDO : Java Data Object
 Persistance
 Mapping transparente des instances Java
 Persistance universelle
 Mise à jour implicite des données
 Modélisation d’objets sans contrainte
 Réduction du temps de développement
INF7115-Base de données
3
Méthodes de persistance
 Sérialisation (les systèmes de fichiers)
 JDBC (les bases de données)
 Les beans d’entité (BMP, CMP)
 JDO
INF7115-Base de données
4
JDO face aux autres méthodes de persistance
INF7115-Base de données
5
2. Architecture
Architecture générale
INF7115-Base de données
6
JDO dans un environnement non géré
 Usage deux tiers
 Javax.jdo.PersistenceManager
 Javax.spi.PersistenceCapable
INF7115-Base de données
7
JDO dans un environnement géré par un
serveur d’application J2EE
Entity
Session
INF7115-Base de données
JDO
8
Les implémentation et les vendeurs JDO
 Versant (Versant Open Access JDO)
 Xcalia (LIDO)
 SolarMetric (KODO JDO Entreprise ou Standard Édition)
 Sun (JSR-12)
INF7115-Base de données
9
Modèles d’objets persistants
INF7115-Base de données
10
Instances et cycle de vie
 Transient : Instanciation, seulement en mémoire centrale
 New : Déclaré persistant pour la première fois
 Persistent : Opposé de Transient
 Hollow : Pas de lecture dans la source de données
 Dirty : Modification des champs au cours de la transaction
 Deleted : Effacé au cours de la transaction
 Transactional : Peut participer à une transaction
 Clean : Pas de modification après la lecture dans une source de données
INF7115-Base de données
11
Cycle de vie des instances (Suite)
INF7115-Base de données
12
Cycle de développement des JDO
 Descripteur de persistance
 JDO Enhancer
INF7115-Base de données
13
3. Gestion des transactions
 Caractéristiques des transactions (ACID)
 Stratégies de transactions
 Stratégie pessimiste de transaction
 Courte durée de vie
 Blocage pendant toute la durée de la transaction
 Stratégie optimiste de transaction
 Longue durée de vie
 Réduction des blocages
 Augmentation de la concurrence
INF7115-Base de données
14
4. Les interfaces et les classes JDO
 Packages

javax.jdo

javax.jdo.spi
 Classe

JDOHelper
 Interface

PersistenceManager

PersistenceCapable

PersistenceManagerFactory

Extent

Transaction
INF7115-Base de données
15
5. Les requêtes JDO
 SQL : les bases de données relationnelles
 OQL : les bases de données objet
 EJBQL : les beans d’entité
 JDOQL : nouveau langage spécifique à JDO
INF7115-Base de données
16
Interface de requête JDOQL
INF7115-Base de données
17
Exemple de requête JDOQL
import java.util.Collection;
import java.util.Iterator;
import javax.jdo.*;
public class SimpleQuery
{
public static void main()
{
JDOBootstrap bootstrap = new JDOBootstrap();
PersistenceManagerFactory pmf = bootstrap.getPersistenceManagerFactory();
PersistenceManager pm = pmf.getPersistenceManager();
Transaction t = pm.currentTransaction();
t.begin();
Extent partnerExt = pm.getExtent(BusinessPartner.class, true);
Query q = pm.newQuery(partnerExt);
Collection c = (Collection) q.execute();
Iterator i = c.iterator();
System.out.println("Listing all BusinessPartner instances:");
while(i.hasNext())
{
Object o = i.next();
System.out.println(o);
}
System.out.println("Done.");
q.close(c);
t.commit();
}
}
INF7115-Base de données
18
6. Exemple d’implémentation (Médica Inc)
 Médica INC, une entreprise qui permet de commander des
produits en ligne.
Commande
Client
nom
prenom
telephone
adresse
email
fax
utilisateur
motDePasse
date
montant
Produit
description
prixUnitaire
quantite
commande
0..n
Commande()
1
Produit()
reference
comprend
1..n
1..n
LigneCommande
quantite
Client()
LigneCommande()
1
Medicament
contreIndication
indication
dateExpiration
posologie
presentation
typeMedicament
voieAdministration
Medicament()
INF7115-Base de données
19
Les classes Java
package com.gestionCommande;
import java.util.*;
public class Client{
private String nom;
private String prenom;
private String telephone;
private String adresse;
private String email;
private String fax;
private String utilisateur
private String motDePasse;
private Set commandes;
private Client(){
}
public Client(String nom, String prenom, String telephone, String adresse, String email, String fax, String utilisateur,
String motDePasse){
this.nom=nom;
this.prenom=prenom;
this.telephone=telephone;
this.adresse=adresse;
commandes=new HashSet();
}
public String getNom(){
return nom;
}
public void setNom(String nom){
this.nom=nom;
}
….
INF7115-Base de données
20
Descripteur de persistence
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE jdo PUBLIC
"-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 1.0//EN"
"http://java.sun.com/dtd/jdo_1_0.dtd">
<jdo>
<package name="com.gestionCommande">
<class name="Client" >
<field name="Commandes">
<collection element-type="Commande"/>
</field>
</class>
<class name="Produit" >
</class>
<class name="Medicament" >
</class>
<class name="LigneCommande" >
<field name="produits">
<collection element-type="Produit"/>
</field>
</class>
<class name="Commande" >
<field name="ligneCommandes">
<collection element-type="LigneCommande"/>
</field>
</class>
</package>
</jdo>
INF7115-Base de données
21
Les classes Java (Suite)
package com.gestionCommande;
import java.io.*;
import java.util.*;
import javax.jdo.*;
public class ApplicationEnregistrerClient(){
public static void main(String[] args){
try{
InputStream propertyStream=new FileInputStream("jdo.properties");
Properties jdoproperties=new Properties();
jdoproperties.load(propertieStream);
jdoproperties.putAll(new HashMap());
PersistenceManagerFactory pmf=JDOHelper.getPersistenceManagerFactory(jdoproperties);
PersistenceManager pm=pmf.getPersistenceManager();
Transaction tx=pm.currentTransaction();
tx.begin();
Client cl=new Client("Pierre", "Judith", "235-3049", "2384 Rue St-Laurent, Montreal QC H2W 3E2",
"[email protected]", "235-0394", "papa", "maman");
pm.makePersistent(cl);
tx.commit();
}
catch(Exception e){
e.printStackTrace(System.err);
System.exit(-1);
}
}
}
INF7115-Base de données
22
Conclusion
 JDO est très jeune et n’est pas encore supporté par les plus
grands acteurs du marché. Étant une API standard déjà
implémentée par une quinzaine d’éditeurs, est présenté pour
être intégré à J2EE 1.5. De ce fait, l’ensemble des éditeurs des
serveurs applicatifs devront en fournir une implémentation. Les
serveur JBOSS a par exemple déjà commencé le travail. Des
acteurs importants comme Oracle ou même SAP ont commencé
à travailler sur l’implémentation JDO. Donc, les bases de
données relationnelles tiennent toujours fortement avec JDBC.
INF7115-Base de données
23
7. Références

Floyd Marinescu. Design Patterns EJB. Vuibert. 2002

Robin M. Ross. Java Data Objects. Addison Wesley. 2003

David Jordan & Craig Russell. Java Data Objects. O’Reilly.

George Reese. Java Database Best Practices. O’Reilly

Java Data Objects Specification JSR12. Sun Microsystems Inc.

FastObjects J1 JDO Programmer’s Guide. Poet Software.

Kodo JDO 3.2.2 Developer’s Guide. Solarmetric Inc. 2004

www.objectweb.org

www.jdocentral.com

www.versant.com

www.xcalia.com

www.java.sun.com

http://www.jcp.org
INF7115-Base de données
24
Merci.
INF7115-Base de données
25
Questions
?
INF7115-Base de données
26
Téléchargement