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