Kapitel 3 DB-Gateways Standard-APIs vom Typ Call Level Interface

Werbung
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
Herunterladen