Moduł 03

Transkrypt

Moduł 03
Metody dostępu
do danych
dr inż. Grzegorz Michalski
Na podstawie wykładów dra inż. Juliusza Mikody
Serializacja
Klasy serializowane to klasy implementujące interfejs
java.io.Serializable.
Interfejs Serializable to jedynie wskazanie że klasa może
być szeregowana.
Zapis następuje dla pól publicznych, chronionych oraz
pakietowych.
Podczas deserializacji, pola nie serializowane klasy zostaną
zainicjowane za pomocą konstruktora domyślnego.
Konstruktor domyślny musi być dostępna dla podklasy.
Serializacja - przykład
class LineItem implements Serializable {
private static final long serialVersionUID = 1L;
String n;
public LineItem(String b) { n = b; }
}
class Order implements Serializable {
private static final long serialVersionUID = 1L;
int i;
ArrayList<LineItem> tab;
public Order(int i) {
tab = new ArrayList<LineItem>();
}
public void addItem(LineItem l) {
tab.add(l);
}
}
Serializacja zapis / odczyt
Order o = new Order(111);
o.addItem(new LineItem("line 1"));
o.addItem(new LineItem("line 2"));
ByteArrayOutputStream bo = new
ByteArrayOutputStream();
ObjectOutputStream out;
out = new ObjectOutputStream(bo);
out.writeObject(o);
out.close();
ByteArrayInputStream bi = new
ByteArrayInputStream(bo.toByteArray());
ObjectInputStream in = new ObjectInputStream(bi);
Order io = (Order) in.readObject();
in.close();
Własny mechanizm serializacji
Do zapisu stanu obiektu służy metoda:
private void
writeObject(java.io.ObjectOutputStream out)
throws IOException
Do odczytu stanu obiektu służy metoda:
private void
readObject(java.io.ObjectInputStream in)throws
IOException, ClassNotFoundException;
Serializacja
Przechowywanie prostych typów danych
Możliwość dziedziczenia obiektów
Binnary - bardzo prosty sposób zapisu obiektu w strumień.
XML - serializacja w pełni zgodna ze standardami języka
XML.
Kiedy unikać serializacji
Możliwość formułowania zapytań – ze strumienia nie można
odczytać filtrowanych danych lecz wszystkie zapisane
obiekty.
Częściowy odczyt, aktualizacja danych
Zarządzanie cyklem życia obiektów
Współbieżność
Transakcje
Java Data Objects
Java Data Objects (JDO) jest standardem interfejsu
programistycznego (ang. API) dla technologii trwałości
danych.
Główne idee, jakie stara się realizować to pełna niezależność
od rodzaju źródła danych oraz przeźroczystość.
JDO jest jednak tylko standardem definiującym interfejs
programistyczny. Aby mieć z niego jakikolwiek rzeczywisty
pożytek niezbędna jest jeszcze implementacja.
JDO Historia
JDO 1.0 : FOStore
JDO 2.0 : JPOX 1.1 (2006)
JDO 2.1 : JPOX 1.2 (2008)
JDO 2.2 : DataNucleus AccessPlatform 1.0.1 (2008)
JDO 3.0 : DataNucleus AccessPlatform 2.1.0 (2010)
JDO 3.1 : DataNucleus AccessPlatform 3.0.0 (2011)
Zalety JDO
Łatwość użytkowania: programiści aplikacji mogą skupić się
na modelu obiektu i pozostawić szczegóły dotyczące zapisu
do realizacji JDO.
Przenośność: Aplikacja napisana z JDO może być
uruchamiana na wielu platformach bez rekompilacji lub
zmiany kodu źródłowego.
Niezależność od bazy danych: Aplikacje napisane z JDO są
niezależne od bazy danych. Implementacje JDO wspierają
wiele różnych rodzajów źródeł danych, w tym relacyjnych i
obiektowych baz danych, XML, plików płaskich i inne.
Trwałość
Byt programistyczny jest trwały, jeżeli żyje dłużej niż trwa
czas działania programu, który go używa (przenosi się
pomiędzy kolejnymi uruchomieniami programu). Wszystko,
co zawierają bazy danych, jest trwałe.
Trwałą zmienną jest zmienna programistyczna, która ma
wszystkie własności normalnej zmiennej, ale której wartość
przy nowym uruchomieniu programu jest taka sama, jak
przy zakończeniu poprzedniego uruchomienia programu.
Prototypowe języki z trwałością (DBPL, Napier88,
PS-Algol, Galileo, Fibonacci, Loqis,... )
Rodzaje trwałości
Trwałość poprzez osiągalność: Obiekt trwały nie może
mieć nietrwałych pod-obiektów lub atrybutów, ani też nie
może zawierać wskaźnika prowadzącego do obiektu
nietrwałego.
Trwałość poprzez dziedziczenie: specjalne klasy z cechą
trwałości, wszystkie klasy potomne są klasami z trwałością.
Trwałość poprzez utworzenie: podczas tworzenia
programista ustala, czy tworzony obiekt ma być trwały.
Java obiekty trwałe
Obiekt:
Order o = new Order(111);
Jest obiektem ulotnym.
Aby uzyskać obiekt trwały:
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
tx.begin();
Order o = new Order(111);
pm.makePersistent(o);
tx.commit();
Trwałość przechodnia
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
tx.begin();
Order o = new Order(111);
pm.makePersistent(o);
o.addItem(new LineItem("line"));
// Obiekty trwa e
tx.commit();
o.addItem(new LineItem("next line"));
// Obiekt jest ju ulotny
Trwałość oferowana przez JDO
Jest ortogonalna – wszystkie obiekty klas definiowanych
przez użytkownika mogą być utrwalone. Wyjątek stanowią
klasy, których stan zależy od systemu (File, Socket, Thread
itp). Stanu systemu nie da się odtworzyć.
Jest przeźroczysta dla klientów. Kod aplikacji nie musi
umieszczać obiektów w pamięci trwałej ani ich odzyskiwać.
Dotyczy poszczególnych obiektów. Obiekty mogą być
trwałe lub ulotne.
Nie zmienia typu obiektu i zachowuje kontrolę ich
zgodności.
Specyfikacja JDO
Zdefiniowanie standardu umożliwiającego tworzenie
obiektów trwałych.
Zdefiniowanie standardowego interfejsu programistycznego
(API) używanego przez programistę
Zdefiniowanie interfejsu programistycznego Service
Provider Interface (SPI). Interfejs ten jest implementowany
przez dostawcę JDO.
Dostarczenie wzorcowej implementacji standardu JDO.

Podobne dokumenty