1 / 33

Etude d'approfondissement

Etude d'approfondissement. Service de persistance JDO / Speedo Présentée par : François FORNACIARI. Plan. Introduction Présentation de JDO Une implémetation : Speedo Démonstration Conclusion. Plan. Introduction Présentation de JDO Une implémetation : Speedo Démonstration Conclusion.

Download Presentation

Etude d'approfondissement

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Etude d'approfondissement Service de persistance JDO / Speedo Présentée par: François FORNACIARI

  2. Plan • Introduction • Présentation de JDO • Une implémetation : Speedo • Démonstration • Conclusion

  3. Plan • Introduction • Présentation de JDO • Une implémetation : Speedo • Démonstration • Conclusion

  4. Introduction • Les applications Java ont besoin de stocker les objets qu'elles manipulent • Deux solutions : • Sérialisation : préserve les relations entre objets mais ne supporte pas le partage de ces objets • JDBC : mapping objet-relationnel réalisé par le développeur • L'accès aux données dépend de la façon dont elles sont stockées (multiples API)

  5. Objetctifs • Dissocier la partie métier d'une application et les parties accès et manipulation de données stockées • Mettre en place un mécanisme de persistance transparent pour le développeur

  6. Plan • Introduction • Présentation de JDO • Une implémentation : Speedo • Démonstration • Conclusion

  7. Java Data Object : historique • Juin 1999 : JSR 12 approuvée (leader Craig Russel) • Aout 1999 : Formation d'un groupe d'experts (Apple, BEA, IBM, Oracle, SAP, SUN, etc. • Avril 2002 : sortie de la spécification JDO 1.0 • Février 2006 : JDO 2.0 (JSR 243)

  8. Spécifications JDO • Supporter le modèle à objets (incluant les collections, l'héritage, ...) • Gestion de la persistance transparente (création automatique des tables, etc.) • Diversité des supports de stockage (SGBD relationnel ou objet, fichiers, fichiers XML, fichiers de propriétés, ...) • Gestion des transactions • Adaptée pour des architectures client/serveur ou multi-couches

  9. Spécificités (1) • JDO apporte une généralisation des mécanismes de persistance à l'intégralité d'un projet (API haut niveau, support de nombreux drivers) • JDOQL permet d'interroger les objets grâce à une syntaxe Java Class empClass = Employee.class; Extent extEmployee = pm.getExtent (empClass, true); String filter = "salary > 30000"; Query q = pm.newQuery (extEmployee, filter); Collection emps = (Collection) q.execute ();

  10. Spécificités (2) • JDO se combine efficacement avec des beans sessions et message-driven. • Pour des beans entité, JDO reste mieux adapté : • Séparation entre le modèle à composants et le modèle de persistance • Meilleures performances

  11. Fonctionnement

  12. Implémentations de JDO • Commerciales : • Versant, SolarMetric Kodo, Orient Technologies, Signsoft intelliBO, ... • Non-commerciales : • Speedo, JDOInstruments, Jakarta OJB, Apache Cocoon, XORM, JPOX, Triactive JDO, ...

  13. Alternatives à JDO • Hibernate : plus simple à utiliser mais moins performant. Ne suit pas la spécification JDO. • TopLink : développé par Oracle

  14. Plan • Introduction • Présentation de JDO • Une implémentation : Speedo • Démonstration • Conclusion

  15. Présentation (1) • Implémentation open source des spécifications JDO (version 1.4.5) • Développé dans le cadre du consortium ObjectWeb • Intègre les projets suivants • JORM (persistance), MEDOR (données réparties), Perseus (cache, pool, concurrence, etc.), Fractal, Julia, ASM, Monolog • Grand nombre de bases de données supportées (Oracle, MS SQL server, Mysql, Postgres, ...)

  16. Présentation (2) • Fournit des "ressources adapters" pour une intégration dans les serveurs d'applications tels que JOnAS, JBOSS, Weblogic • Un plugin Eclipse est disponible pour faciliter le développement d'applications JDO

  17. Une application JDO (1) • L'objet à rendre persistant est un simple objet Java (POJO) • L'application possède un fichier xml .jdo (par package) qui décrit la persistance des objets <package name="simpleclass"> <class name="Address" identity-type="application" table="SIMPLE_ADDRESS"> <field name="street" primary-key="true" column="STREET"/> <field name="city" column="CITY"/> <field name="state" column="STATE"/> <field name="zip" column="ZIPCODE"/> </class> </package>

  18. Une application JDO (2) • Possède un fichier de configuration (speedo-jdo.properties) qui spécifie • les propriétés concernant la base de données utilisée (nom, driver, identifiants, ...) • Les différentes politiques pour : • Les transactions • Le cache • Autres • Élément central JDO:le PersistanceManagerFactory renvoie un PM qui gère la persistance des objets.

  19. Le modèle à objets • Speedo gère les concepts suivants : • Les compositions/agrégations d'objets • Les différentes relations : • 1 1 : un pour un • 1 n : un pour plusieurs • n m : associations • L'héritage entre objets • Concepts JDO avancés : • Attach/detach • Fetch plan

  20. Principes de mise en œuvre • Les objets sont définis de différentes manières dans le fichier .jdo grâce à : • Un identifiant de l'objet persistant • Des champs primitifs et/ou complexes (Collection, List, Map, ...) • Des relations unidirectionnelles ou bidirectionnelles • Des classes mappées sur différentes base de données • De l'héritage • Des index, séquences • Etc.

  21. Speedo et J2EE (1) • Intégration dans un serveur d'applications en tant que "ressource adaptor" • Le PersistanceManagerFactory est obtenu en utilisant le nom JNDI de l'instance de Speedo • Utilisation du TransactionManager présent dans JNDI • Les transactions sont spécifiées dans les EJB <container-transaction> <method> <ejb-name>BankApplication</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction>

  22. Speedo et J2EE (2) • La création des structures de données (relations SQL) peut être faite grâce à une tâche Ant (si pas supportée dans une transaction) : les classes à traiter sont passées en paramètre à l'initialisation. • Possibilité d'accéder à de multiples sources de données

  23. Cas d'utilisation

  24. Manager <class name="Manager" identity-type="application"> <extension vendor-name="speedo" key="sql-name" value="T_MAPPING_MANAGER"/> <field name="name" primary-key="true"> <extension vendor-name="speedo" key="sql-name" value="NAME"/> </field> <!-- 1-1 relationship --> <field name="department" persistance-modifier="persistent"> <extension vendor-name="speedo" key="target-foreign-keys" value="LABEL=DPT_LABEL"/> <extension vendor-name="speedo" key="reverse-field" value="manager"/> </field> <!-- 1-N relationship --> <field name="employees" persistance-modifier="persistent"> <collection element-type="Employee"/> <extension vendor-name="speedo" key="source-foreign-keys" value="NAME=MANAGER_NAME"/> <extension vendor-name="speedo" key="reverse-field" value="manager"/> </field> </class>

  25. Department <class name="Department" identity-type="application"> <extension vendor-name="speedo" key="sql-name" value="T_MAPPING_DEPARTMENT"/> <field name="label" primary-key="true"> <extension vendor-name="speedo" key="sql-name" value="LABEL"/> </field> <field name="manager" persistance-modifier="persistent"> <!-- 1-1 relationship already defined above--> </field> </class>

  26. Employee <class name="Employee" identity-type="application"> <extension vendor-name="speedo" key="sql-name" value="T_MAPPING_EMPLOYEE"/> <field name="name" primary-key="true"> <extension vendor-name="speedo" key="sql-name" value="NAME"/> </field> <field name="manager" persistance-modifier="persistent"> <!-- 1-N relationship already defined above--> </field> <field name="projects" persistance-modifier="persistent"> <!-- M-N relationship --> <collection element-type="Project"/> <extension vendor-name="speedo" key="join-table" value="EMPLOYEE_TO_PROJECT"/> <extension vendor-name="speedo" key="source-foreign-keys" value="NAME=EMPLOYEE_NAME"/> <extension vendor-name="speedo" key="target-foreign-keys" value="TITLE=PROJECT_TITLE"/> <extension vendor-name="speedo" key="reverse-field" value="employees"/> </field> </class>

  27. Project <class name="Project" identity-type="application"> <extension vendor-name="speedo" key="sql-name" value="T_MAPPING_PROJECT"/> <field name="title" primary-key="true"> <extension vendor-name="speedo" key="sql-name" value="TITLE"/> </field> <field name="employees" persistance-modifier="persistent"> <!-- M-N relationship already defined above--> <collection element-type="Employee"/> </field> </class>

  28. Application cliente (1) • Exemple : persistanceManagerFactory pmf = JDOHelper.getpersistanceManagerFactory(property_file); Department department = new Department("Sales"); Manager manager = new Manager("François", department); department.setManager(manager); Employee employee = new Employee("Pierre", manager); PersistanceManager pm = pmf.getPersistanceManager(); pm.currentTransaction().begin(); pm.makePersistent(employee); pm.currentTransaction().commit(); pm.close();

  29. Application cliente (2) • Suppression d’un département : pm.currentTransaction().begin(); … department = (Department) pm.getObjectById(id, true); pm.deletePersistent(department); … pm.currentTransaction().commit();

  30. Plan • Introduction • Présentation de JDO • Une implémetation : Speedo • Démonstration • Conclusion

  31. Plan • Introduction • Présentation de JDO • Une implémetation : Speedo • Démonstration • Conclusion

  32. Conlusion • JDO offre des mécanismes de persistance très performants • Reste légèrement plus complexe à utiliser que son concurrent direct (Hibernate) • JDO 2.2 devrait supporter Java 1.5 (Annotations, Enum, …) • Speedo devrait (entre autre) implémenter la spécification EJB 3.0

More Related