Download - Java Data Objects

Transcript
Page 1: Java Data Objects

Java Data Objects

Page 2: Java Data Objects

Słownik

• Persystencja• Transakcja• RDBMS• ODBMS

Page 3: Java Data Objects

JDO to standard

• Producenci (vendors) dostarczają implementacji standardu– JPOX (RDBMS)– Orient (ODBMS)– inteliBO (RDBMS)– ObjectDB

Page 4: Java Data Objects

Dlaczego JDO?

• Można zmienić silnik bazy danych a nawet typ bazy danych bez zmian w kodzie.

• Nie trzeba tworzyć struktury bazy danych (koniec z normalizacją)

• Twoje klasy nie muszą implementować żadnych specjalnych interfejsów

Page 5: Java Data Objects

Trzy rodzaje klas w JDO

• Persistence Capable – mamy dla nich wygenerowany plik *.jdo (deskryptor)

• Persistence Aware – te które manipulują instancjami Persistence Capable

• Normal – klasy które nie mają nic wspólnego z JDO

Page 6: Java Data Objects

Menadżer Persystencji(Slajd samokomentowalny)

Properties props=new Properties(); props.put("javax.jdo.PersistenceManagerFactoryClass","org.jpox.PersistenceMana

gerFactoryImpl"); props.put("javax.jdo.option.ConnectionDriverName","com.mysql.jdbc.driver"); props.put("javax.jdo.option.ConnectionURL","jdbc:mysql://localhost/jpox"); props.put("javax.jdo.option.ConnectionUserName","mysql"); props.put("javax.jdo.option.ConnectionPassword","");PersistenceManagerFactory

pmf=JDOHelper.getPersistenceManagerFactory(props);PersistenceManager pm=pmf.getPersistenceManager();

• Można też zczytać ustawienia z pliku lub poprzez Java Naming and Directory Interface

Page 7: Java Data Objects

Rodzaje obiektów w JDO(nomenklatura)

•Transient•Persistent New•Persistent Dirty•Hollow•Persistent Clean•Persistent Deleted•Persistent New Deleted

•Persistent Non-transactional•Transient Clean•Transient Dirty•Detached Clean•Detached Dirty

Page 8: Java Data Objects

makePersistent()

Transaction tx=pm.currentTransaction(); try {

tx.begin(); Product product=new Product("Sony Discman","A standard discman from Sony",49.99);pm.makePersistent(product);tx.commit();

} finally {

if (tx.isActive()) { tx.rollback(); }

}

Page 9: Java Data Objects

Aktualizacja wpisu w bazie danych

Transaction tx=pm.currentTransaction();try {

tx.begin(); String product_name=product.getName(); ... product.setPrice(75.0);tx.commit();

} finally {

if (tx.isActive()) { tx.rollback(); }

}

Page 10: Java Data Objects

deletePersistent()

Transaction tx=pm.currentTransaction(); try { tx.begin();

String product_name=product.getName(); ... pm.deletePersistent(product);tx.commit();

} finally {

if (tx.isActive()) { tx.rollback(); }

}

Page 11: Java Data Objects

Cały diagram stanów

Page 12: Java Data Objects

Wszystko to dzieje się podczas trwania transakcji, co zrobić by dowolnie modyfikować obiekt bez zmian w bazie danych?

• Przenieść obiekt w stan Transient – makeTransient()

• Odłączyć obiekt – detachCopy()• Użycie nonTransactional[Read/Write]()

Page 13: Java Data Objects

Wiemy jak zapisywać do bazy danych, jak wczytać obiekt z bazy?!

• Object identity = pm.getObjectId(obj);Object obj = pm.getObjectById(identity);

• Użycie JDOQL – JDO Query Language

Query q = pm.newQuery(MyClass.class, "field1 < value"); q.declareParameters("int value"); List results = q.execute(205);Iterator iter = results.iterator(); while (iter.hasNext()) {

MyClass obj = (MyClass)iter.next();}

Page 14: Java Data Objects

Alternatywa dla JDOQL (brutalna)

• Użycie Extent’u

Extent e = pm.getExtent(MyClass.class, true);

Page 15: Java Data Objects

Inne ważne cechy

• Persistence-by-reachabilityclass Moja{

innaMojaKlasa other;}

• Fetch-grupyKiedy „wyjmujemy” obiekt z bazy danych nie wszystkie jego pola muszą być pobierane od razu. Można ukreślać własne Fetch-grupy

Page 16: Java Data Objects

Wszystko tu to banały... O co naprawdę chodzi?

• Transakcje optymistyczne i pesymistyczne• Wsparcie dla samo-replikowalnych baz

danych

Page 17: Java Data Objects

Jakie to proste! (W teorii)

• Ściągamy plugin do Eclipsa• Włączamy „support” JPOX• Plugin generuje nam plik *.jdo• Po każdym build’dzie JPOX modyfikuje

nasze klasy tak, że są „Persistence Capable”• Możemy pisać kod naszej aplikacji

używając sformułowań JDO

Page 18: Java Data Objects

Zderzenie teorii z praktyką(SMUTNE)