Java Data Objects

18
Java Data Objects

description

Java Data Objects. Słownik. Persystencja Transakcja RDBMS ODBMS. JDO to standard. Producenci (vendors) dostarczają implementacji standardu JPOX (RDBMS) Orient (ODBMS) inteliBO (RDBMS) ObjectDB. Dlaczego JDO?. Można zmienić silnik bazy danych a nawet typ bazy danych bez zmian w kodzie. - PowerPoint PPT Presentation

Transcript of Java Data Objects

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)