home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  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.