Objekte dauerhaft speichern
In vielen Systemen ist es notwendig, dass Objekte unabhängig von der Laufzeit des Programms dauerhaft (persistent) gespeichert werden. Daraus ergeben sich, unabhängig von der Art der Speicherung, zusätzliche Anforderungen und Möglichkeiten.
- Objekte sind außerhalb des Programmspeichers → Explizites Speichern und Löschen notwendig
- Unabhängige Existenz der Objekte
- im Programm-Speicher
- in der Datenbank
- eindeutige Identifikation der Objekte notwendig (ObjectId)
- Objekte zwischen Datenbank und Programm-Speicher bewegen (CRUD)
- Unabhängige Existenz der Objekte
- Viele Programme können gleichzeitig auf den Objektspeicher zugreifen → Konkurrierender Zugriff auf persistente Objekte
- Ergibt zusätzliche Anforderungen
- Konsistenz
- Performanz
- Sicherheit
- …
- Implementierung von Transaktionen und Locking
- Atomare Lese/Schreiboperationen sicherstellen → Transaktionen sichern die Konsistenz (ACID)
- Konkurrierende Zugriffe verhindern → Locking reserviert exklusiven Zugriff auf Objekte
- Ergibt zusätzliche Anforderungen
- Persistente Speicherung in Datenbanken → mächtige Suchfunktionen stehen zur Verfügung
- Queries → Suchen nach Attribut-Werten, nicht nur nach der ObjectId
- Abfragesprachen für objektorientierte Datenbanken (OODBMS) und objektrelationale (ORM) Systeme
- OQL in Anlehnung an SQL für OODBMS
- JPQL für die Java Persistenz API (JPA)
- Query by Example
- JPA Criteria Query → objektorientierte Konstruktion von Queries