java data objects (jdo) und implementierung in fastobjects

20
Java Data Objects (JDO) und Implementierung in FastObjects

Upload: lenka

Post on 02-Feb-2016

28 views

Category:

Documents


0 download

DESCRIPTION

Java Data Objects (JDO) und Implementierung in FastObjects. Inhalt. Anliegen von JDO JDO aus Anwendersicht JDO intern offene Punkte. Anliegen und Ursprung. Transparente Persistenz für Java-Objekte keine Codeänderungen für Applikationsklassen implizites Speichern und Laden - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java Data Objects (JDO)  und  Implementierung in FastObjects

Java Data Objects (JDO) und

Implementierung in FastObjects

Page 2: Java Data Objects (JDO)  und  Implementierung in FastObjects

2

Inhalt

• Anliegen von JDO

• JDO aus Anwendersicht

• JDO intern

• offene Punkte

Page 3: Java Data Objects (JDO)  und  Implementierung in FastObjects

3

Anliegen und Ursprung

• Transparente Persistenz für Java-Objekte•keine Codeänderungen für Applikationsklassen

•implizites Speichern und Laden

•implizite Concurrency Control

• Spezifikation für Java, nicht andere Sprachen•keine OODB-Spezifikation, auch auf RDBMS realisierbar

• Java-Binding Spezifikation der ODMG als Arbeitsgrundlage

Page 4: Java Data Objects (JDO)  und  Implementierung in FastObjects

4

Ursprung

• Geschaffen unter dem Java Community Process von Sun

• Leiter der Spezifikation:

•Craig Russell Sun Microsystems, Inc.

• Expertengruppe, Mitglieder von:

IBM Informix Software Ericsson Inc.

Oracle Rational Software SAP AG

Software AG Sun Microsystems POET

(und vielen anderen)

• akzeptiert als Standard Ende März 2002

Page 5: Java Data Objects (JDO)  und  Implementierung in FastObjects

5

JDO vs. JDBC

• JDBC•Mapping des OO-Modells auf ein relationales Modell

•Code notwendig für:•Transformation eines Objektes in Tupel (bzw. Menge von Tupeln) und

Speichern mit SQL-Anweisungen

•SQL-Anweisungen zum Laden von Tupeln und deren Transformation in ein Java-Objekt

•explizites Laden und Speichern der Objekte

•Zuordnung bereits geladener Objekte zu DB-Objekten, d.h. man muß selbst Caching implementieren

• JDO•alles automatisch und transparent

•ersetzt nicht JDBC, kann mit diesem realisiert werden

Page 6: Java Data Objects (JDO)  und  Implementierung in FastObjects

6

JDO aus Anwendersicht - Applikationsklassen

• Anwender legt fest, welche Klassen persistenzfähig sind•d.h. Objekte dieser Klassen können gespeichert werden

• Applikationsklassen werden wie gewohnt entworfen, Unterstützung für alle wesentlichen Elementtypen•primitive Typen, Referenzen auf andere persistente Objekte, viele Collection-Klassen usw.

• Metainformationen (u.a. welche Klassen sind persistenzfähig) wird in speziellen XML-Dateien beschrieben•zur Laufzeit und während Entwicklung benötigt

•Restriktionen an Benennung und Plazierung dieser Dateien

Page 7: Java Data Objects (JDO)  und  Implementierung in FastObjects

7

Enhancen

• Persistenzfähige Klassen müssen javax.jdo.PersistenceCapable implementieren•nicht beliebig, sondern kompatibel zur Referenzimplementation

• Forderung nach Transparenz: diese Implementierung sollte automatisch erzeugt werden

• oftmals mit einem Post-Prozessor, der direkt ByteCode in die .class-Dateien einfügt und/oder abändert•FastObjects Enhancer heißt ptj

Page 8: Java Data Objects (JDO)  und  Implementierung in FastObjects

8

Enhancer (2)

• Methoden zum Laden und Speichern dieser Objekte werden eingefügt•werden intern von der JDO Implementation aufgerufen

• für alle zu speichernden Felder werden spezielle Zugriffs-Methoden (Getter und Setter) eingeführt•protokollieren den internen Zustand eines Objektes (clean, dirty, …)

•jeder direkte Zugriff auf solche Felder wird durch Methodenaufruf ersetzt => auch nicht-persistente Klassen, die direkte Feldzugriffe bei persistenten Instanzen machen, müssen enhanced werden

Page 9: Java Data Objects (JDO)  und  Implementierung in FastObjects

9

Enhancement illustriert

ptj*.jdo

*.class

*.class

Page 10: Java Data Objects (JDO)  und  Implementierung in FastObjects

10

JDO aus Anwendersicht - Datenbanklogik

• Spezifikation definiert eine Menge von Interfaces•PersistenceManager, Transaction, Extent, Query, …

• Implementationen dieser Interfaces durch JDO Implementierer (z.B. Poet)•Anwender benutzt nur die Interfaces!

• Zentrales Interface: javax.jdo.PersistenceManager

• Persistente Java Objekte erhalten eine eindeutige ObjektId

Page 11: Java Data Objects (JDO)  und  Implementierung in FastObjects

11

javax.jdo.PersistenceManager

• Jeder Thread benutzt normalerweise seine eigene PersistenceManager-Instanz

• Jedes persistente Java-Objekt im Speicher gehört zu genau einem PersistenceManager

• Jedes persistente Java-Objekt korrespondiert zu genau einem Datenbank-Objekt, zwei persistente Java-Objekte des selben PersistenceManagers aber immer zu verschiedenen!

Page 12: Java Data Objects (JDO)  und  Implementierung in FastObjects

12

javax.jdo.PersistenceManager (2)

JVM 1

JVM 2

FastObjects Database

PersistenceManagers

Transient object

Page 13: Java Data Objects (JDO)  und  Implementierung in FastObjects

13

Persistenz

• Objekte, die mit new angelegt wurden, sind transient

• Objekte, die aus der Datenbank geholt wurden, sind persistent•geholt mittels Query, Iterieren über Extent, Referenz von einem anderen persistenten Objekt

• PersistenceManager.makePersistent()•transientes Objekt wird persistent

•Persistenz durch Erreichbarkeit

• PersistenceManager.deletePersistent()•löscht Objekt aus der Datenbank

Page 14: Java Data Objects (JDO)  und  Implementierung in FastObjects

14

Transaktionen

• Pro PersistenceManager maximal eine Transaktion offen•geschachtelte Transaktionen optional, von FastObjects unterstützt

•Nacheinander i.d.R. mehrere Transaktionen pro PersistenceManager

•Objektreferenzen aus alten Transaktionen bleiben gültig

•PersistenceManager.currentTransaction();

• Interface javax.jdo.Transaction•Transaction.begin()

•Transaction.commit()

•Transaction.rollback()

• Transaktionen erfüllen ACID-Eigenschaften

Page 15: Java Data Objects (JDO)  und  Implementierung in FastObjects

15

Beispiel: Speichern eines Objektes

import javax.jdo.*;import com.poet.jdo.*;

public class Main {

public static void main(String[] args) { try{ PersistenceManagerFactory pmf=

PersistenceManagerFactories.getFactory(); pmf.setConnectionURL("FastObjects://LOCAL/myBase"); PersistenceManager pm=pmf.getPersistenceManager(); pm.currentTransaction().begin(); pm.makePersistent(new Person("Donald Duck")); pm.currentTransaction().commit(); pm.close(); }catch(JDOUserException e){e.printStackTrace();} }}

Page 16: Java Data Objects (JDO)  und  Implementierung in FastObjects

16

Extents

• Enthalten alle Objekte einer Klasse (d.h. auch Objekte von Unterklassen)

• Werden automatisch vom DBMS gepflegt

• Extent PersistenceManager.getExtent(Class, boolean)

• Iterator Extent.iterator()

Page 17: Java Data Objects (JDO)  und  Implementierung in FastObjects

17

JDOQL

• Anfragesprache, orientiert an Java-Syntax und Semantik

• Filterausdruck ähnelt boolschem Java-Ausdruck•einige Methodenaufrufe erlaubt (String.startsWith(), …)

•wird gegen jedes Objekt aus der Kandidatenmenge (meist ein Extent) geprüft

•nicht so mächtig wie ODMG OQL

• Deklarationen von Imports, Variablen und Parametern•analog Java-Syntax

•Parameter werden bei Ausführung auf Werte gesetzt

•Variablen sind mit Existenzquantor und zusätzlich an eine Grundmenge gebunden

Page 18: Java Data Objects (JDO)  und  Implementierung in FastObjects

18

JDO intern - Zustände von Objekten

• Jedes Objekt im Speicher hat einen Zustand•transient, persistent-clean, persistent-dirty, hollow, …

• Zustandsübergänge entweder explizit (makePersistent()) oder implizit (Lese-/Schreibe-Zugriff)•exakte Definition in der JDO Spezifikation

• Hollow-Objekte sind praktisch hohl, ermöglichen das Laden von Objekten aus der DB erst bei Bedarf

Page 19: Java Data Objects (JDO)  und  Implementierung in FastObjects

19

Hollow Objekte illustriert

Objekt A ist hollow

Nach Feldzugriff ist

Objekt A nicht mehr

hollowA

A

Page 20: Java Data Objects (JDO)  und  Implementierung in FastObjects

20

Offene Punkte

• BLOB/CLOB Unterstützung, geschachtelte Transaktionen•mit FastObjects schon jetzt möglich

• verschiedene Erweiterungen zu JDOQL

• Managed Relationships

• Prefetch API•bei FastObjects jetzt schon AccessPatterns verwendbar

• Trigger•bei FastObjects jetzt schon Watch & Notify

• Enhancer Invocation API

• Locking & Isolation Level

• Nonstatic inner classes

• Graph Traversal (Netwalker)