INF7115-Base de données

Preview:

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

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", "judpierre@hotmail.com", "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?

Recommended