35
JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi 9 décembre 2002

JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Embed Size (px)

Citation preview

Page 1: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

JDO

Université du Québec à Montréal

INF7115: Bases de Données

Professeur: Robert Godin

Étudiants: Naby D. Soumah

Abdeltif Harrouchi Ovidiu Nacu

Lundi 9 décembre 2002

Page 2: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

•Introduction

•Architecture

•Persistance des objets métiers

•Support de la modélisation par objet métier

•Interfaces primaires et classes

•Transactions

•JDOQL

•Cycle de vie des instances

PLAN

Page 3: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Présentation (1)

JDO (Java Data Object) – nouvelle technologie de SUN, proposée en Juillet 2000

JDO offre une approche orientée objet et standardisée pour la persistance des objets Java

Au contraire de JDBC, orienté base de données relationnelle, JDO cache les difficultés liées aux différences entre le monde objet et le monde relationnel

Page 4: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Présentation (2)

Le support des données peut être un SGBD relationnel, objet ou XML, ou utiliser toute autre forme d’enregistrement des données

Objectif:– offrir une API standard permettant d'utiliser un

gestionnaire de persistance d'objets métier

– offrir une unification des techniques d'accès aux données, masquant les particularités des gestionnaires de ressources derrière le paradigme de persistance des objets métiers

Page 5: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Présentation (3)

JDO repose sur deux grandes fonctionnalités:

– La persistance des objets :gère automatiquement la synchronisation entre les données représentées par la couche d'objets métier et les gestionnaires de ressources sous-jacents.

– Le support des transactions : gère le graphe d'objet de manière transactionnelle (commit et rollback sur le graphe d'objet) tout en bénéficiant d'une gestion automatique des transactions à effectuer sur les gestionnaires de ressource.

Page 6: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Présentation (4)

Les modifications à apporter au code sont minimes pour rendre des objets persistants

Les « classes du domaine » (celles qui correspondent aux entités qui seront persistantes) peuvent être écrites exactement comme si elles n’étaient pas persistantes

La persistance des applications est le plus souvent transparente (aucune ligne de code ne l’indique)

Page 7: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Architecture JDO (1)

Page 8: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Architecture JDO (2)

Une « base de données » dans laquelle sont enregistrés les objets persistants

2 types d’objets :– persistants (correspondent à des données de la

base)– éphémères (transients), non persistants

Un gestionnaire de persistance gère la persistance des objets persistants

Des méta-données, enregistrées dans un fichier XML, décrivent les classes des objets persistants

Page 9: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Persistance des objets métiers (1) Une application d’entreprise en Java requiert

souvent l’accès aux données persistantes, stockées en base de données.

Aujourd’hui, la méthode la plus répandue est d’utiliser, à l’intérieur du code application, une API JDBC qui envoie de requêtes SQL à une base de données.

Si les données se trouvent dans une base hiérarchique, un mainframe ou encore un ERP, on utilise en général une API spécifique au gestionnaire de ressource en question.

Page 10: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Persistance des objets métiers (2)

Les données sont remontées vers l'application sous forme de chaînes de caractères et/ou de types simples (Date, int, etc.) et traitées sous cette forme (fig. 1)

Page 11: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Persistance des objets métiers (3)

L'approche par objet métier - définir une représentation objet des données du système.

En pratique, elle requiert la programmation de classes Java destinées à représenter les diverses données se trouvant dans les gestionnaires de ressources, au niveau de l'application. Lors de l'exécution de l'application, les données apparaissent en mémoire sous forme d'objets Java complexes, exposant des comportements de haut niveau (fig. 2).

Page 12: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Persistance des objets métiers (4)

La persistance des objets métiers permet de profiter, au niveau de la modélisation des entités, des divers apports de la technologie objet : modularité, extensibilité, encapsulation, etc.

Elle requiert la présence d'un gestionnaire de persistance objet dont le rôle est d'établir une correspondance entre les objets métiers en mémoire et le moteur de persistance (le gestionnaire de ressource).

Page 13: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Persistance des objets métiers (5)

La présence du gestionnaire de persistance objet est indispensable une gestion manuelle de la persistance de chaque objet est trop lourde à mettre en œuvre si on a un système complexe.

EXCEPTION : si le gestionnaire de ressource utilisé est une base de données objet Java, on dispose alors directement de la persistance objet, sans avoir besoin d'un module additionnel.

Pour une base de données relationnelle, le gestionnaire de persistance objet sera un module dit de "mapping objet/relationnel " (parmi les produits les plus connus dans ce domaine, on pourra citer TopLink ou encore CocoBase).

Page 14: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

MODÈLE OBJET DE JDO

Page 15: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Enrichissement des classes persistantes Les classes des objets persistants doivent

implémenter l’interface javax.jdo.spi.PersistenceCapable

Le code lié à cette interface est automatiquement ajouté par l’outil JDO Enhancer (enrichissement des classes persistantes)

Selon la norme JDO, cet enrichissement peut être effectué en modifiant le code source ou en modifiant directement le bytecode (sans doute le cas le plus fréquent)

Page 16: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

CLASSES CAPABLES DE PERSISTANCE Toutes les classes peuvent être capables de

persistance sous quelques conditions. Les classes systèmes ne sont pas capables

de persistance. Notamment les classes des packages suivant:– Java.lang– Java.io– Java.net

Page 17: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

CLASSES CAPABLES DE PERSISTANCE

Une classe persistante peut avoir des instances persistances et non persistantes.

Toutes les instances d’une classe sont initialement éphémères.

Les instances deviennent persistantes par:– Un appel explicite a l’interface

“makePersistent”– Référence.

Page 18: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Instances de 1ère et de 2ème classe (FCO et SCO) Le modèle objet des données manipulées

par JDO (les instances JDO) contient 2 types d’instances:– FCO (First Class Object) : instance JDO qui ont

une identité JDO– SCO (Second Class Object) : elle n’a pas

d’identité JDO par elle-même ; elle correspond à des données qui sont enregistrées comme une partie des données d’un FCO

Page 19: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Types des champs persistants Les champs persistants peuvent être

– de type primitif– les classes enveloppantes des types primitifs– java.util.Locale– java.math.BigDecimal et BigInteger– java.util.Date– java.util.HashSet (optionnellement les

autres classes collections)– d’une classe « capable de persistance »

Page 20: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Héritage et classes persistantes

Si on a une hiérarchie d’héritage, une classe peut être persistante ou non, indépendamment des autres classes de l’arborescence (classes dérivées ou ancêtres)

Tous les champs persistants le restent dans les classes dérivées persistantes

Page 21: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Classes et interfaces de l’API JDO

Page 22: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Paquetages de JDO

L’API est composée de 2 paquetages :–javax.jdo : les classes et interfaces

utilisées par les développeurs–javax.jdo.spi : les classes et

interfaces utilisées par JDO pour son fonctionnement interne

Page 23: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Classes et interfaces principales PersistentManager : interlocuteur principal

du développeur pour gérer la persistance des instances

Transaction : permet de démarrer, valider et invalider des transactions

Query : pour récupérer des données dans la base PersistentManagerFactory : permet de

récupérer un PersistentManager JDOHelper : classe utilitaire pour, par exemple,

récupérer une PersistentManagerFactory

Page 24: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Environnement géré vs non géré

• Environnement non géréClient/serveur, 2-tierGestion des connections et des transactions

explicite

• Environnement géréServeur d’application, n-tierGestion des connections et des transactions

implicite

Page 25: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Interfaces utilisées

• PersistenceManagerFactory

• PersistenceManager

• Transaction

• Query

Page 26: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Objectifs des Transactions

• Transactions distribuées et locales

• ACID

• Stratégies optimiste (optionnel), accès concurrent pessimiste

• Scalabilité

Page 27: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Objectifs de JDOQL

• Langage d’interrogation neutre

• architecture multi-tier

• Jeu de résultats vaste

• Possibilité de compiler

Page 28: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

JDOQL

• PersistenceManager est l’usine à requêtes

• Les requêtes interrogent des collections et retournent des collections

• Élements requis dans une requête:• Une collection d’instances candidates

• Ça peut être un extent • Ça peut être une Collection dans JVM

• Filtre (expression booléenne Java)

Page 29: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Exemple JDOQL

class Livre {String isbn;String titre;Integer anneParution;String nomEditeur; }

Page 30: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Filtre de requête

Class classeLivre=Livre.class;

Extent extLivre=pm.getExtent(classeLivre, false);

String filtre=“isbn==\”0-201-12227-8\””;

Query q=pm.newQuery(classeLivre, extLivre, filter);

q.setOrdering(”anneeParution descending”);

Collection c=(Collection) q.execute();

Page 31: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

JDOQL: paramètres

Class classeLivre=Livre.class;

Extent extLivre=pm.getExtent(classeLivre, true);

String filtre = “isbn==isbnRecherche”;

Query q=pm.newQuery(classeLivre, extLivre, filter);

q.declareParameters(“String isbnRecherche”);

Collection c=(Collection) q.execute(”0-201-12227-8”);

Page 32: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

État des instances

• Interaction entre l’état d’une instance et son comportement

• États: éphémére, persistante et nouvelle, persistante et sale, creuse, persistante et propre…

• Classe JDOHelper: isPersistent(), isDeleted(), isDirty(), isTransactional(), isNew()

Page 33: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Cycle de vie: persistante et nouvelle

makePersistent

rollback

ÉphémérePersistante et

Nouvelle Creuse

commit

makeTransient

Page 34: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Cycle de vie: rétroaction aux changements d’état

Interface InstanceCallbackjdoPostLoad()jdoPreClear()jdoPreDelete()jdoPreStore()

Page 35: JDO Université du Québec à Montréal INF7115: Bases de Données Professeur: Robert Godin Étudiants: Naby D. Soumah Abdeltif Harrouchi Ovidiu Nacu Lundi

Conclusion

Avantages support des relations complexes entre objets

(association, héritage) support des objets a granularité fine mécanismes de persistance uniformes Inconvénients JDO ne spécifie pas la manière dont la

configuration du mapping s'effectue. Elle pourra donc différer entre les diverses implémentations

Implémentations JDO pas encore généralisées