Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Java Data Objects
2
Słownik Persystencja Transakcja RDBMS ODBMS
3
JDO to standard Producenci (vendors) dostarczają implementacji standardu JPOX (RDBMS) Orient (ODBMS) inteliBO (RDBMS) ObjectDB
4
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
5
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
6
Menadżer Persystencji (Slajd samokomentowalny)
Properties props=new Properties(); props.put("javax.jdo.PersistenceManagerFactoryClass","org.jpox.PersistenceManagerFactoryImpl"); 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
7
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
8
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(); }
9
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(); }
10
deletePersistent() Transaction tx=pm.currentTransaction(); try {
tx.begin(); String product_name=product.getName(); ... pm.deletePersistent(product); tx.commit(); } finally if (tx.isActive()) { tx.rollback(); }
11
Cały diagram stanów
12
Przenieść obiekt w stan Transient – makeTransient()
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]()
13
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(); }
14
Alternatywa dla JDOQL (brutalna)
Użycie Extent’u Extent e = pm.getExtent(MyClass.class, true);
15
Persistence-by-reachability
Inne ważne cechy Persistence-by-reachability class Moja { innaMojaKlasa other; } Fetch-grupy Kiedy „wyjmujemy” obiekt z bazy danych nie wszystkie jego pola muszą być pobierane od razu. Można ukreślać własne Fetch-grupy
16
Wszystko tu to banały... O co naprawdę chodzi?
Transakcje optymistyczne i pesymistyczne Wsparcie dla samo-replikowalnych baz danych
17
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
18
Zderzenie teorii z praktyką(SMUTNE)
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.