Java Data Objects TM Présentation et Analyse Par : Fouad KHELOUIATI Walid KTATA Ghislain NGANTCHAHA Plan de l’exposé Introduction Définition JDO Positionnement JDO Caractéristiques de haut niveau Architecture JDO Étude de cas Implémentations de JDO Positionnement par rapport aux Concurrents Conclusion Introduction : La persistance La persistance La persistance du point de vue de JAVA SGBDR et JDBC Système de Fichier et la sérialisation ODMG et SGBDO Introduction: Java Data Objects API définissant la persistance d’objets Java Objectifs du point de vue de la persistance : Transparente Portable transactionnelle Introduction : Positionnement de JDO Sérialisation JDBC SGBDO JDO Transactionnelle NON OUI OUI OUI Interrogation NON NON OUI OUI API normalisé java.io JDBC ODMG JDO SQL OQL JDOQL SGBDR SGBDO SGBDO, SGBDR, Système de fichier, etc. Langage de requête normalisé Système de stockage Système de fichier Qualités de JDO(1/3) Sécurité et aspect transactionnel Performance Transparence JDOQL Scalabilité Intération avec d’autres Facilité d’utilisation technologies Standard Qualités de JDO(2/3) Un standard • Une seule interface pour la persistance et un langage commun • Des implémentations adaptés aux besoins La Transparence • Aucun code spécifique pour la persistance La Facilité d'utilisation • Même modèle pour les objets et les données • Se concentrer sur les objets métiers L’intégration avec d'autres technologies • Mariage EJB session Beans et JDO • Des implémentations optimisées selon les gestionnaires de données. •Intégration avec J2EE. Qualités de JDO(3/3) La Performance • Chargement en mémoire des objets incrémentale La Sécurité et l’aspect transactionnel • Support des transactions ACID • On peut dire :Intègre les fonctionnalités d’un OTM La Scalabilité • BD relationnelles,BD Objets,mainframe,ERP,etc. • Applications d’entreprise, Embarquées, Standalone. • Favorise les optimisations majeurs selon la cible. Indépendance • Indépendance de l’implémentation du vendeur. JDOQL • Plus de dépendance avec SQL. • Migration vers OODBMS est très naturel et consistante Composantes principales de l’architecture JDO JDOHelper PersistenceManagerFactory 1 Instance persistante * StateManger 1 1 * 1 * PersistenceManager Transaction 1 1 * Extent 1 1 * Instance Transitoire * PersistenceCapable Query Environnements pour JDO Environnement non géré Environnement géré Identification des Instances JDO Identité Source de données Identité d’application Identité non durable Architecture dans les applications JVM David Jordan et Craig Russell : www.onjava.com/lpt/a/3912 Étude de cas : Objectifs Environnement de développement Déclaration de la persistance Opérations sur les objets : Lecture, écriture, suppression, … Étude de cas : environnement de développement Fichier Description jdo.jar Interfaces standards et classes définies dans les spécifications de JDO. jdori.jar Implémentation de référence des spécifications de JDO. btree.jar Utilisé pour gérer le stockage des données dans des fichiers. jta.jar L’API Java Transaction. (http//java.sun.com/products/jta/index.html) antlr.jar Analyseur syntaxique utilisé par JDOQL. (www.antlr.org) xerces.jar Utiliser pour l’analyse syntaxique des fichiers XML. (http://xml.apache.org/xerces-j/) Étude de cas : environnement de développement Répertoire Description src Contient les sources de l’application. class Contient les classes compilées. enhanced Contient les classes optimisées database Contient les fichiers utilisés par l’implémentation de référence pour stocker les données persistantes. Étude de cas : environnement de développement Étude de cas : Modèle objet de Media Mania Inc. Role +roles 0..* +actor Actor 1 0..* +cast +movie 1 Movie com.mediamania.prototype Adapté de [D. Jordan et C. Russel] Étude de cas : Déclaration de la persistance Descripteur de persistance Fichier XML Contient des métadonnées sur les classes persistantes Étude de cas : Déclaration de la persistance <?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.mediamania.prototype" > <class name="Movie" > <field name="cast" > <collection element-type="Role"/> </field> </class> <class name="Role" /> <class name="Actor" > <field name="roles" > <collection element-type="Role"/> </field> </class> </package> </jdo> com/mediamania/prototype/package.jdo Étude de cas : Connexion à la source de donnée Optimisation des classes à persister Définition des propriétés de la connexion javax.jdo.PersistenceManagerFactoryClass=com.sun.jdori.fostore.FOStorePMF javax.jdo.option.ConnectionURL=fostore:database/fostoredb javax.jdo.option.ConnectionUserName=dave javax.jdo.option.ConnectionPassword=jdo4me javax.jdo.option.Optimistic=false Étude de cas : Connexion à la source de donnée Création de la source de données try { InputStream propertyStream = new FileInputStream("jdo.properties"); Properties jdoproperties = new Properties( ); jdoproperties.load(propertyStream); jdoproperties.put("com.sun.jdori.option.ConnectionCreate", "true"); PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(jdoproperties); PersistenceManager pm = pmf.getPersistenceManager( ); Transaction tx = pm.currentTransaction( ); tx.begin( ); tx.commit( ); } Étude de cas: Opérations sur les instances Écriture d’une instance dans la source de données public void execute( ) { Calendar cal = Calendar.getInstance( ); cal.clear( ); cal.set(Calendar.YEAR, 1997); Date date = cal.getTime( ); Movie movie = new Movie("Titanic", date, 194, "PG-13", "historical, drama"); pm.makePersistent(movie); } Étude de cas: Opérations sur les instances Suppression d’instances de la source de données public void execute( ) { Movie movie = PrototypeQueries.getMovie(pm, movieTitle); if (movie == null) { System.err.print("Impossible d’accéder au film de titre :"); System.err.println(movieTitle); return; } Set cast = movie.getCast( ); Iterator iter = cast.iterator( ); while (iter.hasNext( )) { Role role = (Role) iter.next( ); Actor actor = role.getActor( ); actor.removeRole(role); } pm.deletePersistentAll(cast); pm.deletePersistent(movie); } } Implémentations (1/4) L’architecture de JDO simplifie le développement d’implémentations JDO sécurisées,évolutives et Transactionnelles. La spécification couvre: 1. La sémantique de la persistance en tenant compte des transactions. 2. Les interactions des objets transactionnels J2EE. 3. La sélection des données(requête) se basant sur les expressions java. Implémentations (2/4) Robin ROOS Implémentations (3/4) De Bonne pperformance pour les entreprises • Database caching * Batched statements * Extensive use of prepared statements * Custom fetch groups * Query caching Kodo JDO supporte le cycle de vie complet de la persistance des objets. Kodo JDO supporte la plupart des grands serveurs d’applications J2EE. Kodo JDO est un outil de mapping Object/Relational. Oracle 8i/9i IBM DB2 Microsoft SQL Server MySQL Hypersonic SQL Instant DB PostgreSQL Extensible database support Implémentations (4/4) http://www.solarmetric.com La concurrence : EJB vs JDO EJB Ne permet pas l’héritage Pour localiser les EJB ont d’accéder au Home Interface propre à chaque instance via JNDI JDO Permet l’héritage JDO ne requiert que l’accès au PersistenceManger Processus de compilation et déploiement est presque le même Orienté sécurité et Transaction Orienté persistance La concurrence : Microsoft Object Space vs JDO Microsoft OS JDO Offre le même modèle de développement Utilisent tous les deux XML pour le mapping Offre un outil graphique pour générer le fichier XML de mapping Ne l’offre pas actuellement Les deux offrent les options de gestion de transaction manuelle et automatique avec un verrouillage optimiste ou pessimiste Langage interrogation OPath Langage interrogation JDOQL Microsoft Object Space Vs. JDO « Suite » Microsoft OS Le cache de persistance n’offre pas la possibilité d’être distribué N’offre pas la possibilité d’évincer les instances non utilisées JDO Le cache de persistance offre la possibilité d’être distribué Offre la possibilité d’évincer les instances non utilisés et ceci est effectué de façon transparente Offre tous les deux une cache pour la gestion de la persistance Conclusions JDO est un standard et il est largement implémenté. Divers implémentations (15-Commercial, 5-OpenSource). Il est la nouvelle direction de J2EE 1.5 Architecture évolutive. Favorise la programmation Orientée Objet Un seul modèle (Objet et données). Indépendant du vendeur et de la plateforme. Favorise les optimisations majeures. JDO 2.0 sera le Standard de persistance le plus répandue(Craig Russel-2003). Références Robin ROOS, Java Data Objects, Addison Wesley, 2003 David Jordan et Craig Russel, Java Data Objects, Oreilly, 2003 JDO Architectures, http://www.onjava.com/lpt/a/3912 Merci de votre attention ! Des questions ?