inf7115-base de données
DESCRIPTION
Présentation. La persistance avec JDO. Kerlyne FOSTINE Figaro LUC. INF7115-Base de données. Plan. 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. - PowerPoint PPT PresentationTRANSCRIPT
1INF7115-Base de données
Présentation
La persistance avec JDO
Kerlyne FOSTINE
Figaro LUC
2INF7115-Base de données
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
3INF7115-Base de données
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
4INF7115-Base de données
Méthodes de persistance
Sérialisation (les systèmes de fichiers)
JDBC (les bases de données)
Les beans d’entité (BMP, CMP)
JDO
5INF7115-Base de données
JDO face aux autres méthodes de persistance
6INF7115-Base de données
2. Architecture
Architecture générale
7INF7115-Base de données
JDO dans un environnement non géré
Usage deux tiers
Javax.jdo.PersistenceManager
Javax.spi.PersistenceCapable
8INF7115-Base de données
JDO dans un environnement géré par un serveur d’application J2EE
EntitySession JDO
9INF7115-Base de données
Les implémentation et les vendeurs JDO Versant (Versant Open Access JDO)
Xcalia (LIDO)
SolarMetric (KODO JDO Entreprise ou Standard Édition)
Sun (JSR-12)
10INF7115-Base de données
Modèles d’objets persistants
11INF7115-Base de données
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
12INF7115-Base de données
Cycle de vie des instances (Suite)
13INF7115-Base de données
Cycle de développement des JDO Descripteur de persistance
JDO Enhancer
14INF7115-Base de données
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
15INF7115-Base de données
4. Les interfaces et les classes JDO
Packages javax.jdo
javax.jdo.spi
Classe JDOHelper
Interface PersistenceManager
PersistenceCapable
PersistenceManagerFactory
Extent
Transaction
16INF7115-Base de données
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
17INF7115-Base de données
Interface de requête JDOQL
18INF7115-Base de données
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(); }}
19INF7115-Base de données
6. Exemple d’implémentation (Médica Inc) Médica INC, une entreprise qui permet de commander des
produits en ligne.
MedicamentcontreIndicationindicationdateExpirationposologiepresentationtypeMedicamentvoieAdministration
Medicament()
ClientnomprenomtelephoneadresseemailfaxutilisateurmotDePasse
Client()
Commandedatemontant
Commande()0..n
1
0..n
1
commande
ProduitdescriptionprixUnitairequantite
Produit()
LigneCommandequantite
LigneCommande()
1..n1..ncomprend 1..n
1
1..n
1
reference
20INF7115-Base de données
Les classes Javapackage 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; }….
21INF7115-Base de données
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>
22INF7115-Base de données
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); } }
}
23INF7115-Base de données
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.
24INF7115-Base de données
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
25INF7115-Base de données
Merci.
26INF7115-Base de données
Questions?