objektorientierte datenbanken zbeim vorigen mal: yjava data objects zheute: yder object data...
TRANSCRIPT
![Page 1: Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022070507/570491cd1a28ab14218debb1/html5/thumbnails/31.jpg)
Was kommt beim nächsten Mal?
Fortsetzung OQLSchema-Versionierung