Stratégies de persistence pour une application Java J.M. Vanel Mars 2006 Version 5 Historique V3Un autre OODBMS : db4o; détails Stockage sur Fichiers V4CRUD.

Slides:



Advertisements
Présentations similaires
Projet de fin d'étude pour l'obtention du Diplôme Nationale d'Ingénieur en Informatique Conception et développement des modules de GED pour l’ indexation.
Advertisements

UML EPITECH 2009 UML1 - Introduction UML – Définition – Historique – UML en entreprise – Couverture Concepts – Objet – Classe –
GCstar Gestionnaire de collections personnelles Christian Jodar (Tian)
Ghost (Création d'image Système)‏ C.R.I.P.T Informatique (BOYER Jérôme)‏
Système de gestion d'entrées pour un cinéma Scanvion Michel – Etudiant 4.
Créat. : 23/09/2016 Modif. : 23/09/2016 Bogdan Stefanescu > Connectivité CPS et Eclipse Solutions Linux 2006.
Développement à l'Aide de Langages Dynamiques : Smalltalk module IT308: Méthodologies et outils logiciels Nada Ayad, Damien Cassou et Annabelle Souc.
Oubliez SQL avec SQLAlchemy Pycon.fr 2009 Michael Scherer.
Formation web sémantique J.M. Vanel RDF, RDF Schema, SPARQL, OWL, Modélisation, moteurs de règles Licence Creative Commons.
Fichiers et entrées-sorties en Java File and Input-ouput in Java J.M. Vanel Conseil informatique, architecture
1 Modèles de conception métier J.M. Vanel Architecture en couches – Présentation – Logique applicative – Modèle Métier – Accès aux données – Stockage.
Introduction aux technologies du Web Mercredi 12 décembre 2007 Patrice Pillot
Le DOM Le Document Object Model (DOM) est une interface de programmation pour les documents HTML et XML Il fournit une représentation structurée du document.
SQL partie 5 1 LMD create – update – primary key secondary key.
1 UML: applications, études de cas ● Processus (Extreme Programming, Unified Process) ● Architectures ● Expression du besoin technique Conception Préliminaire.
MDA ( Model Driven Architecture ). Introduction Model Driven Architecture ● Framework ● Développement de logiciels ● Object Management Group (OMG) ●
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
- Formation ActiveMQ 1 1.
WIKITTY Base de données orientée documents et API de persistance pour Java.
Un système autonomique basé sur des bases de connaissances pour améliorer les performances d’un entrepôt de données Réalisé par : OUSSAFI MOHAMMED HOURRI.
Windows NT/2000/XP Enjeux et contraintes techniques
Les Bases de données Définition Architecture d’un SGBD
Outils (MailIntegration et autres)
Framework EHop/Ecenvir
Communication client-serveur
Introduction au Langage Pascal
Systèmes d’Information
Environnement du développement de BD ORACLE REPORTS 10g
Introduction aux Systèmes de Gestion de Bases de données
Initiation aux bases de données et à la programmation événementielle
Pas de variable globale
Les notions de classe et d'objet
Gestion de version centralisée et décentralisée
Utilisation de PostgreSQL
SOMMAIRE 1: ORALE 2: Les 3 systèmes de gestion de base de donnés 3:ORACLE DATA BASE 4:MY SQL 5:Oppen Office.org Base 6:Concurrence Conclusion.
Base de données: Généralité IFT6800 Jian-Yun Nie.
OWL-S.
Principes de programmation (suite)
Les bases de données et le modèle relationnel
Commande show ip eigrp topology
Pile IGMPv3 de Host.
Outils Statistiques pour la Sémantique Décembre 2013
SQL LID – INTERROGATIN DES DONNEES
Réalisation d’une application web sous le thème: «Mon vétérinaire » par : Benzineb Asmaa et Meftahi Oualid Présentation à Université Saad Dahlab Blida.
Systèmes Intelligents – M2- BD-IA1 Protégé-OWL Tutorial 8 th International Protégé Conférence Madrid, July 2005 Nick Drummond, Matthew Horridge, University.
Programmation système
Bonnes pratiques Orienté Objet et Java
Août 2009.
Déductions: appliquer l'IA au logiciel
Programmation en C++ C++ de base
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
I Copyright © 2004, Oracle. Tous droits réservés. Introduction.
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
Préface. Préface-3 Profil Avant de commencer Avant de commencer ce cours, vous devez savoir utiliser une interface graphique. Vous devez en outre être.
Chapitre2: SGBD et Datawarehouse. On pourrait se demander pourquoi ne pas utiliser un SGBD pour réaliser cette structure d'informatique décisionnelle.
Auditeur: Léonardo AMODIO Cours: NFE107
Architecture BD Récif.
PLATE FORME DE GESTION ÉLECTRONIQUE DE DOCUMENTS Présenté par: Amine LARIBI.
TP1 - DBMAIN BFSH Lausanne - Switzerland - Tel Université de Lausanne.
Système d’exploitation: Principe IFT6800 – E 2008 Pierre Poulin.
Principes de programmation (suite)
Bases – Banques Entrepôts de données
© Robert Godin. Tous droits réservés.
STREAMS (et fichiers).
© Robert Godin. Tous droits réservés.
COURS ADMINISTRATION DE BASES DE DONNÉES IMPORT/EXPORT Karim LABIDI ISET Ch
Business Intelligence en ACube OLAP et Reporting avec ACubeOLAP et GRaM.
Transcription de la présentation:

Stratégies de persistence pour une application Java J.M. Vanel Mars 2006 Version 5 Historique V3Un autre OODBMS : db4o; détails Stockage sur Fichiers V4CRUD avec Protégé V5 requêtes avec Protégé

Plan de la présentation ● Notions de base ● Critères de choix ● Solutions

Problématique ● Comment assurer que les objets permanents de l'application survivent à l'arrêt et au redémarrage de l'application – Y compris au plantage ● Fonctionnalité transversale qui s'accompagne de beaucoup d'autres fonctionalités : requêtes, transactions,...

Notions de base ● Graphe d'objets ● POJO (Plain Old Java Object) ● Cycle de vie d'un objet ● Transactions ● Technologies utilisées Vocabulaire « Anglais » CRUD = Create, Read, Update, Delete

Graphe d'objets ● Définition: tous les objets atteignables à partir d'un objet donné (directement ou non) ● Si on ne fait pas attention aux dépendances, tous les objets de l'application peuvent être atteints! ● Analogue à la problématique de la sérialisation ● Les outils peuvent stocker un objet seul, ou tout le graphe

POJO (Plain Old Java Object) ● Définition: objet métier pur, aucune dépendance à des classes techniques ● Donc facilement testable

Cycle de vie d'un objet ● Création ==> en mémoire ● Initialisé ● Sauvé (persistence) ● Modifié ● Mise à jour (persistence) ● destruction

Transactions ● Définition: une sorte de brouillon qui rassemble une série de modifications qui ne sont pas encore validées ● En fin de transaction: Validée ou retour en arrière ● Les contraintes ne sont pas imposées avant la fin ● Sémantique métier associée (exemple transfert de compte à compte) ● La plupart des bases ne font rien en dehors d'une transaction

Technologies utilisées ● Outils de manipulation du code binaire Java – Permettent d'instrumenter le code à la volée – BCEL – CGLib, utilisé par Hibernate, Spring, etc – AOP (Aspect Oriented Programming) ● Introspection ( alias réflection )

Critères de choix ● Volume de données ● Performances: mises à jour, requêtes ● Gestion des permissions ● Pérénnité de la solution ● Pérénnité des données ● Partage entre plusieurs clients ● Transactions ; ACID ( Atomique, Consistent, Isolation, Durabilité) ● Déclencheur (trigger) ● versionnement

Solutions ● Stockage sur Fichiers ● Correspondance Objet-Relationnel (ORM – Object- Relational Mapping); EJB ● Bases de données Orientées Objet (OODBMS – Object Oriented Database Management Systems) ● Bases de données XML ● Dépots et référentiels : FTP, WebDav, CVS, Subversion,... ( repository ) ● Base de connaissance (knowledge base)

Stockage sur Fichiers - 1 ● Adapté pour configuration, IHM graphiques, fichiers de données (souvent zippés) ● Technologies: – Sérialisation Java classique JDK (binaire) – Sérialisation Java en XML (via classes XMLEncoder et XMLDecoder) – Correspondance objet-XML : XStream, Castor, XMLBeans, Zeus – Fichiers Properties (via classe Properties)

Stockage sur Fichiers catégories d'outils: ● Prennent en compte les propriétés (convention de nommage get/set de JavaBean) – Les Sérialisation Java classique JDK (binaire) – Sérialisation Java en XML (via classes XMLEncoder et XMLDecoder) – Correspondance objet-XML : Castor, XMLBeans ● Prennent en compte les champs (même privés) – XStream

Stockage sur Fichiers - 3 Graphe d'objets ● Pris en compte: – Les Sérialisation Java classique JDK (binaire) – Sérialisation Java en XML (via classes XMLEncoder et XMLDecoder) – Correspondance objet-XML : XMLBeans, XStream ● Pas pris en compte: – Castor

Sauver un graphe d’objets en XML : 1 - XMLEncoder String saveFileName = getSaveFileName(); XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new FileOutputStream( saveFileName))); e.writeObject( testSpec ); e.close();

Sauver un graphe d’objets en XML : 2 - XMLDecoder Pour relire l'objet sauvé, il faut utiliser XMLDecoder : XMLDecoder d = new XMLDecoder( new BufferedInputStream( new FileInputStream( getSaveFileName()))); testSpec = (TestSpecification) d.readObject(); d.close();

Stockage sur Fichiers ● Les plus – Très simples à mettre en oeuvre – Pas de d'adhérence architecturale ● les moins – Pas de requêtes ( sauf Xstream en Xquery) – mises à jour: tout ou rien – Partage entre plusieurs clients sur plusieurs machines difficile – Déclencheur (trigger) difficile

ORM ● Les plus: – Offre suffisante, open source et commerciale – POJO pris en compte – Prise en compte des spécificités de chaque base, traduction d'exceptions ● Les moins: – Correspondance entre programmation et stockage indirecte

Hibernate Sauver un objet : Session session = getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); Message message = new Message( "Hello World"); session.save(message); tx.commit(); session.close();

Hibernate Requête : // ouvrir Session et Transaction... List messages = newSession.find( from Message as m order by m.text asc "from Message as m order by m.text asc"); System.out.println( messages.size() + " message(s) found:" ); for ( Iterator iter = messages.iterator(); iter.hasNext(); ) { Message message = (Message) iter.next(); System.out.println( message.getText() ); } newTransaction.commit(); newSession.close();

Hibernate - configuration Exemple correspondance simple ????

Hibernate – config. avancée ● ????

DAO – Data Access Object

Bases de données Orientées Objet (OODBMS) ● Les standards: ODMG, JDO ● Les plus: – Correspondance directe entre programmation et stockage ● Les moins: – Offre assez réduite – Pas toujours de POJO ● Le plus connu: Versant ● Open source: EyeDB, db4o (db4objects) db4o

Un OODBMS : eyeDB ● Écrit en C++ ● Programmation C++ et Java ● Accès local ou réseau ● Agréable interface en ligne de commande ● Suit le standard ODMG ● Existe depuis 1994, open source en 2006 ● Utilisé en bio-informatique ● chargement des objets et gestion du cache transparents

EyeDB : language ODL Object Definition language // fichier person.odl class Person { string firstname; string lastname; int age; Address addr; Person * spouse inverse Person::spouse; set children; }; // autres classes...

language ODL ● Niveau d' abstraction plus élevé que les interfaces Java, à peu près celui du modèle de classes UML – Notations à la C++ ● Distinction entre composition ( pas de * ) et agrégation simple ( * ) ● Ensembles et listes: set

EyeDB : accès en Java - 0 ● Entrer les définitions de classes dans la base eyedbodl -d my_database --update \ --package=person person.odl ● Génération de code Java eyedbodl --gencode=Java --package=person \ person.odl

EyeDB : accès en Java – création de données - 1 String[] outargs = org.eyedb.Root.init("TestP", args); // digère les arguments spécifiques person.Database.init(); org.eyedb.Connection conn = new org.eyedb.Connection(); // ici accès réseau possible // database nommée outargs[0] person.Database db = new person.Database(outargs[0]); db.open(conn, org.eyedb.Database.DBRW); db.transactionBegin();

EyeDB : accès en Java - création de données - 2 Person john = new Person(db); john.setName("john"); john.setAge(32); Person mary = new Person(db); mary.setName("mary"); // Mariage : john.setSpouse(mary); // Stocker john et mary dans la base john.store(org.eyedb.RecMode.FullRecurs); db.transactionCommit();

EyeDB : requêtes en Java org.eyedb.OQL q = new org.eyedb.OQL(db, "select Person.name = \"john\" " ); org.eyedb.ObjectArray obj_array = new org.eyedb.ObjectArray(); q.execute(obj_array); if (obj_array.getCount() == 0) { System.err.println("TestPC: cannot find person 'john' "); System.exit(1); } Person john = (Person)obj_array.getObjects()[0];

Un autre OODBMS : db4o ● Écrit en Java ● POJO stockés ● Trois façons de faire des requêtes: – Query by Example (QBE), – Native Queries (NQ) : un nouveau concept introduit par les auteurs de ddb4o – SODA Query API (SODA) : bas niveau ● chargement des objets et gestion du cache non transparents

db4o : Native Query List result = db.query( new Predicate () { public boolean match(Pilot pilot) { return pilot.getPoints() > 99 && pilot.getPoints() < 199 || pilot.getName().equals( "Rubens Barrichello"); } }); Le code de match() est analysé et traduit par un optimiseur.

Bases de données XML - 1 ● Un peu en dehors de notre sujet, car ne stockent pas directement des objets Java, mais des documents XML ● À l'aide d'un des outils de correspondance Objet- XML, on peut cependant stocker des objets Java – Mais XQuery n'intègre pas alors la notion de graphe d'objets ● Le langage de requêtes Xquery (basé sur Xpath) est très puissant

Bases de données XML - 2 Les implémentations ● Fonctionnalités XML et XQuery greffées sur les bases relationnelles commerciales: Oracle, SQL server ● Bases XML natives commerciales: – Tamino, MarkLogic, X-Hive ● Bases XML natives open source: – eXist (Java, plus orientée documents) ; – Berkeley XML (C++, plus orientée données)

Bases de données XML - 3 eXist ● Indexation sur – texte entier d'un noeud – Mots du texte ● Gestion des permissions ● importation/exportation d'une arborescence de fichiers XML; CRUD ● Accès concurrents: embarqué; IHM Swing; réseau via Soap, XML-RPC, WebDav, REST ● Récupération après plantage système par journalisation ● Transactions : infrastructure de journalisation existe ● Déclencheur (trigger)

Dépots et référentiels : FTP, WebDav, CVS, Subversion,... ● Tous ces dépôts permettent de partager via le réseau une arborescence de fichiers ● Facilement accessibles par programme et par de nombreux clients ● CVS et Subversion prennent en compte les aspects versionnement et fusion des modifications, mais pas vraiment les requêtes

Base de connaissance (knowledge base) ● Le couteau Suisse: Protégé de l'Université de Stanford (origine: bases de connaissances médicales): – 100% Java et Open source – IHM graphique – Bibliothèque et interface Java – En mémoire ou avec un stockage relationnel – Nombreux greffons (plugin) pour différents langages et raisonneurs ● Modèle plus riche qu'un modèle de type UML ou Orienté Objet, permet des raisonnements

Protégé : accès en Java - 1 Définir des classes dans la base OWLModel owlModel = ProtegeOWL.createJenaOWLModel(); OWLNamedClass personClass = owlModel.createOWLNamedClass( "Person"); OWLDatatypeProperty ageProperty = owlModel.createOWLDatatypeProperty( "age"); ageProperty.setRange( owlModel.getXSDint()); ageProperty.setDomain( personClass); OWLObjectProperty childrenProperty = owlModel.createOWLObjectProperty("children"); childrenProperty.setRange(personClass); childrenProperty.setDomain(personClass);

Protégé : accès en Java - 2 Définir des instances RDFIndividual darwin = personClass.createRDFIndividual( "Darwin"); darwin.setPropertyValue( ageProperty, new Integer(0) ); RDFIndividual holgi = personClass.createRDFIndividual( "Holger"); // Création d'une association entre individus holgi.setPropertyValue( childrenProperty, darwin); holgi.setPropertyValue( ageProperty, new Integer(33) );

Protégé : requêtes en Java Collection results = owlModel.getRDFResourcesWithPropertyValue( ageProperty, new Integer(33) ); // renvoie une liste de RDFResource Pour des requêtes plus compliquées: ● On définit une classe Protégé ad-hoc ● Langage SPARQL du W3C Réferences: ● Protege Programming dans la documentation Protégé - OWL Protege Programming ● Working with the Protégé APIs Working with the Protégé APIs ● using the Core Protégé API from other applications using the Core Protégé API from other applications ● Ma présentation sur la programmation basée sur ontologiesprésentation sur la programmation basée sur ontologies

Protege-OWL: modèle observateur Exemple: réagir à une création d'instance: owlNamedClass.addClassListener( new ClassAdapter() { public void instanceAdded( RDFSClass cls, RDFResource instance ){ System.out.println( "Instance ajoutée à la classe: " + instance.getName()); }; }); owlNamedClass.createOWLIndividual(«newName»);

Protege-OWL: raisonneurs Raisonneurs en Logique de Description ● algorithme qui calcule si un concept est une sous-classe d'un autre concept – Idem sur les instances ● déterminer si une classe est consistente ● protocole HTTP (DIG) entre Protégé et les raisonneurs disponibles: – RACER – FaCT – FaCT++ – Pellet

Protege-OWL: raisonneurs 2 l ReasonerManager reasonerManager = ReasonerManager.getInstance(); ProtegeOWLReasoner reasoner = reasonerManager.getReasoner(model); // Set the reasoner URL and test the connection reasoner.setURL(REASONER_URL); if(reasoner.isConnected()) { //... }

Protege-OWL: raisonneurs 3 // on classifie l'ontologie entière, ce qui mettra information déduite sur la hiérarchie de classe directement dans le modèle Protégé. reasoner.classifyTaxonomy(null); System.out.println("Inferred subclasses of VegetarianPizza:"); inferredSubclasses = vegetarianPizza.getInferredSubclasses(); // peut aussi employer les méthodes sur ProtegeOWLReasoner pour obtenir l'information au coup par coup sur une classe ou une instance

Protege-OWL: règles avec SWRL ????