java data objects jdo und implementierung in fastobjects
Download
Skip this Video
Download Presentation
Java Data Objects (JDO) und Implementierung in FastObjects

Loading in 2 Seconds...

play fullscreen
1 / 20

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


  • 75 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
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
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