vom 31. Oktober 2008

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