Perzisztencia-megoldások Java Technológiával Molnár István, Simon Géza
A szerzők Java 0.9 óta (1995) Java/J2EE tervezők oktatók Sun & Oracle sun.hu
Útvonalterv Felülnézet motiváció elvek, fogalmak módszerek (objektum adatbázis, memória adatbázis, xml adatbázis,...) Alulnézet specifikációk, szabványok (jdo, prevalence,...) termékek (Kodo, XML:DB,...) Összefoglalás és a jövő
Perzisztencia? mi az? mire való? elvi fajtái gyakorlati módszerek konkrét termékek
Impedance mismatch :obj ?
Felülnézet Az adatokat meg kell őrizni / át kell menteni –leállás - újraindítás között –elosztott rendszer, cluster elemei között –HA rendszerben eszközcserék között Object-Relational Mapping
Absztrakt perzisztencia Perzisztencia Hosszú távú perzisztencia –ortogonális –transzparens
Technológiai irányok Amit lehet, generáljunk (metaadatokból, leíróból,...) –kódgenerálás –sémagenerálás „Impedanciaillesztés” –Object - relational –Relational - object
JDBC :obj
DAO :DAO
JDO :obj :persistenceManager
Entity EJB application server :obj
A memória az adatbázis Memória - olcsó Memória - gyors Megoldandók... biztonság, stabilitás, garaciák :obj
XML adatbázis text1 child of C another child of C moreText
XML adatbázis text1 child of C another child of C moreText
Program kód vagy lekérdezés Kód –API-hívások –saját protokoll Lekérdező nyelv (és módosító nyelv) –létező (SQL, Xpath,...) –új nyelv (EJBQL, JDOQL, OQL...)
Alulnézet Specifikációk, szabványok, majdnem szabványok Termékek –API-k, library-k, csomagok –fejlesztést segítő eszközök –futtatókörnyezetek
JDO Domain objects - programozó feladata Tárolásuk - persistence manager –tranzakcionálisan Transzparens perzisztencia (de nem ortogonális) –látszólag minden objektum a JVM memóriájában
JDO PersistenceManager pm =... //factory Transaction t =... t.begin(); pm.makePersistent(appObj1); t.commit(); pm.close();
JDO életciklus - állapotok –transient,..., persistent new, persistent dirty,... persistent deleted,... persistent nontransactional,... tranzakciók - callback szinkronizáció –jdoPostLoad(), jdoPreStore(), jdoPreDelete(),...
JDOQL (és nincs jdoDML!)... query.declareImports("import Project"); query.declareVariables("Project proj"); query.declareParameters( "String state, String deptName, int sal"); query.setOrdering( "department.deptid ascending, salary descending"); Collection result = (Collection)query.execute(...
JDO implementációk Kodo Sun Reference Implementation Tri-active JDO (sourceforge.net)...
CMP EJB Osztályok (domain object) elkészítése 1 osztály, 2 interface Bean implementation osztály –Entity EJB: adatbázis műveleteket az AS hívja –CMP Entity EJB: abstract : DB műveleteket az AS írja
CMP EJB Perzisztens mezők kijelölése: deployment descriptor(ok) - XML Lekérdezés: EJBQL SELECT OBJECT(d) FROM Document d WHERE d.regNo = ?1 Mezők összerendelése Típusok (DB típus - java osztály) egyeztetése
JDO vagy CMP EJB? CMP –appserver –deployment descr –metódus szintű tranzakc. –EJBQL (~sql) –remote invocation –kódgenerálás JDO –appserver, web server 1 réteg, 2 réteg,... –metadata –öröklődés, polimorfizmus –tranzakc. szinkronizáció –JDOQL (~java) –bytecode enhancement
Prevalence (memória a DB) –Minden a memóriában –Időnként snapshotok –Serializable Command objektumok –RDBMS nyelven: „~redo log” determinisztikus üzleti objektumok replika rendszer - konzisztens snapshot hibatűrés is
Prevalence (memória a DB)
–tranzakciók pedig nincsenek persze nem is kell: tetszőlegesen bonyolult Commandok –időzítés, timestamp,... külső óra: Commandokat küld –implementáció: pl. Prevayler (sourceforge.net)
XML:DB (xml adatbázis) „Ha nincs XML adat, nem kell XML adatbázis!” Fogalmak: –Document –Document collection –Query Engine Xpath (w3c) –Indexek
XML:DB (xml adatbázis) Adatmódosítás –kiolvasás - módosítás - beszúrás Xupdate –szerverre ruházza ezt a feladatot XML:DB API (implementációtól független!) XMLObjects (szerver funkc. bővítéshez)
XML:DB (xml adatbázis) Példa XPath /db/my-collection/my-child- collection/my-document URL formában (távoli szerver) xindice://myhost.domain.com:4080/db/my- collection/my-child-collection/my- document
ODMG Nyelv-független –C++, Smalltalk, Java,... –Objektum szinten közös perzisztencia –OQL lekérdezőnyelv (SQL92 alapú)
Konklúzió Nincs egyértelmű győztes –és még rengeteg további megoldás létezik (Hibernate, Castor, Torque,...) Választás – jó architect feladata Továbblépés szabványok implementációk
További források általában konferencia: jaoo.dk jdo
További források jdo vs. ejb jsp?thread_id=771 prevalence ibm.com/developerworks/web/library/ wa-objprev/index.html
Kérdések ???????
Köszönjük a figyelmet! stf2003/ istvan.molnar