Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung."—  Präsentation transkript:

1 Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7) zLernziele: yVergleich ODMG-Standard vs. JDO Ralf Möller, FH-Wedel

2 Object Data Standard: ODMG 3.0 zStandard für die Erzeugung und Verwaltung von persistenten Objekten (seit 1991 entwickelt) zEntwickelt von der Object Data Management Group yKonsortium vieler Firmen zUnterstützung verschiedener Programmiersprachen (Java, C++,...) zWir betrachten nur Java

3 ODMG 3.0 zObject Definition Language (ODL) yDeklarative Sprache zur Beschreibung von Struktur und Operationen von Objekten yPrinzipiell: neue Sprache yUmsetzung in Java möglich zObject Manipulation Language (OML) yProgrammiersprache zObject Query Language

4 Sprachanbindungen zODMG für Java yAnwendungsklassen = Java-Klassen + Enhancement ySpezielle Klassen für Collections

5 Packages zimport org.odmg.*; zimport com.poet.odmg.*;

6 Enhancement zDateien mit Klassendeklarationen müssen aufbereitet werden, damit Instanzen persistent werden können (Enhancement) zBeispiel:  Gegeben: Directory mit.class-Dateien und Datei ptj.opt  ptj -enhance -create

7 Datenbasen  Erzeugung:  Database db = new Database();  Methoden:  db.open( String url, int accessMode )  db.close() zLogische Namen für Datenbasen: URL yAbbildung auf spezielle Dateinamen in Konfigurierungsdatei möglich zDatenbasen bestehen aus einem Teil zur Beschreibung der Klassen (Schema) und einem Teil zur Beschreibung der Instanzen

8 Beispiel // declare a Database reference Database 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... }

9 Transaktionen  Erzeugung als Instanz:  Transaction txn = new Transaction(db); zMethoden:  txn.begin()  txn.commit()  txn.abort()

10 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();

11 Datenmodellierung: Collections (1)

12 Datenmodellierung: Collections (2)

13 Datenmodellierung: Maps zInterface org.odmg.DMap zKlasse com.poet.odmg.util.MapOfObjects

14 Persistenz zPersistenz durch Erreichbarkeit zPersistenz durch Bindung von Instanzen an Namen (repräsentiert durch Zeichenketten) zAnonyme Persistenz

15 Bindungen von Instanzen an Namen zMethoden der Klasse Database: ybind(Object o, String name) xMyClass o = new MyClass(... ); xdb.bind(o, "test") ylookup(String name) xMyClass o = (MyClass) db.lookup("test") yunbind(String name) xdb.unbind("test")

16 Anonyme Persistenz zMethode der Klasse Database: ymakePersistent(Object o) ydeletePersistent(Object o) zZugriff auf anonyme Objekte über Klassen und Anfragesprache

17 Zugriff auf Objekte zZugriff über Klassen (Extents) zZugriff über Anfragesprache: yObject Query Language

18 Extents zExtents enthalten alle Instanzen einer Klasse zExtents werden vom System verwaltet zKonstruktor: yDatabase db; String className; yExtent ext = new Extent(db, className) zMethoden: yboolean hasNext() yObject next() yint size() yext.setFilter(String filter)

19 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();

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

21 Indizierung zExtents können "indiziert" werden, d.h. yes kann eine Ordnung definiert werden und yman kann mit quasi-konstantem Aufwand auf eine bestimmte Instanz zugreifen zDetails können wir hier nicht besprechen

22 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() ); }

23 OQL: Object Query Language zKlasse OQLQuery zKonstruktoren: yOQLQuery() yOQLQuery(String query) zMethoden: ycreate(String predicate) yexecute()

24 OQL zSyntax an SQL angelehnt: zDefinitionen yDEFINE EXTENT FOR zSelektion: ySELECT FROM AS WHERE zNavigation: ySELECT FROM AS WHERE

25 Bedingungen zVergleiche yfür numerische Werte: =, >=, >, <=, < yfür Zeichenketten: =, LIKE (+ regulärem Ausdruck) zBoolesche Operationen: AND, OR, NOT

26 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...

27 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()

28 Anfragen mit Parametern zKennzeichung von formalen Parametern in Anfragezeichenketten durch spezielle Namen y$1, $2, $3,... zMethode zum Binden von Aktualparametern yQuery.bind(String parameter,...)

29 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 Avery String manager = "Avery, Tom"; query.bind( manager ); Object resultObj = query.execute(); //...

30 Zusammenfassung, Kernpunkte zÜberblick über den ODMG-Standard yObject Definition Language = Java yObject Manipulation Language xKlassen: Database, Transaction, Extent, Query yObject Query Language

31 Was kommt beim nächsten Mal? zFortsetzung OQL zSchema-Versionierung


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

Ähnliche Präsentationen


Google-Anzeigen