Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Barbara Bösch Geändert vor über 8 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.