<Object-Relational Mapping:> Grundlagen der Objektpersistenz 14.11.2006 - Martin Landwehr Agenda ORM – Grundlagen/Motivation ORM-Tools/Frameworks Ausgangssituation Persistenz von Objekten Die semantische Lücke Persistenztechniken Marktübersicht Grundlagen Theoretisches Beispiel mit Hibernate Praktisches Beispiel mit EJB 3.0 Fazit 2 Ausgangssituation Randbedingungen – Realität Anforderungen an Projekte • • Mehrschichtige Client-/ServerArchitekturen Kurze Entwicklungsphasen / Release-Cyclen • Kosten- und Termindruck • Beschränkte Resourcen • Beschränkte Mittel • Moderne Modellierungstechniken • Fehlende Erfahrung mit neuen Technologien • Moderne Programmiersprachen • Dominanz relationaler Datenbanken • Performante und skalierbare Datenhaltung • Bestehende relationale Datenbestände • Transaktionsmanagement 3 Persistenz von Objekten Problem: Objekte einer objektorientierten Programmiersprache (wie z.B. Java, C++, C#) sind transient - in Folge gehen Objekte nach Programmende verloren. Aber: Viele Anwendungen benötigen die Erhaltung von Objekten über das Programmende hinaus. Bsp: Kundenobjekte, Bestellobjekte Ziel daher: persistente Objekte Wie viele Wege führen zum Ziel? 4 Neues Problem: Wie bilde ich objektorientierte Programmierung auf ein physisches relationales Datenbankschema ab? Exkurs: Die semantische Lücke 4 Die semantische Lücke Objektorientierung Datenbankwelt Objektzugriff, Vererbung, Polyphormie … 5 Ziele/Anforderungen Objektpersiszenz Klassen, Attribute, Assoziationen und Generalisierung abbilden Kein SQL in fachlichen Klassen Über Assoziationen des Modells navigieren Objektmengen über Anfragen ermitteln Identität von Objekten gewährleisten Transaktionen auf Objektebene 6 Persistenztechniken (1) Technische Vorgehensweisen / Möglichkeiten: Objekteserialisierung Pro: Einfache Technik für kleine Datenbestände Kontra: keine Transparenz, keine skalierbare Wiederauffindbarkeit Objektrelationale Datenbanksysteme (ORACLE 8i, IBM DB2 UDB, Informix Dynamic Server) Kontra:Preis/keine Interoperabilität (PostgreSQL mit SQL92 läuft auch auf Informix, DB2 oder MySql4) 7 Persistenztechniken (2) manuelles OR-Mapping b1 : Bestellung peter : Kunde artikelnr = 887 name = „Peter Pan“ kundennr = 12345 b2 : Bestellung artikelnr = 998 Kunde name kundennr Peter Pan 12345 Bestellung artikelnr kundennr 887 998 12345 12345 JDBC ODBC RDBMS Pro/Kontra: fehlende Transparenz – Objekte müssen eigenständig (über eigene Methoden) dafür sorgen, persistent gehalten zu werden. Objektorientiertes Modell ist sehr viel mächtiger als relationales Modell – Abbildung nur verlustbehaftet möglich (Vererbung, n:mRelationen, Objektidentität, Polyphormismus etc.) 8 Persistenztechniken - Manuelles OR-Mapping Person 1 0..1 käufer Warenkorb 0..* enthält 1 getGesamtpreis() : double 0..* Buch isbn : String Artikel preis: double titel: String name:String Author 0..* CD interpret : String laenge : int DVD laenge : int Weiteres Problem: Implementierungsaufwand sehr hoch und fehleranfällig 9 OR-Mapping Tools - Idee Idee: Füge zwischen Anwendung und RDBMS eine zusätzliche Softwareschicht ein, die das OR-Mapping automatisch und transparent durchführt. OO-Anwendung Java/C++/C# etc. Klassen, Objekte OR-Mapping-Schicht JDBC, ODBC, SQL Relationen, Tupel RDBMS 10 OR-Mapping Tools/Frameworks - Überblick .NET - Gentle.NET http://gentle.net/ - NHibernate http://www.nhibernate.org/ - ADO.NET PHP - - PHP Object Generator http://www.phpobjectgenerator .com/ Metastorage http://www.meta-language.net Perl - Perl-ORM http://perlorm.sourceforge.net/ Java Hibernate http://www.hibernate.org - Java Data Objects (JDO) http://java.sun.com/products/jdo/ - Container Managed Persistence http://java.sun.com/javaee/ - Java Persistence API (EJB3.0) http://java.sun.com/javaee/ - JRelationalFramework http://jrf.sourceforge.net - Cayenne http://objectstyle.org/cayenne/ - ObJectRelationalBridge http://db.apache.org/ojb/ - - Turbine/Torque http://jakarta.apache.org/turbine/ Siehe auch: http://www.service-architecture.com/products/object-relational_mapping.html 11 OR-Mapping mit Hibernate Eine Hibernate-Anwendung besteht normalerweise aus 4 unterschiedlichen Teilen: 1. Hibernate-Konfigurationsdatei (bzw. XML-Konfigurationsdatei) 2. Pro persistenter Klasse eine Hibernate Mapping XML-Datei 3. Der Hibernate Java Library und anderer benötigter JARDateien 4. Der Hibernate Query Language für Abfragen gegen die DB Sowie natürlich 5. Den Java-Klassen 6. Der Datenbank mit dem Datenbank Schema 12 OR-Mapping mit Hibernate 1 Konfigurationsdatei 'hibernate.cfg.xml' 2 Mapping-XML-Datein ‘OBJEKT.hbm.xml' 3 Basisklassen ‘OBJEKT.java' 13 OR-Mapping mit Hibernate 4 Client 5 Setter/Getter 6 Abfragen 14 OR-Mapping Tools - Features OR-Mapper bieten nicht nur einfache Persistenzfunktionen sondern auch Unterstützung für: Callbacks and Callback Handlers integriertes Logging Konflikterkennung bei Mehrfachnutzung Optimierte Lastverteilung Caching Clustering Transaktionsmanagement 15 OR-Mapping Tools - Fazit Pro Insbesondere für größere Projekte geeignet Einsparungen an Zeit und Geld Vereinfachte Entwicklung von neuen Applikationen Flexible Anbindung an relationale Datenbanksysteme Komplexe Schemata können auf relationale Datenbanksysteme abgebildet werden Programmänderungen, die im Objektmodell realisiert werden, führen zu einer vereinfachten Weiterentwicklung der Applikation Kontra Noch kein Ersatz für Datenbankkenntisse Performanceprobleme Teilweise recht umständlich Arbeitsaufwand u.U. höher als beim reinen manuellen ORMapping 16 Literatur - Tutorials Tutorial Gentle.NET Tutorial Hibernate http://www.mertner.com/confluence/display/Gentle/Getting+Started http://www.laliluna.de/first-hibernate-example-tutorial.html http://www.laliluna.de/java-database-development.html http://www.torsten-horn.de/techdocs/java-hibernate.htm Tutorial EJB3.0 http://docs.jboss.org/ejb3/app-server/tutorial/index.html 17 </Object-Relational Mapping:> Fragen?