datenbanken & java - htw-dresden.dedbst/material/20021127_83_saake.pdf · programmiersprache:...
Post on 24-Aug-2019
230 Views
Preview:
TRANSCRIPT
DatenbankstammtischDresden, 27. November 2002
Datenbanken & JavaDatenbanken & Java
Gunter Saake
Institut für Technische und Betriebliche InformationssystemeOtto-von-Guericke-Universität Magdeburgsaake@iti.cs.uni-magdeburg.de
1. Überblick
Datenbanken & Java 2Gunter Saake
MotivationJava und DB-AnwendungsentwicklungJDBCEmbedded SQL: SQLJJava im DB-ServerJava und OO-DatenbankenObjektrelationale AbbildungAusblick
2. Motivation
Datenbanken & Java 3Gunter Saake
Datenbanken: Basis vieler Anwendungssysteme Internet-Anwendungen, E-CommerceBetriebliche Informationssysteme
Java als Plattform für Entwicklung solcher Anwendungen
ObjektorientierungPlattformunabhängigkeitVielzahl von verfügbaren Bibliotheken
Datenbankzugriff mit Java
DB-Anwendungsentwicklung
Datenbanken & Java 4Gunter Saake
Kopplung von SQL und prozeduralerProgrammiersprache
prozedurale Schnittstelle (Call-Level-Interface)ODBC, JDBC
Einbettung von SQLEmbedded SQL, SQLJ
Spracherweiterungen, neue SprachentwicklungenPersistente ProgrammiersprachenPL/SQL
Impedance Mismatch: unterschiedliche Datenstrukturkonzepte
Cursor-Konzept
Datenbanken & Java 5Gunter Saake
MotivationSQL: Konzept der Relation als Menge von TupelnProgrammiersprache: Tupel/Objekt als Datenstruktur
Verbindung Relation - Tupeltupelweiser Zugriff auf Elemente einer Menge (Relation)Navigation über Menge
Cursor-Konzept
Datenbanken & Java 6Gunter Saake
Anwendungsprogramm Datenbank
SQLJava
RelationCursor
DB-Anwendungsarchitekturen
Datenbanken & Java 7Gunter Saake
Schichten interaktiver DB-AnwendungenPräsentation und BenutzerinteraktionAnwendungslogikDatenmanagementfunktionalität
Benutzerschnittstelle
Anwendungslogik
DB-Schnittstelle
Client
DB-Server
DBMS-Protokoll
Benutzerschnittstelle
Anwendungslogik
DB-Schnittstelle
Client
Applikations-server
DB-Server
DBMS-Protokoll
CORBA, RMI, HTTP, …
Warum Java ?
Datenbanken & Java 8Gunter Saake
Java ist eine imperative / objektorientierte Programmiersprache
geeignet zur klassischen Anwendungsentwicklunggeeignet für Funktionen / Prozeduren im Datenbankmanagementsystemviele Bibliotheken insb. für Benutzerinteraktion
Ausführungsmodell erlaubtsicheren Code (Sandkasten)Nachladen zur Laufzeit
Java und Datenbanken
Datenbanken & Java 9Gunter Saake
Einsatz von Java in DB-Anwendungenauf Client-Seite:
Applets, DB-Applikationenauf Server-Seite:
DB-Erweiterungen (gespeicherte Prozeduren, benutzerdefinierte Datentypen)
mittlere Ebene:Anwendungslogik (JavaBeans, CORBA, RMI)
Anbindung Java - DatenbankJDBC (Call-Level-Schnittstelle)SQLJ (Embedded SQL)ODMG (ODBMS- und ODM-Zugriff)
Java und DB-Anwendungen
Datenbanken & Java 10Gunter Saake
Benutzerschnittstelle
Anwendungslogik
DB-Schnittstelle
Client
DB-Server
DBMS-Protokoll
Benutzerschnittstelle
Anwendungslogik
DB-Schnittstelle
Client
Applikations-server
DB-Server
DBMS-Protokoll
CORBA, RMI, HTTP, …
JDBC, SQLJ,ODMG, ODM
Gesp. Prozeduren,benutzerdefinierteDatentypen
3. JDBC: Überblick
Datenbanken & Java 11Gunter Saake
Datenbankzugriffsschnittstelle für Javaabstrakte, datenbankneutrale Schnittstellevergleichbar mit ODBCLow-Level-API: direkte Nutzung von SQLJava-Package java.sqlKlassen
DriverManager: Einstiegspunkt, Laden von TreibernConnection: DatenbankverbindungStatement: Ausführung von Anweisungen über eine VerbindungResultSet: verwaltet Ergebnisse einer Anfrage, Zugriff auf einzelne Spalte
JDBC-Struktur
Datenbanken & Java 12Gunter Saake
DriverManager Connection
Statement Statement Statement
ResultSet
getConnection ()
createStatement ()
executeQuery ()
Treiberkonzept
Datenbanken & Java 13Gunter Saake
Treibermanagerabstrakte Klassen für Datenbankzugriffdynamisches Laden von TreibernAuswahl des geeigneten Treibers über Verbindungsdaten
JDBC-Applikation
Treibermanager
Treiber Treiber
JDBC-API
Ablauf
Datenbanken & Java 14Gunter Saake
1. Aufbau einer Verbindung zur DatenbankAngabe der VerbindungsinformationenAuswahl und Laden des Treibers
2. Senden einer SQL-AnweisungDefinition der AnweisungBelegung von Parametern
3. Verarbeiten der AnfrageergebnisseNavigation über ErgebnisrelationZugriff auf Spalten
Verbindungsaufbau
Datenbanken & Java 15Gunter Saake
1. Treiber ladenClass.forName ("com.company.DBDriver");
2. Verbindung herstellenConnection con;String url = "jdbc:subprotocol:datasource";
con = DriverManager.getConnection (url, "scott", "tiger");
JDBC-URL spezifiziertDatenquelle/DatenbankVerbindungsmechanismus (Protokoll, Server-Host und Port)
Anfrageausführung
Datenbanken & Java 16Gunter Saake
1. Anweisungsobjekt (Statement) erzeugenStatement stmt = con.createStatement ();
2. Anweisung ausführenString query = "SELECT titel, preis FROM buch";ResultSet rset = stmt.executeQuery (query);
Klasse java.sql.StatementAusführung von Anfragen (SELECT) mit executeQueryAusführung von Änderungsanweisungen (DELETE, INSERT, UPDATE) mit executeUpdate
Anfrageformen
Datenbanken & Java 17Gunter Saake
StatementBasisklasse für alle AnweisungenVerarbeitung einfacher SQL-Anweisungen ohne Parameter
PreparedStatementKapselung einer vorkompilierten AnweisungparametrisierbarVerwendung: wiederholte Ausführung einer Anweisung (mit verschiedenen Parametern)
CallableStatementAufruf von gespeicherten Prozeduren mit Parametern
Ergebnisverarbeitung
Datenbanken & Java 18Gunter Saake
1. Navigation über Ergebnismenge (Cursor-Prinzip)while (rset.next ()) {
// Verarbeitung der einzelnen Tupel...
}
2. Zugriff auf Spaltenwerte über getType-Methoden
über SpaltenindexString titel = rset.getString (1);
über SpaltennameString titel = rset.getString ("titel");
Fehlerbehandlung
Datenbanken & Java 19Gunter Saake
Fehlerbehandlung mittels Exception-MechanismusSQLException für alle SQL- und DBMS-Fehlertry {
// Aufruf von JDBC-Methoden...
} catch (SQLException exc) {System.out.println ("SQLException: " +
exc.getMessage ());}
Änderungsoperationen
Datenbanken & Java 20Gunter Saake
DDL- und DML-Operationen mittels executeUpdate
liefert Anzahl der betroffenen Zeilen (für DML-Operationen)Statement stmt = con.createStatement ();int rows = stmt.executeUpdate (
"UPDATE buch SET bestand = bestand-1" +" WHERE isbn = '12345' ");
Transaktionssteuerung
Datenbanken & Java 21Gunter Saake
Methoden von Connectioncommit ()rollback ()
Auto-Commit-Modusimplizites Commit nach jeder AnweisungTransaktion besteht nur aus einer AnweisungUmschalten mittels setAutoCommit (boolean)
Beispiel für Transaktionssteuerung
Datenbanken & Java 22Gunter Saake
try {// AutoCommit-Modus ausschaltencon.setAutoCommit (false);
// mehrere DML-Anweisungen...
// COMMIT ausführencon.commit ();
} catch (SQLException exc) {// Änderungen zurücknehmencon.rollback ();
}
Aufruf von gespeicherten Prozeduren
Datenbanken & Java 23Gunter Saake
java.sql.CallableStatement
Aufruf von gespeicherten Prozeduren (Stored Procedures)Übergabe von IN-, INOUT- und OUT-ParameternIN-Parameter
wie bei PreparedStatementOUT-Parameter
Registrierung des SQL-TypsAuslesen der Ergebniswerte mit getXXX-Methoden
JDBC-Beispiel
Datenbanken & Java 24Gunter Saake
try {// VerbindungsaufbauConnection con = DriverManager.getConnection (
url, user, passwd);// AnfrageausführungStatement stmt = con.createStatement ();ResultSet rs = stmt.executeQuery (
"SELECT titel, preis FROM buch");while (rs.next ()) {
System.out.println (rs.getString (1) +", " + rs.getDouble (2));
}} catch (SQLException exc) {
// FehlerbehandlungSystem.out.println (exc);
}
Zugriff auf Metadaten
Datenbanken & Java 25Gunter Saake
Metadaten: Informationen über Nutzdaten (Tabellen, Sichten, Spalten, ...)java.sql.ResultSetMetaData
Informationen über Struktur des Anfrageergebnisses
java.sql.DatabaseMetaData
Informationen über Eigenschaften/Fähigkeiten des DBMSDaten aus dem Schemakatalog
Bsp.: Struktur von Anfrageergebnissen
Datenbanken & Java 26Gunter Saake
// Anfrage ausführenResultSet rs = stmt.executeQuery ( ... );
// Metadaten ermittelnResultSetMetaData rsmeta = rs.getMetaData ();
// Anzahl der Spaltenint ncols = rsmeta.getColumnCount ();
for (int i = 1; i <= ncols; i++) {// Name der SpalteString cn = rsmeta.getColumnName (i);// Typname der SpalteString ctn = rsmeta.getColumnTypeName (i);...
}
4. SQLJ
Datenbanken & Java 27Gunter Saake
Industriekonsortium führender DBMS-Hersteller (IBM, Oracle, Sybase, Cloudscape, Sun)Spezifikationen
Part 0: Embedded SQL für Java (ANSI-Standard)Part 1: Java Stored ProceduresPart 2: Java-Klassen für benutzerdefinierte SQL-Datentypen
Embedded SQL: Überblick
Datenbanken & Java 28Gunter Saake
Einbettung von SQL-Anweisungen in Java-QuelltextVorübersetzung des erweiterten Quelltextes in „echten“Java-Code durch Translator sqljÜberprüfung der SQL-Anweisungen
korrekte SyntaxÜbereinstimmung der Anweisungen mit DB-SchemaTypkompatibilität der für Datenaustausch genutzten Variablen
Nutzung von JDBC-Treibern
Embedded SQL: Prinzip
Datenbanken & Java 29Gunter Saake
Java-Quelltextmit SQLJava-Quelltext
Bytecode
SQLJ-Translator
SQLJ-Laufzeitsystem
JDBC
Java-Compiler
SQLJ-Anweisungen
Datenbanken & Java 30Gunter Saake
Kennzeichnung durch #sqlDeklarationen
Klassendefinitionen für IteratorenSQL-Anweisungen
Anfragen, DML- und DDL-Anweisungen#sql { SQL-Operation };
Beispiel#sql { INSERT INTO buch VALUES ("Datenbanken", 59.00, "123456", "MITP")
};
Host-Variablen
Datenbanken & Java 31Gunter Saake
Variablen einer Host-Sprache (hier Java), die in SQL-Anweisungen auftreten könnenVerwendung: Austausch von Daten zwischen Host-Sprache und SQLKennzeichnung durch ":variable"Beispiel:String titel, isbn = "123456";#sql { SELECT titel INTO :titel FROM buch
WHERE isbn = :isbn };
Iteratoren
Datenbanken & Java 32Gunter Saake
Implementierung des Cursor-KonzeptesFormen:
benannte IteratorenZugriff auf Spalten des Ergebnisses über Methode mit dem Spaltennamen
PositionsiteratorenZugriff über Host-Variablen und FETCH-AnweisungZuordnung durch Position in der Anweisung
Iteratoren
Datenbanken & Java 33Gunter Saake
1. Deklaration des Iterators#sql public iterator BookIter (String titel,
double preis);
2. Definition des IteratorobjektesBookIter iter;
3. Ausführung der Anweisung#sql iter = { SELECT titel, preis FROM buch };
4. Navigationwhile (iter.next ()) {
System.out.println (iter.titel () + " " +iter.preis ());
}
SQLJ: Beispiel
Datenbanken & Java 34Gunter Saake
#sql public iterator BookIter (String titel,double preis);try {
// VerbindungsaufbauConnection con = DriverManager.getConnection (
url, user, passwd);DefaultContext ctx = new DefaultContext (con);DefaultContext.setDefaultContext (ctx);
// AnfrageausführungBookIter iter;
#sql iter = { SELECT titel, preis FROM buch };while (iter.next ())
System.out.println (iter.titel () +", " + iter.preis ());
} catch (SQLException exc) {System.out.println (exc);
}
SQLJ-Translator
Datenbanken & Java 35Gunter Saake
SyntaxprüfungJava-Quelltext einschl. Host-AusdrückeSyntax der SQLJ-Klauseln (nicht SQL !)
SemantikprüfungOffline-Prüfung der Host-Ausdrücke
Einhaltung der TyprestriktionenOnline-Prüfung (optional)
Analyse der eingebetteten SQL-Operationen (nicht für DDL)Typkompatibilität zwischen Java und DB-Objekten
Customizingsystemspezifische Anpassung (z.B. zur Nutzung spezieller Datentypen oder optimierter Schnittstellen)auch nachträglich möglich über Profile
Interoperabilität mit JDBC
Datenbanken & Java 36Gunter Saake
Kombination von statischen und dynamischen SQL
Konvertierung zwischen Verbindungskontext und JDBC-VerbindungConnection con = DefaultContext.getDefaultContext().getConnection ();
Konvertierung zwischen Iterator und ResultSet#sql iter = { SELECT * FROM book };ResultSet rset = iter.getResultSet ();
Vergleich JDBC / SQLJ
Datenbanken & Java 37Gunter Saake
JDBC:Call-Level-Schnittstelledynamisches SQLhohe FlexibilitätFehlererkennung zur Laufzeit
SQLJ Part 0:Embedded-SQL-Lösungstatisches SQLFehlererkennung zur Compile-Zeit
5. Java im DB-Server
Datenbanken & Java 38Gunter Saake
Java-VM als Teil des DBMSplattformneutrale und sichere Umgebung zur Ausführung von prozeduralen Anweisungen (sicherer Code, Sandbox)Erweiterung des DBMS (Prozeduren, Typen)
SQLJgespeicherte Prozeduren/Funktionen
Prozeduren, die im DB-Server gespeichert sind, dort ausgeführt werden und damit lokalen Zugriff auf die Daten habenUnterstützung in DB2, Oracle8i, Sybase Adaptive Server, Informix Cloudscape
Java-Klassen als SQL-Datentypenbenutzerdefinierte Java-Klassen, die als Spaltentypen von Datenbankrelationen verwendet werden können
Gespeicherte Prozeduren
Datenbanken & Java 39Gunter Saake
VorteileReduzierung der NetzwerkbelastungPerformance-Verbesserungzentrale Verwaltung (Sicherheit, Backup, Recovery, Administration)Unabhängigkeit vom Client-System
Applikation…CALL proc…
Applikation…CALL proc…
Applikation…CALL proc…
Java-Prozedur
Methode
Java-VM
Gespeicherte Prozeduren: Ablauf
Datenbanken & Java 40Gunter Saake
1. Implementierungals statische Methode einer Klasse (DB2: spezielle Klasse StoredProc)Default-Verbindung zur DatenbankDB-Zugriff über JDBC oder Embedded SQLBeispiel: JDBCpublic class MyProc {public static double price (int orderNo)
throws SQLException {Connection con = DriverManager.getConnection
("jdbc:default:connection");...
}}
Gespeicherte Prozeduren: Ablauf
Datenbanken & Java 41Gunter Saake
2. Installation im Serverals JAR-Archivsystemabhängig (spezielles Verzeichnis, DB-Tabelle)sqlj.install_jar('file:~/routines.jar', 'routines_jar', 0)
in Oracle8i spezielle Werkzeuge: loadjava, dropjava
Gespeicherte Prozeduren: Ablauf
Datenbanken & Java 42Gunter Saake
3. RegistrierungFestlegung des Names, der Parameter und der Zuordnung zur Java-MethodeCREATE PROCEDURE myproc (custNoINTEGER) MODIFIES SQL DATAEXTERNAL NAME 'routines_jar:Routines.Proc1'LANGUAGE JAVA PARAMETER STYLE JAVA;
automatisch über Deployment Descriptor
Gespeicherte Prozeduren: Ablauf
Datenbanken & Java 43Gunter Saake
4. Aufrufüber JDBC, Embedded SQL, andere APIin Anfragen bzw. DML-Operationendurch TriggerRestriktionen beim Einsatz in DML-Operationen
Keine TransaktionskommandosKeine Modifikation von Relationen in SELECTKein Zugriff auf zu ändernde Relationen in INSERT, UPDATE und DELETE
Java-SQL-Datentypen
Datenbanken & Java 44Gunter Saake
Verwendung von Java-Klassen als SQL-Datentypen für die Definition von AttributenUnterstützung in Sybase Adaptive Server, Informix Cloudscapebenutzerdefinierter SQL-Datentyp: Klasse mit Attributen und MethodenAblaufImplementierung → Installation und Registrierung → Nutzung
Java-SQL-Datentypen: Implementierung
Datenbanken & Java 45Gunter Saake
Klasse mit Schnittstelle java.io.SerializableAttribute zur Repräsentation von SQL-Daten als publicdefiniertzur Ausgabe: Definition der Methode toStringBeispiel:public class Address implementsjava.io.Serializable {
public int zip; public String city, street;
public Address () {zip = 0; city = street = "";
}...
}
Java-SQL-Datentypen: Registrierung
Datenbanken & Java 46Gunter Saake
Installation als JAR-Archiv über sqlj.install_jarSybase: INSTALL JAVA NEW FROM FILE 'Address.class';
Registrierung über erweitere Form von CREATE TYPE: Zuordnung der Klasse sowie der Attribute und MethodenBeispiel:CREATE TYPE Addr EXTERNAL NAME 'addr_jar:Address' LANGUAGE JAVA (
zip INTEGER EXTERNAL NAME 'zip',METHOD Addr () RETURNS AddrEXTERNAL NAME 'Address', ...);
Java-SQL-Datentypen: Nutzung
Datenbanken & Java 47Gunter Saake
Verwendung des neuen Datentyps zur Definition von Attributen einer RelationCREATE TABLE customer (
name VARCHAR(30),address Addr);
Initialisierung durch KonstruktorINSERT INTO customer ('Otto', new Addr ());
Zugriff auf Attribute und Methoden mittels SQL99-SyntaxSELECT address.zip, address.city FROM customer;
Sybase: spezielle Notation '>>'SELECT address>>zip, address>>city FROM customer;
6. Java und OO-Datenbanken
Datenbanken & Java 48Gunter Saake
Java als Definitions- und Implementierungssprache für OODB-Anwendungen
direkte Speicherung von ObjektenEinsatzbereiche: Datenspeicher für einfache Java-Anwendungen → DBMS-Anbindung
Standard-Binding der ODMG für JavaEinführung mit ODMG 2.0Unterstützung durch Mehrzahl der Hersteller
OO-Datenbanken
Datenbanken & Java 49Gunter Saake
Unterstützung von Nicht-Standard-Anwendungen komplexe Strukturen (Aggregationen und Assoziationen, strukturierte Eigenschaften)navigierende Zugriffesemantische Modellierungskonzepte (z.B. Spezialisierung)Überwindung des Impedance Mismatch (Kluft zwischen Typsystem des DBMS und der Programmiersprache)erweiterte Transaktionsmodelle (lange/kooperative Transaktionen)
Industriestandard: ODMG 3.0Systeme: POET, ObjectStore, Versant, ...
Java-Binding der ODMG
Datenbanken & Java 50Gunter Saake
PrinzipPersistenz durch Erreichbarkeit„persistenzfähige“ Klassen
BestandteileJava-ODL: Java als SchemadefinitionsspracheJava-OML: DB-Operationen und Manipulation von Objekten als „normale“ Java-MethodenODMG-API: Klassen für Datenbanken, Transaktionen und KollektionenOQL-Anbindung: Anfrageunterstützung
Persistenz durch Erreichbarkeit
Datenbanken & Java 51Gunter Saake
Objekt wird persistent, wenn es von einem anderen persistenten Objekt referenziert wirderfordert persistente (benannte) Wurzelobjekte
BenannteWurzelobjekte
Unbenannte Objekte
Java-ODL
Datenbanken & Java 52Gunter Saake
Java als SchemadefinitionsspracheDefinition von DB-Klassen in Javakeine Spracherweiterungen notwendig
Klassen, Vererbung, Attribute, Referenzen und Kollektionen, Methoden
Einschränkungen: keine Extensionen und Schlüssel, keine expliziten Beziehungen teilweise mittels zusätzlicher Property-Dateienumgehbar
Java-ODL: Beispiel
Datenbanken & Java 53Gunter Saake
public class Book {// atomare AttributeString isbn, title;double price;// 1:n-BeziehungListOfObject writtenBy;// n:1-BeziehungCategory classifiedIn;
public Book (String isbn) {this.isbn = isbn;writtenBy = new ListOfObject ();
}...
}
Generierung persistenzfähiger Klassen
Datenbanken & Java 54Gunter Saake
PräprozessorVerarbeitung einer Java-Klassendefinition (Quelltext) Extraktion benötigter Informationen (Vererbungsbeziehungen, Attribute, ...)Hinzufügen DB-spezifischen CodesKompilieren zu BytecodeBeispiel: POET
PostprozessorVerarbeitung und Modifikation von BytecodeNutzung existierender Klassen möglichBeispiel: ObjectStore
ODMG-API
Datenbanken & Java 55Gunter Saake
Vordefinierte Klassen für DB-OperationenDatabase
Öffnen und Schließen einer DatenbankRegistrieren und Ermitteln benannter Wurzelobjekte
TransactionStart (begin), Abbruch (abort) und Commit(commit) von Transaktionen
Kollektionen Set, Bag, List, VArray
Java-OML: Beispiel
Datenbanken & Java 56Gunter Saake
// Datenbank öffnenDatabase db = Database.open (...);
// Transaktion startenTransaction tx = new Transaction.begin ();try {
// Wurzelobjekt besorgenBook b = (Book) db.lookup ("EinBuch");// und ändernb.setPrice (49.9);tx.commit ();
} catch (ODMGException exc) {tx.abort ();
}db.close ();
Navigation und Pfadausdrücke
Datenbanken & Java 57Gunter Saake
Navigation in komplexen Werten und Objektstrukturen über Pfade → Verfolgen von BeziehungenPfadausdruck: Konstruktion mit Punktoperator ausgehend von Objekt
Buchtitelpreis
Verlagnameadresse
herausgegebenVon1*
einBuch.herausgegebenVon.name
OQL – Object Query Language
Datenbanken & Java 58Gunter Saake
OQL – Anfragesprache der ODMGSQL-Subset +
Nutzung von Objektidentitäten, Pfadausdrücken, Methoden und komplex strukturierten WertenAnfragen auf Mengen (z.B. Extensionen) und beliebigen Kollektionen
Anfrage mit relationaler, objekterhaltender und objektgenerierender Semantikeingeschränkte Unterstützung in kommerziellen Systemen
OQL-Anbindung
Datenbanken & Java 59Gunter Saake
Klasse OQLQueryÜbergabe der OQL-AnfrageParametrisierung möglichErgebnis als Einzelobjekt oder Kollektion
BeispielOQLQuery q = new OQLQuery ("SELECT * FROM books");CollectionOfObject res = (CollectionOfObject) q;Enumeration e = res.elements ();while (e.hasMoreElements ()) {
Book b = (Book) e.nextElement ();...
}
7. Objektrelationale Abbildung
Datenbanken & Java 60Gunter Saake
Idee: Abbildung von Anwendungsobjekten (Java) auf Datenbankrelationen (Object-to-Database Mapping)
OO auf der AnwendungsebeneNutzung der Vorteile von RDBMS (Sicherheit, Performance, ...)Werkzeugunterstützung
RichtungenForward Engineering: Java-Klassen → RelationenschemataReverse Engineering: Relationenschemata → Java-Klassen
Objektrelationale Abbildung: Prinzip
Datenbanken & Java 61Gunter Saake
Applikation
Anwendungs-objekte
Laufzeitsystem
Objekt-modell
Abbildungs-vorschrift
Datenbank-schema
Aspekte
Datenbanken & Java 62Gunter Saake
AbbildungKlassen ↔ RelationenschemataObjektidentifikatorenAttribute und BeziehungenVererbung (horizontale, vertikale oder typisierte Partitionierung)
Laufzeitstatisch vs. dynamischVerwaltung von ObjektpuffernVerfolgen von ReferenzenSynchronisation konkurrierender Zugriffe (optimistische vs. pessimistische Verfahren)
Abbildung von Vererbungsbeziehungen
Datenbanken & Java 63Gunter Saake
Horizontale PartitionierungRepräsentation der Blätter der Vererbungshierarchie als Tabelle: jede Tabelle enthält alle Attributevorteilhaft bei abstrakten Superklassen
Vertikale PartitionierungRepräsentation jeder Klasse der Vererbungshierarchie als Tabelle: Tabellen enthalten nur spezielle Attribute der jeweiligen KlasseAnfragen nur auf Superklassen effizient
Typisierte PartitionierungAbbildung aller Klassen in einer TabelleUnterscheidung durch Typattributeffizient, aber unflexibel (NULL-Werte, Erweiterung)
Java Blend
Datenbanken & Java 64Gunter Saake
Entwicklungs- und Laufzeitsystem zur objektrelationalen Abbildung (Sun Microsystems)Komponenten
Mapping-Werkzeug: Definition der Abbildung zwischen DB-Schema und Java-Klassen
Java→DB-Modus: Ableitung des Schemas aus KlassenDB→Java-Modus: Generierung von Klassen anhand eines Schemas
Präprozessor: Generierung persistenzfähiger KlassenLaufzeitsystem: Funktionen für Laufzeitaspekte und Anfrageausführung
Java-Blend: Mapping-Werkzeug
Datenbanken & Java 65Gunter Saake
DB → Java-ModusAuslesen eines existierenden DB-SchemasAnalyse der Relationenschemata und Fremdschlüsselbeziehungen (Beziehungen, Vererbung)Generierung einer Default-Abbildunginteraktive Anpassung mittels Mapping-Werkzeug
Java → DB-ModusAnalyse existierender Java-Klassen, Ableitung eines DB-SchemasVoraussetzungen
persistente Klassen implementieren Schnittstelle PersistenceCapableBeziehungen über Referenztypen oder Kollektionen der Klasse DCollection
Java-Blend-API
Datenbanken & Java 66Gunter Saake
DB-Zugriff über JDBC-TreiberODMG-konforme Schnittstelle
Klassen: Database, Transaction, Kollektionenexplizite Persistenz: Persistentmachen eines Objektes durch Aufruf von makePersistent
AnfragenOQL-Unterstützung inkl. Pfadausdrücke und MethodenaufrufeTransformation in SQL-AnfragenODMG-konforme Schnittstelle über OQLQuery
Weitere Systeme
Datenbanken & Java 67Gunter Saake
SQL Object Factory (POET)PowerTier (Persistence)Relational Object Framework (Watershed)...
Architekturvergleich
Datenbanken & Java 68Gunter Saake
Anwendungs-objekte
RDBMS ODBMS
ObjekttransferTransformationRelationaleRepräsentation
8. Java Data Objects (JDO)
Datenbanken & Java 69Gunter Saake
Standard für transparente, herstellerneutrale ObjektpersistenzVerwaltung von Java-Objekten in
Objektdatenbanken (direkt, ohne Mapping)relationalen Datenbanken (über Mapping-Werkzeuge)
Fokus auf Java-ObjektmodellEinheitliche SchnittstelleUnterstützung von Applikationsservern (J2EE)
Weiterentwicklung/Anpassung von ODMG?
JDO: Persistente Klassen
Datenbanken & Java 70Gunter Saake
Persistenz definiert für ausgewählte Java-KlassenKollektionen, String, benutzerdefinierte Klassen
Unterscheidung in First Class-Objekte: Objekte mit OIDSecond Class-Objekte: Objekte ohne eigene OID, nur eingebettet in andere Objekte
SpezifikationJava-KlassendefinitionJDO-XML-Datei mit zusätzlichen Infos (eingebettete Objekte, Elementtyp von Kollektionen etc.)
Code-Modifikation (.class-Files) durch Enhancer
JDO: Speichern von Objekten
Datenbanken & Java 71Gunter Saake
Prinzip: Persistenz durch ErreichbarkeitKoordination über Instanz von Klasse PersistenceManager
persistentes Sichern durch expliziten Aufruf von makePersistent(obj)
Beispiel:PersistenceManager pm = …;Book book = new Book(…);pm.currentTransaction().begin();…pm.makePersistent(book);pm.currentTransaction().commit();
JDO: Zugriff auf Objekte
Datenbanken & Java 72Gunter Saake
Zugriff auf DB-Objekte über Extension (Extent)Anfrage
Iterator über Extensionpm.currentTransaction().begin();Extent books = pm.getExtent(Book.class,
true);Iterator iter = boos.iterator();while (iter.hasNext()) {
Book book = (Book) iter.next();…
}
JDO: Anfragespache
Datenbanken & Java 73Gunter Saake
JDOQL: einfache „Anfragesprache“Im Wesentlichen zum Wiederfinden von ObjektenKeine Verbunde, Gruppierung, Aggregation etc.Nur einfache Filterbedingungen
Beispiel:Extent books = pm.getExtent(Book.class,
true);String filter = "this.isbn.equals(\"1234\")";Query q = pm.newQuery(books, filter);Collection col = (Collection) q.execute();
JDO: Systeme
Datenbanken & Java 74Gunter Saake
ODBMS-basiertFastObjects (FastObjects/Poet)enJin (Versant)
Objektrelationales MappingKodo (SolarMetric)Lido (LIBeLIS)JRelay (ObjectIndustries)…
9. Weitere Aspekte
Datenbanken & Java 75Gunter Saake
Komponentenplattformen und ApplikationsserverEnterprise JavaBeans
TransaktionssteuerungNutzung von verteilten Transaktionen und Transaktionsmanagern über Java Transaction API und XAverteilte Anwendungen, Enterprise JavaBeans
Web-DB-AnbindungenServlets, Java Server Pages
XML-VerarbeitungXML-Parser, Dokument-API (DOM), Werkzeuge
Ausblick
Datenbanken & Java 76Gunter Saake
Java als persistente Programmiersprache ?Orthogonal persistentes Java (PJama/OPJ)
Typ-Orthogonalität: Persistenz für alle ObjektePersistenz durch Erreichbarkeit: Persistenz durch transitive Erreichbarkeit von WurzelobjektenPersistenz-Unabhängigkeit: identischer Programm-code für transiente und persistente Objekte
Charakteristikaspezielle VM für „Stabilisierung“ des Speicherskeine Anfragemechanismen
Ausblick
Datenbanken & Java 77Gunter Saake
Java in der DatenbankDatenbankerweiterungenJava zur plattformneutralen Implementierung von gespeicherten ProzedurenJava-Klassen als SQL-DatentypenNutzung der Java-Sicherheitskonzepte
Mobile DB-LösungenJava als DBMS-Implementierungssprache
Literatur
Datenbanken & Java 78Gunter Saake
Saake, Sattler: Datenbanken & Java: JDBC, SQLJ und ODMG, dpunkt.verlag, Heidelberg, Mai 2000, ISBN 3-932588-54-1
top related