| home | suche | kontakt/johner | institut | hinweise studierende | tech-docs | blog | mindmailer |
![]() |
JDO
Im Gegensatz zu JDBC erlaubt JDO die Persistierung von Java-Objekten, ohne das Schreiben von SQL-Statements. Dies kann beispielsweise wie folgt aussehen:
Fragebogen fragebogen = new Fragebogen();
...
PersistenceManager pm = createPersistenceManager();
Transaction tx = pm.currentTransaction();
tx.begin();
pm.makePersistent(frageBogen);
tx.commit();
JDO selbst definiert ein Interface zur Objektpersistierung. Das Interface legt nicht fest, wie die Daten gespeichert werden, d.h. es gibt keine Festlegung auf eine (relationale) Datenbank.
Abfragen und Löschen von Objekten
Es gibt mehrere Möglichkeiten, um nach Objekten zu suchen:
1. Möglichkeit: Bekannte Id des Objekts
Fragenbogen fb = (Fragebogen)
persistenceManager.getObjectbyId(oid, false);
2. Möglichkeit: Alle Objecte eine Typs (einer Klasse)
Extent extent = persistentManager.getExtent(Fragebogen.class, true);
Iterator iterator = extent.iterator();
3. Möglichkeit: Einfache Query
Query query = persistenceManager.newQuery(Fragebogen.class);
query.setFilter("vorlesung == \"SOTE\"");
Collection collection = (Collection)query.execute();
4. Möglichkeit: Prepared Statement
Query query = persistenceManager.newQuery(Fragebogen.class);
query.declareParameters("String lect");
query.setFilter("vorlesung == lect");
Collection collection = (Collection)query.execute("SOTE");
Auch das Löschen von Objekten funktioniert wie erwartet:
persistenceManger.deletePersistent(frageBogen);
JPOX
Eine der Implementierung von JDO ist das Open-Source-Produkt JPOX, an dem sehr engagierte Entwickler arbeiten. JPOX konzentiert sich auf die Speicherung in einer Datenbank. Auf die Besonderheit, dass JPOX1.1 bereits die Spezifikation JDO2.0 unterstützt, sei hingewiesen. Damit können auch "ge-key-te" 1:n-Beziehungen persistiert werden.
Schlussendlich bedient sich JPOX selbst wieder JDBC, in dem es den bereits kompilierten Code, durch Erweiterungen nachträglich ergänzt. JPOX nennt dies das Bytecode-Enhancement. Wenn man das Eclipse-Plugin von JPOX nutzt, wird dieses Enhancement bei jedem Speichern automatisch durchgeführt. Allerdings muss dies für das Projekt auch aktiviert sein.
Wie die Klasse in der Datenbank zu speichern ist, legen ein oder mehrere XML-Dateien fest (siehe O/R-Mapping).
Beispiel
Sie finden hier ein Beispiel, mit dem die wichtigsten Aspekte von JDO nachvollziehbar sind:
- Änderungen am Java-Code, um Objekte mit JDO zu speichern
- XML Konfigurationsdatei
- Speichern von 1:1 und 1:n Beziehungen
- PersistenceManager, mit dem festgelegt wird, welche JDO Implementierung genutzt wird - bei uns JPOX
JPOX sollte in einer Version >= 1.1 beta 3 genutzt werden. In den älteren Versionen fehlt beispielsweise die Unterstützung für "ge-key-te" Collections.


