Java data objects jdo und implementierung in fastobjects
Download
1 / 20

Java Data Objects (JDO) und Implementierung in FastObjects - PowerPoint PPT Presentation


  • 74 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Java Data Objects (JDO) und Implementierung in FastObjects' - lenka


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Java data objects jdo und implementierung in fastobjects

Java Data Objects (JDO) und Implementierung in FastObjects


Inhalt
Inhalt

  • Anliegen von JDO

  • JDO aus Anwendersicht

  • JDO intern

  • offene Punkte


Anliegen und ursprung
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


Ursprung
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 MicrosystemsPOET

    (und vielen anderen)

  • akzeptiert als Standard Ende März 2002


Jdo vs jdbc
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


Jdo aus anwendersicht applikationsklassen
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


Enhancen
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


Enhancer 2
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


Enhancement illustriert

*.class

*.jdo

*.class

Enhancement illustriert

ptj


Jdo aus anwendersicht datenbanklogik
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


Javax jdo persistencemanager
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!


Javax jdo persistencemanager 2
javax.jdo.PersistenceManager (2)

JVM 1

FastObjects Database

Transient object

JVM 2

PersistenceManagers


Persistenz
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


Transaktionen
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


Beispiel speichern eines objektes
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();}

}

}


Extents
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()


Jdoql
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


Jdo intern zust nde von objekten
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


Hollow objekte illustriert
Hollow Objekte illustriert

Objekt A ist hollow

A

Nach Feldzugriff ist

Objekt A nicht mehr

hollow

A


Offene punkte
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)


ad