Zwischenbericht Großer Beleg "Java Data Objects" Martin Uhlig Inhalt Persistenz in Java Einführung in Java Data Objects Eine Anwendung mit JDO Ausblick Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 2 Möglichkeiten für Persistenz in Java Serialisierung Java Database Connectivity (JDBC) Enterprise JavaBeans (Entity Beans) Persistenz-Frameworks Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 3 Java Data Objects Im Juni 1999 als Java Specification Request 12 in den Java Community Process aufgenommen Mai 2001 Proposed Final Draft Ziele: ◆Einheitliche API für Persistenz-Frameworks ◆Austauschbare JDO-Implementierungen ◆Standardisierte Einbindung der Implementierungen in Application Server Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 4 Klassen, Interfaces und Packages PersistenceCapable PersistenceManager PersistenceManagerFactory Transaction Query Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 5 JDO Beispiel Nicht-persistente Klasse Persistente Klasse public class User { private String name = null; public class User { private String name = null; public void setName(String n) { name = n; } public void setName(String n) { name = n; } public String getName() { return name; } public String getName() { return name; } } Martin Uhlig 11/2001 } Zwischenbericht Großer Beleg Java Data Objects 6 Enhancement Enhancer wird mit der JDO-Implementierung geliefert Wandelt Class-Dateien um Informationen dazu stehen in einer XML-Datei Beispiel Java Quellcode JDO Persistenzdefinition DB Schema Martin Uhlig 11/2001 Standard Java Compiler Zwischenbericht Großer Beleg Java Data Objects Läuft in JVM Class-Dateien JDO Enhancer <?xml version="1.0"?> <jdo> <package name="jdobsp"> <class name="User" /> </package> </jdo> Enhanced Class-Dateien 7 Anwendung PersistenceManager PersistenceManagerFactory factory = new JDBCPersistenceManagerFactory(); // allow reads outside of transactions & optimistic locking; // this cuts down on database resources factory.setNontransactionalRead(true); factory.setRetainValues(true); factory.setOptimistic(true); PersistenceManager pm = factory.getPersistenceManager(); Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 8 Anwendung (2) Objekt persistent machen User user = new User(); user.setName("max"); Transaction transaction = pm.currentTransaction(); transaction.begin(); pm.makePersistent(user); transaction.commit(); Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 9 Navigation Assoziation zwischen zwei Klassen Department Employee public class Department { private Collection employees; ... } public class Employee { private Department dept; ... } Navigation Department department = employee.getDept(); Iterator i = department.getEmployees().iterator(); Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 10 Objekte finden Direkt Object getObjectById(Object oid_or_pc, boolean validate); Object getObjectId(Object pc); Gesamte Ausprägung Collection getExtent(Class persistenceCapableClass, boolean subclasses) Suche Collection extent = pm.getExtent(Employee.class, false); Query q = pm.newQuery(Employee.class, // Klasse extent, // Kandidaten "income > 100000"); // Filter Collection results = q.execute(); Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 11 Scalable Learning System Pattern: ◆Business ◆Session ◆Value Martin Uhlig 11/2001 Delegate Facade Object Zwischenbericht Großer Beleg Java Data Objects 12 Ausblick Was kann man vergleichen? ◆Anwendbarkeit ◆Flexibilität (Navigation, Entwicklungsaufwand, ...) (Suche, Transaktionen, ...) ◆Performance ◆Speichernutzung ◆Threading ◆... Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 13 Links http://jcp.org/jsr/detail/12.jsp www.theserverside.com www.techtrader.com www.prismtechnologies.com Martin Uhlig 11/2001 Zwischenbericht Großer Beleg Java Data Objects 14