Persistenz • Persistenz = dauerhafte Speicherung (DB, Datei, …) Warum reden wir darüber? Zusätzliche Anforderungen/Probleme bei persistenter Speicherung? Wie speichere ich die Objekte meiner OOProgrammiersprache (z.B. in Java)? WS2008/2009 DBIS/Dr. Karsten Tolle Planung • Persistenz – Heute eine Übersicht • XML Einführung – ein bis zwei Vorl. • Danach: Mapping Probleme noch einmal genauer mit Beispielen WS2008/2009 DBIS/Dr. Karsten Tolle Persistenz • Persistenz = dauerhafte Speicherung (DB, Datei, …) Warum reden wir darüber? WS2008/2009 DBIS/Dr. Karsten Tolle Warum reden wir darüber? • Die Daten sind wichtig, sie bilden die Grundlage des Geschäftes und machen einen großen Teil des Geschäftvermögens aus! daher Anforderung für fast jeder Unternehmensanwendung • Die Speicherung ist einer der größten Geschwindigkeitsbegrenzer für Unternehmensanwendungen! • Die Realisierung meist teuer! WS2008/2009 DBIS/Dr. Karsten Tolle Persistenz • Persistenz = dauerhafte Speicherung (DB, Datei, …) Zusätzliche Anforderungen/Probleme bei persistenter Speicherung? WS2008/2009 DBIS/Dr. Karsten Tolle Anforderungen/Probleme • Zuverlässigkeit – Speichermedien können versagen (Haltbarkeit) • Transport – bei der Übertragung vom Hauptspeicher zum Speichermedium kann es zu Fehlern kommen (generell) • Zugriffsschutz – persistente Daten müssen vor unbefugtem Zugriff geschützt werden • Mehrbenutzerzugriff – konkurrierende Zugriffe, insbesondere bei Updates • Transaktionen – Während eines Schreibvorgangs können Fehler auftreten • Performanz – Festplatten und Netzwerke sind langsamer als Hauptspeicher WS2008/2009 DBIS/Dr. Karsten Tolle Persistenz • Persistenz = dauerhafte Speicherung (DB, Datei, …) Wie speichere ich die Objekte meiner OOProgrammiersprache (z.B. in Java)? WS2008/2009 DBIS/Dr. Karsten Tolle Beispiel: Java Objekt public class Person { String name; Adresse anschr; ArrayList nummern = new ArrayList(); public Person(String name) { this.name = name; anschr = new Adresse(); } public void addNummer(String num) { this.nummern.add(num); } … } WS2008/2009 DBIS/Dr. Karsten Tolle Ansätze für Persistenz • Ohne DBMS – Speicherung in einer Datei – Java (Serializable) – Datei (Trennzeichen, feste Länge, Excel, …) – XML • Nutzung eines DBMS – wir betrachten dabei: – – – – JDBC oder SQLJ EJB JDO Frameworks (z.B. Hibernate) WS2008/2009 DBIS/Dr. Karsten Tolle Java - Serializieren • Serializieren := Speichern eines Objektes auf einen Festspeicher. Man spricht auch von deflating oder marshalling. • Deserializieren (inflating oder unmarshalling) := … wieder Laden • Serializieren via Java: Alle relevanten Objekte müssen das Interface “java.io.Serializable” implementieren. WS2008/2009 DBIS/Dr. Karsten Tolle • Referenzierende Objekte werden automatisch mit serialisiert und auch mit deserialisiert. Person String name anschr nummern Adresse ArrayList WS2008/2009 class Person implements Serializable { String name; Adresse anschr; ArrayList nummern = new ArrayList(); public Person(String name) { this.name = name; anschr = new Adresse(); } … } DBIS/Dr. Karsten Tolle Beispiel class PersTest { public static void main(String[] args) { … Person a = new Person(“Fred”); ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(“filename”); os.writeObject(a); os.close; … ObjectInputStream is = new ObjectInputStream(new FileInputStream(“filename”); Person b = (Person)is.readObject(); is.close(); … } } WS2008/2009 DBIS/Dr. Karsten Tolle Speichern in einer Datei • Trennzeichen: Karsten; 12345; 67890 • Feste Länge (hier 10,10,10) Karsten 12345 67890 • XML <Person> <Name>Karsten</Name> <Nummer>12345</Nummer> <Nummer>67890</Nummer> </Person> WS2008/2009 DBIS/Dr. Karsten Tolle Nutzung eines DBMS • Vorteile: – Optimiert für große Datenmengen – Anforderungen wie: Mehrbenutzer, Indexverwaltungen, Zugriffsschutz, … sind integriert – Zusätzliche Möglichkeiten: Überprüfungen – Keys, Trigger… uvm. • Probleme: – Mögliche Lizenzgebühren – DB Know-How nötig WS2008/2009 DBIS/Dr. Karsten Tolle Nutzung von SQLJ oder JDBC • O/R-Mapping ist Aufgabe des Programmierers – Zeitaufwändig – jedes mal neu – Schlecht zu warten – andere Programmierer müssen sich erst einarbeiten – Performance abhängig vom Geschick des Programmierers WS2008/2009 DBIS/Dr. Karsten Tolle Beispiel Teil 1 public class Person { String name; ArrayList nummern = new ArrayList(); … ID Name Nummern 1 Test {1,2,34} … … … Möglichkeit 1 ID Name Nummern 1 Test 1 1 Test 2 1 Test 34 WS2008/2009 Möglichkeit 2 DBIS/Dr. Karsten Tolle Beispiel Teil 2 ID 1 Name Test Möglichkeit 3 Foreign Key Constraint Name_ID Nummern 1 1 1 2 1 34 WS2008/2009 DBIS/Dr. Karsten Tolle EJB – Enterprise Java Bean • Standardisierte Komponente innerhalb J2EE (Java 2 Enterprise Edition Java EE 5) • Zurzeit ist EJB 3.0 aktuell • Entwickelt vorwiegend von SUN WS2008/2009 DBIS/Dr. Karsten Tolle EJB – Enterprise Java Bean WS2008/2009 DBIS/Dr. Karsten Tolle EJB – Enterprise Java Bean • Session Bean – stateful – stateless • Message Driven Bean – zur asynchrone Kommunikation • Entity Bean – Bean Managed Persistenz – Container Managed Persistenz WS2008/2009 DBIS/Dr. Karsten Tolle EJB – Enterprise Java Bean • Entity Beans sind persistent, • Erlauben Zugriff von mehreren Clients, wobei normalerweise der EJB-Container die Transaktionen und Concurrency steuert. • Besitzen einen “primary key” (Identität), • Können Beziehungen zu anderen Entity Beans haben. WS2008/2009 DBIS/Dr. Karsten Tolle EJB – CMP • EJB Container kümmert sich um DB-Zugriffe Container Managed Persistenz • Kein SQL in der EJB unabhägig vom DBMS • Klare Trennung von Geschäftslogik und Speicherlogik • In einem Deployment Descriptor werden die Persistenten Felder und Beziehungen beschrieben. WS2008/2009 DBIS/Dr. Karsten Tolle EJB – Deployment Descriptor <entity> <ejb-name>Person</ejb-name> … <persistence-type>Container</persistence-type> <cmp-version>2.x</cmp-version> … <cmp-field> <field-name>id</field-name> </cmp-field> <cmp-field> <field-name>name</field-name> </cmp-field> <primkey-field>id</primkey-field> … </entity> WS2008/2009 DBIS/Dr. Karsten Tolle EJB - BMP • Programmierer kümmert sich um Persistenz Bean Managed Persistenz • Wissen über DBMS und die Abbildung auf die Speicherstruktur ist während des Programmierens nötig. • Flexibler!!!! – Bei komplexen Joins, Legacy Systemen etc. unumgänglich – Performance Optimierung möglich WS2008/2009 DBIS/Dr. Karsten Tolle JDO – Java Data Objects • Spezifikation für ein Framework zur persistenten Speicherung von Java Objekten • JDO gibt keine Vorgaben für physikalische Speicherung – (O/R)DBMS oder andere Zwischenebene, Programmierer (-ung) ist unabhängig vom DBMS WS2008/2009 DBIS/Dr. Karsten Tolle JDO – Ziele • Anwendung getrennt vom Persistierungprozess • Sicht auf das Persistierungsmedium abstrahiert • Unabhängikeit vom Persistierungsmedium • Unabhängigkeit von der Laufzeitumgebung – JDO ist unabhängig von JEE • Austauschbarkeit der JDO-Implementierung WS2008/2009 DBIS/Dr. Karsten Tolle JDO – Java Data Objects • Erste Version 2001 unter anderem von SUN, IBM, Apple, … • Referenzimplementierung von SUN • JDO 2 wurde im Mai 2006 verabschiedet • Für JDO 2.1 existiert ein ChangeLog unter: http://wiki.apache.org/jdo/ChangeLog WS2008/2009 DBIS/Dr. Karsten Tolle Hibernate • Open Source Projekt (Lizenz: LGPL – GNU Lesser General Public License siehe: http:// www.gnu.org/copyleft/lesser.html) • Java (und .NET) persistenz für relationale DBMS .NET = NHibernate WS2008/2009 DBIS/Dr. Karsten Tolle Hibernate • Hibernate (engl. für „Winterschlaf halten“) • Open-Source Framework (LGPL) – KEIN Standard – JBoss (Red Hat) • Keine graphische Oberfläche • NHibernate für .Net • Homepage: http://www.hibernate.org/ WS2008/2009 DBIS/Dr. Karsten Tolle Hibernate • Abbildung auf Relationen erfolgt mittels einer XML-Datei <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="hibernate.pojo.Person" table="PERSONS"> ……… <!– Mappings für die Eigenschaften der Klasse --> </class> </hibernate-mapping> POJO ist eine Abkürzung für Plain Old Java Object, also ein „ganz normales“ Objekt in der Programmiersprache Java. WS2008/2009 DBIS/Dr. Karsten Tolle Es folgt ein Auszug aus: Persistenz von Objekten von Dr. Serge Shumilov Universität Bonn http://www.odbms.org/download/016.01%20Shumilov%20Persistenz%20von%20Objekten%20September%202004.PDF WS2008/2009 DBIS/Dr. Karsten Tolle WS2008/2009 DBIS/Dr. Karsten Tolle WS2008/2009 DBIS/Dr. Karsten Tolle WS2008/2009 DBIS/Dr. Karsten Tolle