Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Dr. Brigitte Mathiak Kapitel 6 Anbindung an Anwendungen.

Ähnliche Präsentationen


Präsentation zum Thema: "Dr. Brigitte Mathiak Kapitel 6 Anbindung an Anwendungen."—  Präsentation transkript:

1 Dr. Brigitte Mathiak Kapitel 6 Anbindung an Anwendungen

2 Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen2 Lernziele Das grundsätzlichen Problem bei der Kopplung von objektorientierten Programmiersprachen mit relationalen Datenbanken kennenzulernen Konzepte zur Anbindung von Datenbanken an Applikationen Selbst einfache Datenbankanbindungen programmieren zu können Die grundlegende Funktionsweise von Persistenz

3 Impedance Mismatch zwischen OO und RM Ein Objekt wird definiert durch: Identität Zustand Verhalten Kapselung Eine Relation enthält Aussagen mit dem Wahrheitswert TRUE. Beispielsweise: Es gibt einen PROFESSOR namens Sokrates, dieser hat den RANG C4 und arbeitet im RAUM 226. Beides ist nicht trivial kompatibel. Warum? Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen3

4 Impedance Mismatch zwischen OO und RM (2) Struktur: Dieses Problem haben wir bereits in Kapitel 3 kennengelernt, um von UML ins Relationenmodell zu kommen RM hat keine Vererbung, kein Verhalten, keine 1-zu-n oder gar n-zu-n Beziehungen Identität: Tupel haben von sich aus keine eindeutige Identität. Datenkapselung: Objekte können selbst bestimmen wie sie verändert werden Arbeitsweise: Relationen arbeiten global transaktionsbasiert Objekte sind untereinander vernetzt Ergebnismenge: SQL-Anfragen liefern (Multi-)Mengen, keine Objekte Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen4

5 Die gute Nachricht Alle diese Probleme sind im Einzelfall lösbar. Die schlechte Nachricht Entweder man muss Einschränkungen bei den Objekten hinnehmen, die persistent sein sollen, oder es wird sehr kompliziert und/oder unperformant. (Oder man nimmt eine nicht-relationale Datenbank.) Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen5

6 Oracle C++ Call Interface(OCCI)6 Struktur einer OCCI Anwendung Quellcode (benutzt OCCI API und Klassen) C++ Compiler OCCI API header Linker Anwendung OCCI Bibliothek (statisch.lib oder dynamisch.dll) Von OTT generierte C++ Implementierungen Von OTT generierte C++ Header OCCI Header occi.h occiCommon.h occiControl.h occiData.h occiObjects.h OCCI Bibliothek libocci.so/libocci.a/oraocci9.dll

7 Oracle C++ Call Interface(OCCI)7 OCCI – Klassenstruktur Create StatelessConnection Pool ConnectionConnectionPool Create Environment Get Statement Create ResultSet Execute MetaData Get

8 Schritt 1 – Eine Verbindung aufbauen #include "DatabaseConnection.h"; … try { Environment* env = Environment::createEnvironment(); Connection* con = env->createConnection(user, password, connectionString); cout << "Connection success!" << endl;; } catch(SQLException &e) { cout << "Connection failed!" << endl; cout << e.what(); } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen8

9 Schritt 2 – Etwas ausführen try { Statement *stmt = con->createStatement("INSERT INTO hören VALUES (:1, :2)"); stmt->setInt(1, ); stmt->setInt(2, 5001 ); stmt->executeUpdate(); con->terminateStatement(stmt); } catch(SQLException &e) { cout << "Exception thrown for INSERT" << endl; cout << e.what() << endl; } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen9

10 Schritt 3 – Etwas auslesen Statement stmt = con->createStatement("SELECT PersNr, Boss FROM Assistenten"); stmt->executeQuery(); ResultSet rset = stmt->getResultSet(); while (rset->next()) { cout getInt(1) << "" getInt(2) << endl; count++; } stmt->closeResultSet(rset); con->terminateStatement(stmt); Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen10

11 Schritt 4 – Verbindung kappen env->terminateConnection(con); Environment::terminateEnvironment(env); Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen11

12 Schritt 5 - Errorhandling try {…} catch(SQLException &e) { int errno = oraex->getErrorCode(); // die ORA nummer, string errmsg = oraex->getMessage(); //Die Nachricht zum Fehler cout << ex.what() << endl; // // echte Fehlerbehandlung nicht vergessen … } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen12

13 Nachteile von Treibern Kein Syntax-Check des SQL-Statements Es kann nicht über Statement-Grenzen hinweg optimiert werden. Es werden keine Objekte abgespeichert, sondern nur simple Types (kann mit OTT umgangen werden) Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen13

14 Spracheinbettung (z.B. SQLJ) Beispiel: /* EXEC SQL DELETE FROM emp WHERE CURRENT OF emp_cursor; */ Spracheinbettungen und 4GL-Sprachen bieten eine bessere Integration, weil das SQL direkt im Quellcode steht Ein Präprozessor übersetzt die eingebettete Befehle und fängt damit auch Syntax-Fehler ab Weiterer Vorteil: Variablen können besser eingesetzt werden Hauptnachteil: Geringe Unterstützung von anderen Produkten, da Spracheinbettungen als altmodisch gelten Die Sprache selbst wird verändert, dies kann zu Inkompatibilitäten mit anderen Präprozessoren führen Debugging deutlich schwieriger machen Fazit: Nicht mehr state-of-the-art Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen14 sqlstm.stmt = DELETE FROM EMP WHERE ROWID=:b1; sqlstm.iters = (unsigned long)1; sqlstm.offset = (unsigned short)193; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)0; sqlcex(&sqlctx, &sqlstm, &sqlfpn);

15 Persistenzframeworks – Object Relational Mapper (ORM) Grundidee: Transparente Persistenz von Objekten durch Mapping zwischen Objekten und Relationen Vorgehen: Der Zustand bestimmte Objekte wird vom Framework in der Datenbank festgehalten Vorteil: Der Programmierer kann mit den Objekten normal arbeiten Weiterer Vorteil: Das Mapping ist nicht mehr implizit in der Geschäftslogik versteckt, sondern wird explizit angegeben Netter Nebeneffekt: Die Aufteilung in Domänenklassen, die persistiert werden, und in andere Klassen entspricht dem MVC- Programmierparadigma Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen15

16 ORM (Beispiel Hibernate) Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen16 Das Modell wird in Domänenklassen festgehalten (EJBs) Der Zugriff auf die EJBs erfolgt von Applikationsseite aus über DAOs (Data Access Objects) zur Entkopplung Hibernate selbst greift auf die Domänenklassen per Reflection zu Das Mapping zwischen Objekten und Datenbank wird durch XML-Dateien festgelegt (oder Annotations) Der Zugriff auf die Datenbank geschieht per JDBC Die Konfiguration sowohl des Datenbankzugriffs als auch des Verhaltens von Hibernate wird zentral verwaltet

17 ORM (Beispiel Hibernate; Domänenklasse) Beispiel einer Domänenklasse: // Markiert die Klasse als // Der Default Tabellenname wäre ( name = Professoren) public class Long PersNr; // Jede Klasse sollte eine ID haben String Name; String Rang; Long Raum; // leerer public Konstruktur ist notwendig für Entities public Professoren(){}; /* getter und setter … */ } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen17 Professoren PersNrNameRangRaum 2125SokratesC RusselC4232

18 ORM (Beispiel Hibernate; DAO) Beispiel eines DAOs: Hinweis: getHibernateTemplate() kommt aus DAO public class ProfessorDAOHibernate extends DAO implements ProfessorDAO{ public void saveProfessor(Professor toSave){ getHibernateTemplate().saveOrUpdate(toSave); } public Professor getProfessorByPersNr(int PersNr){ return (Professor) getHibernateTemplate(). get(Professor.class, PersNr); } public void deleteProfessor(Professor toDelete){ getHibernateTemplate().delete(toDelete); } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen18 Professoren PersNrNameRangRaum 2125SokratesC RusselC4232

19 ORM (Beispiel Hibernate; weiterführend) Komplexe Anfragen können sowohl über die Hibernate eigene Anfragesprache HQL als auch SQL gemacht werden Es werden mehrere Methoden angeboten 1-zu-n und n-zu-n Beziehungen in der Datenbank darzustellen Sowohl andere Objekte als auch Collections werden als Attribute akzeptiert Allerdings muss ein Mapping explizit angegeben werden Es gibt viele Tools, die den Einstieg in Hibernate erleichtern und viele der benötigten Dateien automatisch generieren Domänenklassen können aus der Datenbank erzeugt werden Standard DAOs können generiert werden Das Datenbankschema kann aus den Domänenklassen generiert werden Etc. Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen19

20 Nachteile ORM Relativ großer Overhead für kleine Projekte Alles muss in Objekten gespeichert werden Gerade am Anfang ist einem nicht ganz klar, was tatsächlich passiert Benötigt Introspection, kann daher nicht für alte Programmiersprachen, wie etwa C++ umgesetzt werden Weniger Quellcode in der Persistenzschicht (-> weniger Fehler) Viele Konfigurationsoptionen um z.B. die Performanz zu optimieren Hervorragende Umsetzung von loser Kopplung zwischen den Komponenten Modell und Persistenz innerhalb eines Programms Im Moment der State-of-the-Art daher stete Weiterentwicklung und neue Features Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen20 Vorteile ORM

21 Fazit Es gibt verschiedene Möglichkeiten Anwendungen an eine relationale Datenbank anzubinden Das Hauptproblem ist dabei der Impedance Mismatch zwischen objektorientierter und relationaler Welt Der einfachste Weg ist es direkt per Treiber mit der Datenbank zu kommunizieren Eine etwas bessere Integration bieten Spracheinbettungen OR-Mapper erlauben es das Mapping zwischen den Objekten und der Datenbank festzulegen. So kann der Programmierer direkt mit den Objekten arbeiten. Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen21


Herunterladen ppt "Dr. Brigitte Mathiak Kapitel 6 Anbindung an Anwendungen."

Ähnliche Präsentationen


Google-Anzeigen