31
Objektorientierte Datenbanken Beim vorigen Mal: Java Data Objects Heute: Der Object Data Standard der ODMG-Group Kurz: ODMG-Standard Die POET-Implementierung FastObjects (t7) Lernziele: Vergleich ODMG-Standard vs. JDO Ralf Möller, FH-Wedel

Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Embed Size (px)

Citation preview

Page 1: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Objektorientierte Datenbanken

Beim vorigen Mal: Java Data Objects

Heute: Der Object Data Standard der ODMG-Group

Kurz: ODMG-Standard Die POET-Implementierung FastObjects (t7)

Lernziele: Vergleich ODMG-Standard vs. JDO

Ralf Möller, FH-Wedel

Page 2: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Object Data Standard: ODMG 3.0

Standard für die Erzeugung und Verwaltung von persistenten Objekten (seit 1991 entwickelt)

Entwickelt von der Object Data Management Group Konsortium vieler Firmen

Unterstützung verschiedener Programmiersprachen (Java, C++, ...)

Wir betrachten nur Java

Page 3: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

ODMG 3.0

Object Definition Language (ODL) Deklarative Sprache zur Beschreibung von Struktur

und Operationen von Objekten Prinzipiell: neue Sprache Umsetzung in Java möglich

Object Manipulation Language (OML) Programmiersprache

Object Query Language

Page 4: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Sprachanbindungen

ODMG für Java Anwendungsklassen = Java-Klassen +

Enhancement Spezielle Klassen für Collections

Page 5: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Packages

import org.odmg.*;import com.poet.odmg.*;

Page 6: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Enhancement

Dateien mit Klassendeklarationen müssen aufbereitet werden, damit Instanzen persistent werden können (Enhancement)

Beispiel: Gegeben: Directory mit .class-Dateien und Datei

ptj.opt ptj -enhance -create

Page 7: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Datenbasen

Erzeugung: Database db = new Database();

Methoden: db.open( String url, int accessMode ) db.close()

Logische Namen für Datenbasen: URL Abbildung auf spezielle Dateinamen in

Konfigurierungsdatei möglichDatenbasen bestehen aus einem Teil zur

Beschreibung der Klassen (Schema) und einem Teil zur Beschreibung der Instanzen

Page 8: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel

// declare a Database referenceDatabase applicationDB;try { // call the open method to gain access to the database applicationDB = new Database(); applicationDB.open( "FastObjects://LOCAL/my_base“,

Database.OPEN_READ_WRITE ); // ... application code goes here ... applicationDB.close }catch ( ODMGException e ) { // handle any exceptions . . .}

Page 9: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Transaktionen

Erzeugung als Instanz: Transaction txn = new Transaction(db);

Methoden: txn.begin() txn.commit() txn.abort()

Page 10: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel

Database db = new Database();db.open( . . . );// create a transaction . . .Transaction txn = new Transaction( db );// start the transaction . . .txn.begin();// . . .// end the transaction (with commit) . . .txn.commit();

Page 11: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Datenmodellierung: Collections (1)

Page 12: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Datenmodellierung: Collections (2)

Page 13: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Datenmodellierung: Maps

Interface org.odmg.DMapKlasse com.poet.odmg.util.MapOfObjects

Page 14: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Persistenz

Persistenz durch ErreichbarkeitPersistenz durch Bindung von Instanzen an

Namen (repräsentiert durch Zeichenketten)Anonyme Persistenz

Page 15: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Bindungen von Instanzen an Namen

Methoden der Klasse Database: bind(Object o, String name)

MyClass o = new MyClass( ... ); db.bind(o, "test")

lookup(String name) MyClass o = (MyClass) db.lookup("test")

unbind(String name) db.unbind("test")

Page 16: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Anonyme Persistenz

Methode der Klasse Database: makePersistent(Object o) deletePersistent(Object o)

Zugriff auf anonyme Objekte über Klassen und Anfragesprache

Page 17: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Zugriff auf Objekte

Zugriff über Klassen (Extents)Zugriff über Anfragesprache:

Object Query Language

Page 18: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Extents

Extents enthalten alle Instanzen einer Klasse Extents werden vom System verwaltet Konstruktor:

Database db; String className; Extent ext = new Extent(db, className)

Methoden: boolean hasNext() Object next() int size() ext.setFilter(String filter)

Page 19: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel

String dbName = new String( "FastObjects://LOCAL/product_base" );Database db = new Database();db.open( dbName, Database.OPEN_READ_WRITE );Transaction txn = new Transaction();txn.begin();Extent extentPerson = new Extent( db, "Person" );// perform operations with the Person objects...txn.commit();

Page 20: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel

// . . .// print all stored instances of MyClassExtent myInstances = new Extent(db, "MyClass");while ( myInstances.hasNext() ) {System.out.println( myInstancees.next() );}// . . .

Page 21: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Indizierung

Extents können "indiziert" werden, d.h. es kann eine Ordnung definiert werden und man kann mit quasi-konstantem Aufwand auf eine

bestimmte Instanz zugreifenDetails können wir hier nicht besprechen

Page 22: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Filter für Extents

Database db = new Database();db.open( . . . );Transaction txn = new Transaction( db );txn.begin();Extent engineerExtent = new Extent( db, "Engineer" );String predicate = "WHERE this.name_ LIKE \"*Schmidt*\"";engineerExtent.setFilter( predicate );while (engineerExtent.hasNext() ) { System.out.println( engineerExtent.next() );}

Page 23: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

OQL: Object Query Language

Klasse OQLQueryKonstruktoren:

OQLQuery() OQLQuery(String query)

Methoden: create(String predicate) execute()

Page 24: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

OQL

Syntax an SQL angelehnt: Definitionen

DEFINE EXTENT <Extent> FOR <Klassenname> Selektion:

SELECT <VarName> FROM <Extent> AS <VarName>WHERE <Bedingung>

Navigation: SELECT <VarName.Attribut.Attribut....>

FROM <Extent> AS <VarName>WHERE <Bedingung>

Page 25: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Bedingungen

Vergleiche für numerische Werte: =, >=, >, <=, < für Zeichenketten: =, LIKE (+ regulärem Ausdruck)

Boolesche Operationen: AND, OR, NOT

Page 26: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel (1)

db.open("FastObjects://LOCAL/ToolsBase",Database.OPEN_READ_WRITE );Transaction txn = new Transaction( toolsBase );txn.begin();// Here is the OQL string for the query . . .String queryString ="SELECT c FROM ToolkitExtent AS c " +"WHERE c.year_ = 1997";// create a new query object . . .OQLQuery query = new OQLQuery( queryString );// perform the query . . .Object result = query.execute();// evaluate the result . . .

Page 27: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel (2)

if ( result instanceof CollectionOfObject ) { long n = ((CollectionOfObject) result).size(); System.out.println( "found " + n + " objects" ); Iterator iter = ((CollectionOfObject) result).iterator(); while ( iter.hasNext() ) { Object obj = iter.next(); System.out.println( obj.toString() ); }}// no need to save anything . . .txn.abort();// close the database . . .toolsBase.close()

Page 28: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Anfragen mit Parametern

Kennzeichung von formalen Parametern in Anfragezeichenketten durch spezielle Namen $1, $2, $3, ...

Methode zum Binden von Aktualparametern Query.bind(String parameter, ...)

Page 29: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Beispiel

// . . .OQLQuery query = new OQLQuery( txn );// The toolkits managed by . . .query.create("SELECT c FROM ToolkitExtent AS c, " +"c.managers_ AS d " +"WHERE d.indexName_ = $1" );// . . . Tom AveryString manager = "Avery, Tom";query.bind( manager );Object resultObj = query.execute();// . . .

Page 30: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Zusammenfassung, Kernpunkte

Überblick über den ODMG-Standard Object Definition Language = Java Object Manipulation Language

Klassen: Database, Transaction, Extent, Query Object Query Language

Page 31: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung

Was kommt beim nächsten Mal?

Fortsetzung OQLSchema-Versionierung