Title: Java Data Objects
1Java Data Objects
2Slownik
- Persystencja
- Transakcja
- RDBMS
- ODBMS
3JDO to standard
- Producenci (vendors) dostarczaja implementacji
standardu - JPOX (RDBMS)
- Orient (ODBMS)
- inteliBO (RDBMS)
- ObjectDB
4Dlaczego JDO?
- Mozna zmienic silnik bazy danych a nawet typ bazy
danych bez zmian w kodzie. - Nie trzeba tworzyc struktury bazy danych (koniec
z normalizacja) - Twoje klasy nie musza implementowac zadnych
specjalnych interfejsów
5Trzy rodzaje klas w JDO
- Persistence Capable mamy dla nich wygenerowany
plik .jdo (deskryptor) - Persistence Aware te które manipuluja
instancjami Persistence Capable - Normal klasy które nie maja nic wspólnego z JDO
6Menadzer Persystencji(Slajd samokomentowalny)
- Properties propsnew Properties()
- props.put("javax.jdo.PersistenceManagerFactoryClas
s","org.jpox.PersistenceManagerFactoryImpl") - props.put("javax.jdo.option.ConnectionDriverName",
"com.mysql.jdbc.driver") - props.put("javax.jdo.option.ConnectionURL","jdbcm
ysql//localhost/jpox") - props.put("javax.jdo.option.ConnectionUserName","m
ysql") - props.put("javax.jdo.option.ConnectionPassword",""
) - PersistenceManagerFactory pmfJDOHelper.getPersist
enceManagerFactory(props) - PersistenceManager pmpmf.getPersistenceManager()
- Mozna tez zczytac ustawienia z pliku lub poprzez
Java Naming and Directory Interface
7Rodzaje 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
8makePersistent()
- Transaction txpm.currentTransaction()
- try
-
- tx.begin()
- Product productnew Product("Sony Discman","A
standard discman from Sony",49.99) - pm.makePersistent(product)
- tx.commit()
-
- finally
-
- if (tx.isActive())
- tx.rollback()
-
9Aktualizacja wpisu w bazie danych
- Transaction txpm.currentTransaction()
- try
-
- tx.begin()
- String product_nameproduct.getName()
- ...
- product.setPrice(75.0)
- tx.commit()
-
- finally
-
- if (tx.isActive())
- tx.rollback()
-
10deletePersistent()
- Transaction txpm.currentTransaction()
- try
-
- tx.begin()
- String product_nameproduct.getName()
- ...
- pm.deletePersistent(product)
- tx.commit()
-
- finally
-
- if (tx.isActive())
- tx.rollback()
-
11Caly diagram stanów
12Wszystko to dzieje sie podczas trwania
transakcji, co zrobic by dowolnie modyfikowac
obiekt bez zmian w bazie danych?
- Przeniesc obiekt w stan Transient
makeTransient() - Odlaczyc obiekt detachCopy()
- Uzycie nonTransactionalRead/Write()
13Wiemy jak zapisywac do bazy danych, jak wczytac
obiekt z bazy?!
- Object identity pm.getObjectId(obj)Object obj
pm.getObjectById(identity) - Uzycie JDOQL JDO Query Language
- Query q pm.newQuery(MyClass.class, "field1 lt
value") - q.declareParameters("int value")
- List results q.execute(205)
- Iterator iter results.iterator()
- while (iter.hasNext())
-
- MyClass obj (MyClass)iter.next()
14Alternatywa dla JDOQL (brutalna)
- Uzycie Extentu
- Extent e pm.getExtent(MyClass.class, true)
15Inne wazne cechy
- Persistence-by-reachability
- class Moja
-
- innaMojaKlasa other
-
- Fetch-grupy
- Kiedy wyjmujemy obiekt z bazy danych nie
wszystkie jego pola musza byc pobierane od razu.
Mozna ukreslac wlasne Fetch-grupy
16Wszystko tu to banaly... O co naprawde chodzi?
- Transakcje optymistyczne i pesymistyczne
- Wsparcie dla samo-replikowalnych baz danych
17Jakie to proste! (W teorii)
- Sciagamy plugin do Eclipsa
- Wlaczamy support JPOX
- Plugin generuje nam plik .jdo
- Po kazdym builddzie JPOX modyfikuje nasze klasy
tak, ze sa Persistence Capable - Mozemy pisac kod naszej aplikacji uzywajac
sformulowan JDO
18Zderzenie teorii z praktyka(SMUTNE)