Ein JDO-Objekt wird über den new-Operator
erzeugt.
Der Aufruf von Database.begin() öffnet eine
Castor-Transaktion.
Das neue Objekt wird über Database.create() für
Castor bekannt gemacht, und so mit in die Castor-Transaktion
aufgenommen. Castor legt das Objekt hierbei automatisch und
sofort in der aktuellen Session auf der Datenbank an. Das
Objekt wird nun als "persistent" in Bezug auf die
Castor-Transaktion bezeichnet.
Mit dem Aufruf von Database.commit() wird die Transaktion
abgeschlossen, und das Objekt ist nun für alle Sessions
auf der Datenbank zu sehen. Die verwendete JDBC-Session wird
hierbei ebenfalls bereits geschlossen.
Anschließend ist das JDO wieder "transient".
Der abschließende Database.close()-Aufruf gibt
lediglich noch den Speicher der Castor-Transaktion
frei.
JDO-Datenbankabfragen
über OQL:
Mit Ausführung einer OQL-Abfrage oder der Funktion
Database.load() werden die abgefragten Objekte als
"persistent" in die Castor-Transaktion aufgenommen.
Bei Abschluß der Transaktion über commit()
werden eventuelle Änderungen des JDOs in die Datenbank
übernommen.
Rollback:
Wenn anstatt von commit() die Funktion
Database.rollback() aufgerufen wird, werden
JDO-Änderungen nicht in die Datenbank übernommen,
sondern stattdessen der ursprüngliche Zustand wieder
hergestellt.
Am Ende der abgebrochenen Transaktion ist das JDO wieder
im Zustand "transient", und die geänderten Attribute
wurden wieder auf ihren ursprünglichen Wert
zurückgesetzt.
JDO-Datenbankabfragen über OQL im
"read only"-Modus:
Wird eine OQL-Abfrage im "read only"-Modus
ausgeführt, bleiben die zurückgegebenen Objekte
"transient".
Eventuelle Änderungen werden also bei Abschluß
der Transaktion über commit() nicht in die Datenbank
übertragen, egal ob diese über commit() oder
über rollback() beendet wird.
Löschen von
Objekten:
Der Aufruf von Database.remove() markiert ein
persistentes JDO zum Löschen.
Bei Abschluß der Transaktion über commit()
wird das Objekt aus der Datenbank gelöscht.
Anschließend existiert das JDO weiter als
"transient" im Java-Heap.
Update
innerhalb einer "long transaction":
In einer sogenannten "langen Transaktion" wird ein
bereits auf der Datenbank existierendes Java-Objekt über
den Aufruf von Database.update() in eine offene
Castor-Transaktion aufgenommen. Das ursprüngliche,
transiente JDO stammt typischerweise aus einer vorangehenden
Transaktion. Die "lange Transaktion" verbindet also zwei
voneinander unabhängige Castor-Transaktionen über
die Verwendung des selben Java-Objekts.
Das Objekt wird nun als "persistent" in Bezug auf die
zweite Transaktion bezeichnet. Das heißt,
Änderungen innerhalb des Objekts werden mit
Abschluß der Transaktion über commit() in die
Datenbank übernommen.