java data objects jdo und implementierung in fastobjects n.
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


Download Now 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)