Kapitel 3
DB-Gateways
Inhalt:
Überblick
Architektur und Komponenten
JDBC
SQLJ
Zusammenfassung
Standard-APIs vom Typ Call Level Interface
Einheitlicher Zugriff auf Daten
Anfragesprache
Metadaten (z.T. Datenmodell)
Programmierschnittstelle
OracleTreiber
keine herstellerspez. Pre-Compiler
Dynamisches Binden von
Laufzeitbibliotheken
Späte Anfrageübersetzung
Gleichzeitiger Zugriff auf mehrere
DBMS
O/JDBC-API
Aufrufschnittstelle (CLI)
Anwendung
Dynamisches, spätes Binden an
DBS
Oracle
DB2Treiber
DB2
InformixTreiber
Herstellerspezifisch
Informix
Architektur unterstützt arbeiten mit
(mehreren) herstellerspez. Treibern
Koordination durch Treibermanager
Herstellerspezifische Erweiterungen
möglich
2
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Entwicklung
ODBC: Open Database Connectivity
1992 von Microsoft auf den Markt gebracht
ODBC-Treiber für nahezu alle DBVS verfügbar
JDBC: Java Database Connectivity
auf Grundlage von ODBC von SUN spezifiziert
Abstimmung auf Java, Vorteile von Java auch für API
Abstraktionsschicht zwischen Java-Programmen und SQL
Java-Anwendung
JDBC 3.0
SQL-92 / SQL:1999
(Objekt-)Relationales DBS
3
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Beispiel: JDBC
DriverManager
String url = "jdbc:db2:mydatabase";
Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver");
Connection con = DriverManager.getConnection(url, "stefan",
"sqljava");
Connection
String sqlstr = "SELECT * FROM Employees WHERE dept = 1234";
Statement stmt = con.createStatement( );
Statement
ResultSet rs = stmt.executeQuery(sqlstr);
ResultSet
while (rs.next() ) {
String a = rs.getString(1);
String str = rs.getString(2);
System.out.print(" empno= " + a);
System.out.print(" firstname= " + str);
System.out.print("\n");
}
4
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Architektur
Beispiel: ODBC-Architektur
■
Dateiorientierter Datenspeicher
Client/Server-DBVS
Anwendung
Anwendung
ODBC-Treiber-Manager
ODBC-Treiber-Manager
ODBC-Treiber
ODBC-Treiber
Datenspeicher
Client
Netzwerk-Software
Datenprotokoll
DBVS
Datenspeicher
Server
Datenquellen
5
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Komponenten
Anwendungen
Programme, die DB CLI-Funktionalität nutzen
Nutzung
Treiber-Manager
Verwaltung der Interaktion zwischen Anwendung und Treiber
realisiert (n:m)-Beziehung zwischen Anwendung und Treiber
Aufgaben
Verbindungen zu Datenquellen aufnehmen
SQL-Anfragen an Datenquellen absetzen
Ergebnisse entgegen nehmen (und verarbeiten)
Laden/Löschen des Treibers
Mapping zwischen Treibern und Datenquellen
Weiterleitung/Logging von Funktions-/Methodenaufrufen
Einfache Fehlererkennung
Treiber
Verarbeitung von CLI-Aufrufen
Weiterleitung von SQL-Anfragen an Datenquellen
Ggf. Ausführung von SQL-Anfragen
Verbergen der Heterogenität verschiedener Datenquellen
6
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Treiber-Manager
Anwendung
Anwendung
Verbindungsaufbau
Treiber-Manager
Anwendung
ODBC-Funktion XY
Treiber-Manager
Verbindungsabbau
Treiber-Manager
Mapping
Datenquelle-Treiber
Nein
Treiber
bereits im
Speicher ?
Ja
in Speicher laden
¬ OK
Fehlerprüfung
OK
ODBC-Funktion XY
Treiber
Treiber
7
AG Heterogene Informationssysteme
Nein
Treiber
weiterhin
benötigt ?
Ja
aus Speicher entfernen
Treiber
Middleware für Verteilte
Informationssysteme
Realisierungsalternativen
Treiberarten
JDBC Treibertypen
Ein-Stufen-Treiber (nur ODBC)
Zwei-Stufen-Treiber
Drei-Stufen-Treiber (und höhere)
Typ
Typ
Typ
Typ
1:
2:
3:
4:
JDBC-ODBC bridge
Part Java, Part Native
Intermediate DB Access Server
Pure Java
Anwendungsprogramm ist unabhängig von Realisierungsalternativen
8
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Ein-Stufen-Treiber
Zugriff auf DesktopDBVS, ISAM- und flache
Dateien
Daten auf derselben
Maschine wie Treiber
Funktionalität:
Zugriff auf flache Dateien
Zugriff auf ISAM-Dateien
Anwendung
Anwendung
komplette SQLVerarbeitung (Parsen,
Optimierung,
Bereitstellen des
Ausführungsmoduls)
häufig keine
Mehrbenutzer- bzw.
Transaktionsunterstützung
Treiber-Manager
Treiber-Manager
Ein-Stufen-Treiber
Ein-Stufen-Treiber
ISAM-Aufrufe
Datei-I/O-Aufrufe
ISAM-Engine
Datei-I/O-Aufrufe
Dateisystem
Dateisystem
Middleware für Verteilte
Informationssysteme
9
AG Heterogene Informationssysteme
Zwei-Stufen-Treiber
klassische Client/ServerUnterstützung
direkte Teilnahme am Datenprotokoll
Treiber übernimmt Client-Rolle im
Datenprotokoll mit DBVS (Server)
Anwendung
Realisierungsmöglichkeiten
Treiber-Manager
direkte Teilnahme am
Datenprotokoll
Abbildung von ODBC-Funktionen auf
DBS-API
Middleware-Lösung
Zwei-Stufen-Treiber
(Verwendung von Nachrichten oder RPCs)
Datenprotokoll
Netzwerkbibliothek oder
RPC-Laufzeitsystem
Protokoll für Datenübertragung
im Netzwerk
DBVS
10
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Zwei-Stufen-Treiber (Forts.)
Abbildung von
ODBC-Funktionen
auf DBS-API
Anwendung
Treiber-Manager
Zwei-Stufen-Treiber
(Abbildung auf DBS-API)
DBS-API
DB-Laufzeitbibliothek
Datenprotokoll
Netzwerkbibliothek oder
RPC-Laufzeitsystem
Protokoll für Datenübertragung
im Netzwerk
DBVS
11
AG Heterogene Informationssysteme
Zwei-Stufen-Treiber
(Forts.)
Middleware für Verteilte
Informationssysteme
Anwendung
Treiber-Manager
Zwei-Stufen-Treiber
(eines Middleware-Herstellers)
MiddlewareLösung
Netzwerkbibliothek oder
RPC-Laufzeitsystem
(des Middleware-Herstellers)
Datenprotokoll des
Middleware-Herstellers
für Netzwerk
Serveranwendung
(des Middleware-Herstellers)
DBS-API
DBVS
12
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Drei-Stufen-Treiber (und höhere)
Verbindungsserver
Verbindung mit einem
oder mehreren DBVS
Verlagerung der
Komplexität von Client
zu Verbindungsserver
theoretisch beliebig
viele Verbindungsstufen
Anwendung
Treiber-Manager
Drei-Stufen-Treiber
Stufe 1:
Client
Netzwerkbibliothek / RPC-Lfzs
Datenprotokoll 1
Server (Verbindungsrechner)
Stufe 2:
Verbindungsrechner-Server
auf dem LAN
Treiber-Manager
Ein- oder Zwei-Stufen-Treiber
weitere Komponenten
Stufe 3:
DBVS-Server
Datenprotokoll 2
DBVS
Middleware für Verteilte
Informationssysteme
13
AG Heterogene Informationssysteme
JDBC-Treiber Typ 1
Verwendung der
JDBC-ODBC-Bridge
Java-Anwendung
JDBC-Treiber-Manager
benutzen des Java Native
Interface (JNI)
JDBC-ODBC-Bridge-Treiber
(Abbildung auf ODBC)
Binärcode beim
Client erforderlich
Nicht für Applet-basierten DBZugriff geeignet
ODBC-Aufrufe
ODBC-Treiber-Manager + Treiber
(Binärcode!)
security ...
Datenprotokoll
Netzwerkbibliothek oder
RPC-Laufzeitsystem
Protokoll für Datenübertragung
im Netzwerk
DBVS
14
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC-Treiber Typ 2
Native-APIPartial-Java-Treiber
Java-Anwendung
Abbildung des
JDBC-Interface
auf DBS-API
JDBC-Treiber-Manager
Zwei-Stufen-Treiber
(Abbildung auf DBS-API)
Binärcode beim
Client erforderlich
Nicht für Applet-basierten DBZugriff geeignet
DBS-API
DB-Laufzeitbibliothek (Binärcode!)
Datenprotokoll
Netzwerkbibliothek oder
RPC-Laufzeitsystem
Protokoll für Datenübertragung
im Netzwerk
DBVS
15
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC-Treiber Typ 3
Java-Anwendung
Net-ProtocolAll-Java-Treiber
Java-Treiber-Manager
Treiber kommuniziert mit JDBC
server/gateway über DBMSherstellerunabhängiges
Netzwerkprotokoll
JDBC server/gateway arbeitet mit
DBMS API
Zwei-Stufen-Treiber
(eines Middleware-Herstellers)
Middleware-Lösung
kein Binärcode beim Client
erforderlich
Applet-basierter DB-Zugriff möglich
Netzwerkbibliothek oder
RPC-Laufzeitsystem
(des Middleware-Herstellers)
Datenprotokoll des
Middleware-Herstellers
für Netzwerk
Serveranwendung
(des Middleware-Herstellers)
DBS-API
16
AG Heterogene Informationssysteme
DBVS Middleware für Verteilte
Informationssysteme
JDBC-Treiber Typ 4
Native-ProtocolAll-Java-Treiber
direkte Teilnahme
am Datenprotokoll
kein Binärcode
beim Client
erforderlich
Java-Anwendung
JDBC-Treiber-Manager
Zwei-Stufen-Treiber
(Verwendung von Nachrichten oder RPCs)
Datenprotokoll
Netzwerkbibliothek oder
RPC-Laufzeitsystem
Protokoll für Datenübertragung
im Netzwerk
DBVS
17
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Treiber - Aufgaben im Einzelnen
Verwalten von Verbindungen
Fehlerbehandlung
Umwandlung von SQL-Anfragen
Standard-Fehlerfunktionen/-Fehlercodes, Fehlermeldungen, ...
bei Abweichungen des DBVS vom Standard
Datentypumwandlungen
Katalogfunktionen
Informationsfunktionen
Umwandlung von Zugriffen auf Metadaten
geben Informationen über Treiber (selbst), zugehörige Datenquellen und von der
Datenquelle unterstützte Datentypen
Optionsfunktionen
Parameter für Verbindungen und Anweisungen
(z. B. Wartezeiten für Abarbeitung von Anweisungen)
18
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC - Datenquellen
"Traditionelles" Verbindungsmodell
Verbindung zu Datenquelle über Verbindungs-URL:
‘jdbc: <subprotokoll>:<subname>’
subprotokoll : Name des Treibers oder des Datenbankverbindungsprotokolls
subname: dient der Identifikation des DBS; abhängig vom Subprotokoll
Beispiele:
jdbc:odbc:kunden;UID=John;PWD=Maja;
CacheSize=20
jdbc:openlink://kundenhost.firma.com:2000/
SVT=Oracle7/Database=kunden
19
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC – Traditionelles Verbindungsmodell
JDBC-Methode: DriverManager.getConnection
Parameter: JDBC-URL, User-ID, Paßwort
JDBC-Methode:
Driver DriverManager.getDriver(String url)
Treiber-Manager fragt alle bei ihm registrierten Treiber, ob sie url auswerten
können;
falls einer der Treiber TRUE zurückliefert, kann mit
Driver.getPropertyInfo(String url, Properties info)
ermittelt werden, welche Parameter noch fehlen;
DriverManager.getConnection(String url, Properties info)
stellt dann die Verbindung her;
20
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC – Wichtigste Schnittstellen
Connection
createStatement
prepareCall
prepareStatement
Statement
subclass
subclass
PreparedStatement
IN:
setXXX
executeQuery
CallableStatement
IN/OUT/INOUT:
getXXX/setXXX
Data Types
executeQuery
getXXX
getResultSet
getMoreResults
ResultSet
21
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC – Beispiel (1)
import java.sql.*;
import java.io.*;
public class Beispiel (
public static void main (String args[]) {
try {
// Schritt 1: Aufbau einer Datenbankverbindung
try {Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);}
catch (ClassNotFoundException cex) {
System.err.println(cex.getMessage());
}
Connection conn = DriverManager.getConnection(
“jdbc:odbc:pizzaservice”,””,””);
// Schritt 2: Erzeugen einer Tabelle
Statement stmt = conn.createStatement();
stmt.executeUpdate(“CREATE TABLE PizzaTabelle (“ +
“id INTEGER, name CHAR(2), preis FLOAT)” );
22
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC - Beispiel (2)
// Schritt 3: Füllen der Tabelle
stmt.executeUpdate(“INSERT INTO PizzaTabelle(id, name, preis) VALUES(12, “Margherita”, 7.20)”);
...
// Schritt 4: Absetzen einer Anfrage
ResultSet rs = stmt.executeQuery(“SELECT * FROM PizzaTabelle WHERE preis = 7.20”);
// Schritt 5: Ausgabe des Ergebnisses
while(rs.next()) {
int id = rs.getInt(“id”);
String name = rs.getString(“name”);
float preis = rs.getFloat(“preis”);
System.out.println(“Treffer: “ + name + “ , “ + preis);
}
// Schritt 6: Beenden der Verbindung
rs.close();
stmt.close();
conn.close();
}
catch(SQLException ex) {
System.err.println(ex.getMessage());
}}}
23
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC – Verarbeiten von Anfrageergebnissen
Verarbeiten von DB-Daten mit JDBC
ResultSet
getXXX-Methoden
Scrollable-ResultSets
Updatable-ResultSets
Datentypen
Konvertierungsfunktionen
Streams zur Übertragung großer Datenmengen
Unterstützung von SQL:1999-Datentypen ab JDBC 2.0
LOBS (BLOBS, CLOBS)
Arrays
UDTs
Referenzen
24
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC DataSource
DataSource Interface
Motivation: mehr Portabilität durch Abstraktion von Driver-spezifischen
Verbindungsdetails
Anwendung benutzt logischen Namen zum Verbindungsaufbau über Java Naming
and Directory Service
ermöglicht Erzeugen, Registrieren, Rekonfigurieren, Neuzuordnung zu einer
anderen physischen Datenbank ohne Mitwirken der Anwendung
Schritte
DataSource-Objekt wird erzeugt, konfiguriert, und mit JNDI registriert
Administrationsfunktion eines Anwendungsservers
geschieht ausserhalb der Anwendungskomponente
Anwendung benutzt logischen Namen um DataSource-Objekt zu erlangen
JNDI lookup
keine Treiberspezifischen Details sichtbar
Anwendung erzeugt mit Hilfe der DataSource ein Connection-Objekt
Rekonfiguration der DataSource möglich, ohne dass die Anwendung betroffen ist
DataSource.getConnection( )
25
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Connection Pooling
Dient Verbesserung der Performanz,
Skalierbarkeit
Verbindungsaufbau ist teuer,
resourcenintensiv
Server-seitige Anwendungskomponenten
DB-Zugriff oft über wenige (gemeinsame)
Benutzerkennungen
DB-Verbindung wird meist nur für die Dauer
eines (kurzen) Verarbeitungsschritts gehalten
Ermöglicht Wiederverwendung von
physischen Verbindungen zu Datenbanken
Bereitstellen von Kommunikations- und
Speicherresourcem
Authentifikation, Erzeugen von
Sicherheitskontext
open -> "get connection from pool"
close -> "return connection to pool"
Connection pooling kann (genau wie verteilte
Transaktionsverarbeitung) durch DataSource,
Connection interfaces “versteckt” werden
JDBC definiert zusätzliche
implementierungsorientierte Interfaces
für die Anwendung nicht relevant
26
AG Heterogene Informationssysteme
source: JDBC 3.0
Middleware für Verteilte
Informationssysteme
Transaktionen in JDBC
Connection interface – transaktionsorientierte Methoden für lokale TAs
commit()
rollback()
get/setTransactionIsolation()
get/setAutoCommit()
NONE, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
Verteilte Transaktionsverarbeitung
erfordert Interaktion mit Transaktionsmanager
Demarkation der Transaktionsgrenzen
X/Open DTP, Java Transaction Service (JTS)
Java Transaction API (JTA)
NICHT über Connection-Interface
UserTransaction Objekt
JDBC definiert zusätzlich Interfaces zur Implementierung der Treiberfunktionalität
XADataSource, XAConnection, ...
Middleware für Verteilte
Informationssysteme
27
AG Heterogene Informationssysteme
Verteilte Transaktionen mit JDBC
source: JDBC 3.0
28
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
JDBC – Weitere Funktionen
Metadaten
Funktionen für Metadaten-Lookup
wichtig für generische Anwendungen
Exception Handling
RowSets
Batch Updates
Savepoints
...
29
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
SQLJ
(Statisches) SQL eingebettet in Java
Vorteile von SQLJ gegenüber JDBC (Entwicklung)
bessere sprachliche Einbettung
vereinfachte Programmierung, kürzere Programme
Prüfung der Typkorrektheit von Hostvariablen, syntaktischen Korrektheit und
Schemakorrektheit von SQL-Befehlen zur Entwicklungszeit
ermöglicht Authorisierung zur Programmausführung
(statt Tabellenzugriff)
Mögliche Performanzvorteile
kombiniert Vorteile von eingebettetem SQL mit Anwendungsportabilität (“binary portability”)
nutzt JDBC als “Infrastruktur”, kann mit JDBC-Aufrufen in der gleichen Anwendung kombiniert
werden
ANSI/ISO-Standard: SQL/OLB (Object Language Bindings)
Übersetzung und Optimierung von SQL-Anweisungen sowie Zugriffskontrolle zum
Kompilierungszeitpunkt möglich
herstellerspezifische Optimierungen werden unterstützt (SQLJ Customizer)
Geringe Flexibilität
deshalb Interoperabilität mit JDBC notwendig
30
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
SQLJ - Beispiel
Single row select
SQLJ:
#sql { SELECT ADDRESS INTO :addr FROM EMP
WHERE NAME=:name };
JDBC:
java.sql.PreparedStatement ps =
con.prepareStatement("SELECT ADDRESS FROM EMP WHERE NAME=?");
ps.setString(1, name);
java.sql.ResultSet names = ps.executeQuery();
names.next();
name = names.getString(1);
names.close();
31
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
SQLJ - Iteratoren
Iteratoren zur Verarbeitung von Mengen von Ergebnistupeln
vergleichbar mit SQL-Cursor, JDBC-ResultSet
jede Deklaration eines SQLJ-Iterators in der Anwendung führt zur Generierung
einer Iteratorklasse
generische Methoden zur Iteration
“Positioned Iterator” ermöglicht Zugriff auf Ergebnisse über FETCH ... INTO ...
“Named Iterator” erhält Zugriffsmethode für jede Spalte der Ergebnistabelle
32
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
SQLJ - Binäre Portabilität
Java als plattformunabhängige Wirtssprache
generischer SQLJ-Vorübersetzer (statt herstellerspezifischer Technologie)
generierter Code nutzt “Standard” JDBC per default
kompilierte SQLJ-Anwendung (Java bytecode) ist portabel (herstellerunabhängig)
herstellerspezifische Anpassung/Optimierung ist nach der Übersetzung möglich
(Customizer)
S Q LJ so u rc e
S Q LJ sou rce
c la s s A B C {
#sq l
S E L E C T ...
G e n e r ic
SQ LJ
tra n s la to r
c la s s A B C {
c a ll "s t u b "
}
Ja va
b yte
cod es
Java
C o m p ile r
O p t io n a l s t e p :
D B M S - s p e c ifi c
c u s t o m iz e r
Java
b yte
codes
}
E x tra c te d S Q L
E x tra cte d S Q L
S E L E C T ...
h o st va r d a ta
S E L E C T ...
h o s t va r d a ta
E x tra cte d S Q L
J D B C " s tu b "
S E L E C T ...
h ost var d ata
J D B C " s tu b "
D B M S - s p e c ifi c
"s t u b "
J D B C d e fa u lt
" s tu b "
M o st ven d ors u se
d e fa u l t J D B C "s t u b "
33
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme
Zusammenfassung
Gateways
JDBC
ODBC / JDBC
erlauben den Zugriff auf heterogene Datenquellen mittels Standardsprache
keine Integration
kapseln die herstellerabhängigen Anteile
hohe Akzeptanz; fast alle Hersteller von Software zur Verwaltung von Datenquellen
liefern zugehörige Treiber
’für Java’, ’in Java’
besondere Bedeutung, da auch im Rahmen von weiteren Middleware-Technologien
zu Zwecken des DB-Zugriffs genutzt (insbes. J2EE)
SQLJ
verbindet Vorteile der Einbettung von SQL in Wirtssprache (hier Java) mit
Herstellerunabhängigkeit, Portabilität
34
AG Heterogene Informationssysteme
Middleware für Verteilte
Informationssysteme