Java Data Objects

Werbung
Java Data Objects
SIG Development
Java Persistenz-Frameworks
Frank Schwarz
Professional Services
Signsoft GmbH
Leipziger Str. 118
01127 Dresden
+49 (0)351 894 53-0
¬ +49 (0)351 894 53-29
@ [email protected]
Þ www.signsoft.de
1
Übersicht
„
Vorstellung des JDO-Gedankens
„ Merkmale und Ziele von JDO
„ Konzepte des JDO-APIs
„ Der JDO Build-Prozess
„ Einsatzmöglichkeiten für JDO
„
Demonstrationsbeispiel
„ Mappingbeschreibungen
„ Primärschlüsselklassen
„ JDOQL-Query-Möglichkeiten
„
Ausblick auf JDO 2.0
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
2
Standardisierungshistorie
„
JDO ist hervorgegangen aus dem Java Community
Process als Java Specification Request JSR 12.
„
Mai 1999 JDO call for experts
„
„
April 2002 1.0 final release
Mai 2003 JDO 1.0.1 maintanance release
„
Fehlerkorrekturen und Klarstellungen
„ derzeit gültige Version
„
Aug 2005 JDO 2.0 proposed final draft (JSR 243)
„
Standardisierung einer Vielzahl von herstellerspezifischen
Erweiterungen
„ Konvergenz mit EJB 3.0 Persistence (JSR 220)
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
3
Merkmale und Ziele von JDO
JDBC
RDBMS
JDO Impl.
Vendor 1
JAXP
Anwendung
mit
Datenobjekten
JDO Impl.
Vendor 1
XMLFile
JDO Impl.
Vendor X
XYZ
Ziel: transparente Persistenz für Java-Objekte
JDO API
„
OODBMS
XMLDB
Anwender
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
Persistenzprovider
?
Datenspeicher
4
Merkmale und Ziele von JDO
„
„
„
„
„
Minimum zusätzlicher Unannehmlichkeiten für den
Entwickler (transparent persistence)
Komfortables Mapping von Java-Objekten und
Objektgraphen auf beliebige Datenspeicher ohne CodeÄnderungen
Persistenz durch Erreichbarkeit (persistence by
reachability) mit "intelligenten" Vorgabewerten
Transaktionskontrolle auf Objektebene
Datenbank-unabhängige Abfragemöglichkeiten mit
Hilfe von Java-eigenen Konzepten (Klassen,
Attribute/Assoziationen, Vererbungsbeziehungen,
Operatoren)
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
Mängel bestehender Alternativen zu JDO
„ Lösungen auf der Basis von reinem SQL leiden unter
entscheidenden Nachteilen:
„
„
„
„
„
„
Nicht-transparente Code-Änderungen bei Änderung des Objektmodells
Eigenentwicklungen notwendig für Caching, Objekt-Laden und ObjektSpeichern (Æ Performance?)
Komplexe Implementierungen der Transaktionskontrolle
Relationen-zentrierte Sicht bei Abfragen
Schwierigkeiten, Vererbungshierarchien und Interfaces zu berücksichtigen
Hohe Datenbank-Anhängigkeit, mangelnde Portabilität
„ Lösungen auf der Basis früherer Versionen von Enterprise Java
Beans waren ebenfalls problematisch:
„
Performance-Probleme mit feingliedrigen Entity Beans
„ Unmöglichkeit, auf normale Vererbungsmechanismen zurückzugreifen
„ Schwierigkeit, Beziehungen zwischen Objekten zu erfassen
„ Einschränkungen in der Suchen nach Datenobjekten
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
6
JDO Konzepte
.makePersistent(Object pc)
.getObjectById(…)
.deletePersistentAll(Coll c)
Persistence
Manager
Factory
.getPersistenceManager()
Persistence
Manager
Persistence
Capable
Object
JDOHelper
.getPersistenceManagerFactory
(Properties prop)
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
Transaction
.begin()
.commit()
.rollback()
Query
.execute()
JDO Konzepte I
„ javax.jdo.JDOHelper
„
Startkonfiguration der PersistenceManagerFactory
„ Liefert PersistenceManager-Instanzen
„ Stellt diverse Hilfs- und Abfragefunktionen zur Verfügung (z.B.
isDirty(Object pc), …)
„ javax.jdo.PersistenceManagerFactory
„
Zentrale Konfigurationsstelle der JDO-Implementierung
„ Liefert Instanzen des PersistenceManagers
„ Pooling von Datenbankverbindungen und PersistenceManagers
„ javax.jdo.PersistenceManager
„
Operationen auf persistierbaren Objekten (makePersistent, …)
„ Transaction-Handling
„ Cache-Management
„ Query and JDO Identitäts-Management
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
8
JDO Konzepte II
„
javax.jdo.Transaction
„ Transaktionskontrolle: begin / commit / rollback / isActive
„
javax.jdo.Query
„ Ausführung von JDOQL Abfragen
„ Abfragen und Filter können mit Hilfe von Java Sprachmitteln
definiert werden: Java-Datentypen, Klassen, Klassenattribute
„
Persistierbare Objekte (persistence capable objects)
„ besitzen eine eindeutige Objektidentität unter Kontrolle des
PersistenceManagers (application, datastore oder nondurable)
„ unterliegen dem JDO Lebenszyklus
„ können die Schnittstelle InstanceCallbacks implementieren
„
Persistenz-klare Objekte (persistence aware objects)
„ Objekte, die im Enhancement-Prozess geändert werden müssen,
ohne selbst persistierbar zu sein
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
9
Einsatzmöglichkeiten für JDO
„
Stand-alone (J2SE)
„ Persistierung von einzelnen Objekten bis hin zu ganzen
Objektgraphen Æ Persistence by Reachability
„ Einfache Austauschbarkeit der JDO-Implementierung
„
Managed-Environment (J2EE)
„ JDO als Implementierung von Container Managed Persistence
„ Implementierung von Bean Managed Persistence
„
EntityBeans dienen als Wrapper für JDO-Klassen.
„ Nutzung von JDO innerhalb von Sessions / SessionBeans zur
Bereitstellung der benötigten Daten
„
EntityBeans sind bei diesem Ansatz entbehrlich.
„ Die JDO-Implementierung wird typischerweise über einen JCA-
Adapter eingebunden, so dass der Application Server das
Transaktionsmanagement übernehmen kann.
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
10
JDO Build-Prozess
normaler Java Build-Prozess (erster Schritt)
Java
Source
Code
Java
Compiler
Java Byte
Code
Person.class
Person.java
JDO Enhancement (zweiter Schritt)
JDO
Mapping
JDO
Enhancer
Java
Enhanced
Byte Code
Person.class
Person.jdo
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
11
Beispiel – Diskursbereich als KSD
Address
# street: String
# city: String
1
BusinessPartner
# name: String
Customer
# creditLimit: double
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
*
Invoice
# number: int
# total: double
12
Java-Klassen des Diskursbereiches
package bo;
public class BusinessPartner {
private String name;
private Address address;
public void setName(String name) {
this.name = name;
}
public void setAddress(Address address) {
this.address = address;
}
// setter methods
// …
package bo;
public class Customer
extends BusinessPartner {
private double creditLimit;
private List invoices = new ArrayList();
public void setInvoices(List invoices) {
this.invoices = invoices;
}
public List getInvoices() {
return this. invoices;
}
// …
BusinessPartner.java
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
Customer.java
13
Primärschlüsselklassen
package bo;
public class Invoice {
private int number;
private double total;
private Customer customer;
package bo;
public class InvoiceNumber
implements Serializable {
public int number;
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
// other methods
// …
Invoice.java
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
public InvoiceNumber () {
}
public InvoiceNumber (String number) {
this.number = Integer.parseInt(number);
}
public String toString() {
return Integer.toString(number);
}
// Überschreiben von equals(Object o)
// und hashCode()
InvoiceNumber.java
14
Mapping-Beschreibung I
<?xml version="1.0" enc…?>
<!DOCTYPE jdo SYSTEM "jdo.dtd">
<jdo>
<package name="bo">
<class name="Address" />
</package></jdo>
<?xml version="1.0" enc…?>
<!DOCTYPE jdo SYSTEM "jdo.dtd">
<jdo>
<package name="bo">
<class name="BusinessPartner" />
</package></jdo>
Address.jdo
BusinessPartner.jdo
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jdo SYSTEM "jdo.dtd">
<jdo>
<package name="bo">
<class name="Invoice" identity-type="application"
objectid-class="bo.InvoiceNumber">
<field name="number" primary-key="true" />
</class></package></jdo>
Invoice.jdo
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
15
Mapping-Beschreibung II
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jdo SYSTEM "jdo.dtd">
<jdo>
<package name="bo">
<class name="Customer"
persistence-capable-superclass="bo.BusinessPartner">
<field name="invoices">
<collection element-type="bo.Invoice"/>
</field>
</class>
</package>
</jdo>
Customer.jdo
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
16
Initialisierung der
PersistenceManagerFactory
„
Möglichkeiten der Initialisierung
„ Setter-Methoden an der PersistenceManagerFactory
„
pmf.setConnectionDriverName();
„ pmf.setConnectionURL()
„ …
„ Laden einer Properties-Datei:
InputStream propertyStream =
this.getClass().getResourceAsStream("jdo.properties");
Properties jdoproperties = new Properties();
jdoproperties.load(propertyStream);
pmf = JDOHelper.getPersistenceManagerFactory(jdoproperties);
„ Über externe Ressource (herstellerspezifisch bzw. JDO2)
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
17
Persistierung von Objekten
„ PersistenceManager pm = pmf.getPersistenceManager();
pm.currentTransaction().begin();
Customer c = new Customer();
c.setName("Clara Stein");
c.setCreditLimit(1000);
pm.makePersistent(c);
Transaktion
Address a = new Address();
a.setStreet("Lange Gasse 27");
a.setCity("Dresden");
c.setAddress(a);
pm.currentTransaction().commit();
pm.close();
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
18
Abfrage von Objekten
„ Abfrage über Objekt-ID
Invoice inv = (Invoice)pm.getObjectById(new InvoiceNumber("1234"));
„ Iteration über dem Extent einer Klasse
Iterator i = pm.getExtent(Address.class, true);
while (i.hasNext()) {
Address a = (Address)i.next();
}
„ Abfrage mit Filter (JDOQL)
Query q = pm.newQuery(Customer.class);
q.setFilter ("address.city==\"Dresden\" && (names.contains(name)) &&
(invoices.contains(i) & i.total > 1000)");
List names = Arrays.asList(new String[] {"Mayer", "Maier", "Meier"});
q.declareParameters("Collection names");
q.declareVariables("Invoice i");
Collection c = (Collection)q.execute(names);
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
19
Ausblick auf JDO 2
„
Anwendungen für JDO 1 können ohne Änderungen auf
JDO 2 umgestellt werden
„ JDO 2 greift viele herstellerspezifische Erweiterungen
auf und führt diese dem Standard zu
„ explizite Mapping-Angaben zu Tabellen- und Spaltennamen
„ explizite Mapping-Strategie für Objekte in Vererbungshierarchien
„ Multi-Tabellen-Objekte
„
Verbesserung innerhalb von Mehrschicht-Architekturen
„ Attach / Detach-Mechanismen zur Ein- und Auskopplung von
persistierten Objekten Æ Weitergabe an andere Schichten
„
Erweiterungen der Abfragesprache
„ Projektionen, Aggregationen, Stringausdrücke
„
2nd Level Cache Management, …
Frank Schwarz: Java Data Objects. DOAG-Tag 2005 (Mannheim)
20
Herunterladen