Datenbanken und Informationssysteme 2 SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 1 Ziele von Java Data Objects (JDO) • nur eine Schnittstelle zu verschiedenen Datenquellen anstatt mehrerer unterschiedlicher (JDBC, ODMG, DOM/SAX, ...) • nur noch eine Anfragesprache 'JDO QL' lernen und anwenden Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 2 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 1 Ziele von Java Data Objects (JDO) (fast) beliebige Java Objekte transparent persistent Java Quelltext bleibt unverändert JDO-Implementierung übernimmt Speicherung ( in DB, File System, XML-Dokument, … ) Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 3 Ziele von Java Data Objects (JDO) (fast) beliebige Java Objekte transparent persistent Java Quelltext bleibt unverändert JDO-Implementierung übernimmt Speicherung ( in DB, File System, XML-Dokument, … ) JavaApplikation JDOImplementierung RDBMS XML-DB CVS OODB Files ... Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 4 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 2 Zentrale Interfaces von JDO PersistenceManagerFactory erzeugt 1 verwaltet * Query- * 1 PersistenceManager erzeugt 0..1 * PersistenceCapable 1 unterstützt 1 Transaction Alle sind Interfaces Wie bei JDBC liefert der JDO-Implementierer seine Implementierung Treiber und Erweiterungen (Enhancement) Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 5 Interface PersistenceCapable verwaltet PersistenceManager Unterscheide: persistence capable Klassen ≠ 0..1 * PersistenceCapable persistence aware Klassen persistence capable Klassen implementieren interface PersistenceCapable Wie? Durch Deklaration und Byte-Code-Erweiterung durch Enhancer Transparente Persistenz für beliebige Java-Klassen ( außer Thread , Socket , Exception , über JNI implementierte Klassen) Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 6 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 3 PersistenceManagerFactory erzeugt PersistenceManager-Instanz PersistenceManagerFactory pmf = PersistenceManagerFactories.getFactory(); pmf.setConnectionURL(“FastObjects://LOCAL/my_base”); pmf.setConnectionUserName(“user1”); pmf.setConnectionPassword(“geheim”); PersistenceManager pm = pmf.getPersistenceManager( ); ... zuständig für - 'Pooling' von PM-Instanzen - JNDI-Lookup Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 7 PersistenceManager Mitarbeiter boss = new Mitarbeiter( “Reich” , 100000 ); Mitarbeiter worky = new Mitarbeiter( “Meier” , 40000 ); worky.setChef( boss ); // boss ist erreichbar Transaction trans = pm.currentTransaction(); try { trans.begin( ); pm.makePersistent( worky ); // macht Objekte persistent pm.deletePersistent( boss ); trans.commit( ); } catch(Exception e) { // löscht Objekt aus DB trans.rollback( ); } Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 8 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 4 JDO Enhancer Java-Byte-Code von persistence capable Klassen nachkompilieren Ł Transparente Persistenz Jeder JDO-Anbieter liefert eigenen Enhancer, z.B. Poet > javac *.java > ptj.bat -enhance system.jdo Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 9 JDO Metadaten XML-File Anbieter-unabhängig: persistente Klassen bekannt geben (z.B. bei Poet genügt dies für Mapping auf OODB) Implementierungs- (und Anbieter-) abhängig: Datenmapping ( z.B. auf File oder relationale DB ) Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 10 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 5 JDO QL und Filter Filter sind Boole’sche Java-Ausdrücke String filter = “ gehalt > 100000 ” ; Query query = pm.newQuery( Mitarbeiter.class , filter ); Rückgabetyp einer JDO-Query: java.util.Collection Collection mitarbeiter = query.execute( ); suche alle “überbezahlten” Mitarbeiter filter = “gehalt > chef.gehalt”; Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 11 JDO QL und Filter (2) Query query2 = pm.newQuery( Mitarbeiter.class ); query2.declareParameter(“int limit”); query2.setFilter( “ gehalt > limit ” ) ; ergebnis = query2.execute( new Integer( 100000 ) ) ; Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 12 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 6 Vorteile von JDO Portabilität , DB-Unabhängigkeit ( relational, OO, Filesystem, XML, … ) späterer Austausch des Datenbanksystems möglich keine Einarbeitung in unterschiedliche DBMS Keine unterschiedlichen Anfragesprachen ( SQL , OQL , XPath ) keine Einarbeitung in unterschiedliche DBMS – Schnittstellen ( JDBC , ODMG , DOM/SAX , … ) Hersteller-Kompetenzen für Ziel-DBMS nutzen (Performance) Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 13 Einschränkungen von JDO noch stark eingeschränkte Query-Sprache • Vergleichsoperatoren : == , != , < , > , <= , >= • Funktionen : startsWith( ) , endsWith( ) , contains ( ) , isEmpty ( ) JDO – wird kommerziell evtl. nicht weiter unterstützt Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS2004 – Folie JDO - 14 Internet-Technologie für E-Business Prof. Dr. Stefan Böttcher 7