26
1 INF7115-Base de données Présentation La persistance avec JDO Kerlyne FOSTINE Figaro LUC

INF7115-Base de données

  • Upload
    junior

  • View
    93

  • Download
    3

Embed Size (px)

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 Presentation

Citation preview

Page 1: INF7115-Base de données

1INF7115-Base de données

Présentation

La persistance avec JDO

Kerlyne FOSTINE

Figaro LUC

Page 2: INF7115-Base de données

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

Page 3: INF7115-Base de données

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

Page 4: INF7115-Base de données

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

Page 5: INF7115-Base de données

5INF7115-Base de données

JDO face aux autres méthodes de persistance

Page 6: INF7115-Base de données

6INF7115-Base de données

2. Architecture

Architecture générale

Page 7: INF7115-Base de données

7INF7115-Base de données

JDO dans un environnement non géré

Usage deux tiers

Javax.jdo.PersistenceManager

Javax.spi.PersistenceCapable

Page 8: INF7115-Base de données

8INF7115-Base de données

JDO dans un environnement géré par un serveur d’application J2EE

EntitySession JDO

Page 9: INF7115-Base de données

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)

Page 10: INF7115-Base de données

10INF7115-Base de données

Modèles d’objets persistants

Page 11: INF7115-Base de données

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

Page 12: INF7115-Base de données

12INF7115-Base de données

Cycle de vie des instances (Suite)

Page 13: INF7115-Base de données

13INF7115-Base de données

Cycle de développement des JDO Descripteur de persistance

JDO Enhancer

Page 14: INF7115-Base de données

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

Page 15: INF7115-Base de données

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

Page 16: INF7115-Base de données

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

Page 17: INF7115-Base de données

17INF7115-Base de données

Interface de requête JDOQL

Page 18: INF7115-Base de données

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(); }}

Page 19: INF7115-Base de données

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

Page 20: INF7115-Base de données

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; }….

Page 21: INF7115-Base de données

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>

Page 22: INF7115-Base de données

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); } }

}

Page 23: INF7115-Base de données

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.

Page 24: INF7115-Base de données

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

Page 25: INF7115-Base de données

25INF7115-Base de données

Merci.

Page 26: INF7115-Base de données

26INF7115-Base de données

Questions?