Persistenz - ssw.jku.at

Werbung
Persistenz
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
1
Objektpersistenz
ƒ
ƒ
ƒ
ƒ
Abbilden von Objekten in relationale Datenbanken
Auslesen und Aufbau von Objekten
Speichern von Änderungen als Datenbankupdates
Transaktionen
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
2
Datenbankstruktur (1/ 5)
ƒ Beispiel-Objektstruktur
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
3
Datenbankstruktur (2/5)
Konkrete Klasse = Tabelle
ƒ
ƒ
ƒ
Für jede konkrete Klasse gibt es eine eigene
Tabelle
einfache Struktur, klare Abbildung
Zugriffe über mehrere Tabellen notwendig
(union)
Z.B. beim Zugriff auf die Räume eines bestimmten
Gebäudes
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
4
Datenbankstruktur (3/5)
Klasse = Tabelle
ƒ
ƒ
ƒ
auch abstrakte Basisklassen werden mit eigener Tabelle dargestellt
Information über mehrere Tabellen verteilt
Zusammenhang über ids
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
5
Datenbankstruktur (4/5)
Vererbungshierarchie = Tabelle
ƒ
ƒ
ƒ
ƒ
ƒ
Für eine Vererbungshierarchie werden alle Objekte in eine Tabelle
aufgenommen
Diese Tabelle hat alle Attribute aller Klassen der Vererbungshierarchie
plus Diskriminator, der die Klasse angibt.
mehrere Tabellen für verschiedene Vererbungshierarchien
günstig bei Zugriff auf unterschiedliche Objekte in einer Vererbungshierarchie
z.B. Menge der Räume eines Gebäudes, die Hoersaal oder Buero sein kann
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
6
Datenbankstruktur (5/5)
Tabelle = Universell
ƒ eine Tabelle für alle Objekte
ƒ eine Tabelle für alle Attribute
ƒ flexibel aber Objektstruktur
geht
Von Java EE Persistence API:
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
7
Definition der OR Mapping
ƒ Definition der Abbildung der Objekte auf Tabellen
• Objekte in welche Tabellen
• Felder in welche Spalten
Von Java EE Persistence API:
verwendet Annotations
ƒ Möglichkeiten:
• Konfigurationsfiles (XML)
• Annotationen
• Namensgleichheit zwischen
- Klassen - Tabellen und
- Felder (Properties) - Spalten
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
8
Updates
ƒ
Beim Ändern von Eigenschaften eines Objekts, muss das Schreiben
in die Datenbank veranlasst werden
Fragen:
1. wie erkennt man eine Änderung?
2. wann wird der Update in der Datenbank durchgeführt?
Antworten:
1. Ändern nur über setter-Methoden, die diese Änderung melden
(dirty-Flag)
2. entweder immer sofort, oder in einer Art begin- und end-update
geklammert durch in einer Transaktion
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
9
Management
ƒ Es muss einen zentralen Manager geben, der
•
•
•
•
•
die Connection öffnet
Connection schließt
Updates durchführt
Transaktionen managed
…
ƒ Dieses sollte auch als Container verwendet werden
• Erzeugen von Objekten
• Auslesen von Objekten über eindeutigen Primärschlüssel
wenn bereits geladen, das Objekt liefert und, wenn nicht, es aus der DB holt)
• Löschen von Objekten
• Update von Objekten
• …
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
10
Management
ƒ von Java EE Persistence API
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
11
Architektur GraphicObject-PersistenceLayer (1/ 5)
ƒ Tabelle für GraphicObjects
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| GraphObject
|<‐elems‐‐‐‐‐‐‐‐‐‐+
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ * |
| int id, x, y | |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ |
/_\
|
| |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ |
| | | 1 | parent
+‐‐‐‐‐‐‐‐‐‐‐‐‐+ +‐‐‐‐‐‐‐‐‐‐‐‐‐+ +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ | Circle | | Rectangle
| | GraphComposite
|
+‐‐‐‐‐‐‐‐‐‐‐‐‐+ +‐‐‐‐‐‐‐‐‐‐‐‐‐+ +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| int r | | int w, h | | GraphObject[] elems|
+‐‐‐‐‐‐‐‐‐‐‐‐‐+ +‐‐‐‐‐‐‐‐‐‐‐‐‐+ +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
COLUMN_NAME |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ID |INTEGER |0 |10 |10 |NULL |NULL
|NO DISCR |VARCHAR |NULL|NULL|128 |NULL |256 |YES X |INTEGER |0 |10 |10 |NULL |NULL
|YES Y |INTEGER |0 |10 |10 |NULL |NULL
|YES W |INTEGER |0 |10 |10 |NULL |NULL
|YES H |INTEGER |0 |10 |10 |NULL |NULL
|YES R |INTEGER |0 |10 |10 |NULL |NULL
|YES PARENTID |INTEGER |0 |10 |10 |NULL |NULL
|YES JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
12
Architektur GraphicObject-PersistenceLayer (2/ 5)
ƒ GraphicObjects
•
eindeutige id für Datenbankzugriff
public abstract class GraphicObject {
private int id;
public int getId() {
return id;
}
•
Konstruktorschnittstellte mit id (muss über Reflection aufgerufen werden)
public GraphicObject(int id) {
this(id, 0, 0);
…
}…
}
•
Ändern von Properties nur über Setter mit Melden der Änderung
für späteren DB-Update
public void setX(int x) {
this.x = x;
PersistenceManager.getManager().markDirty(this, …);
}…
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
13
Architektur GraphicObject-PersistenceLayer (3/ 5)
ƒ PersistenceManager
•
gemanagte Objekte brauchen Zugriff Î hier Singleton
public class PersistenceManager {
private static PersistenceManager PMANAGER = new PersistenceManager();
public static PersistenceManager getManager() {
return PMANAGER;
}
•
Open/Close Connection
private Connection conn;
public void init(String url) {
this.url = url;
}
public void openConnection() {
try {
conn = DriverManager.getConnection("jdbc:derby:C:/Derby/…");
} catch (SQLException e) {
…
}
}
public void closeConnection() { … }
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
14
Architektur GraphicObject-PersistenceLayer (4/ 5)
•
Zugriff auf Objekte mit bestimmtem Id
- aus Repository von geladenen Objekten
private Map<Integer, GraphicObject> objectRepository =
new HashMap<Integer, GraphicObject>();
- bzw. Laden aus der DB
public GraphicObject getObject(int id) {
if (objectRepository.containsKey(id)) {
return objectRepository.get(id);
} else {
try {
Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("select … id=" + id);
…
} catch (SQLException e) {
…
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
15
Architektur GraphicObject-PersistenceLayer (5/ 5)
•
Speichern von neuen und geänderten Objekten
- Neue und geänderte Objekte merken
public void markNew(GraphicObject go) {
… // go als neues Objekt vermerken
}
Eventuell genaue Information
was sich geändert hat!
public void markDirty(GraphicObject go, … ) {
… // go geändert vermerken
}
- Änderungen in die DB schreiben (wird an geeigneter Stelle aufgerufen)
public void updateDB() {
String sql = "";
Statement stmt = null;
try {
stmt = conn.createStatement();
…
sql = createInsertStatment(go);
… // in DB schreiben
…
sql = createUpdateStatement(go, …);
…
} catch (SQLException e) {
…
}
JOHANNES KEPLER UNIVERSITY LINZ
}
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
16
Herunterladen