You are on page 1of 31

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Java Data Objects


Autorzy: Sameer Tyagi, Keiron McCammon,
Michael Vorburger, Heiko Bobzin
Tumaczenie: Jaromir Senczyk
ISBN: 83-7361-392-7
Tytu oryginau: Core Java Data Objects
Format: B5, stron: 456
Przykady na ftp: 107 kB
Ksika Java Data Objects:
Demonstruje praktyczne techniki stosowane przez zawodowych programistw
Zawiera poprawny, gruntownie przetestowany kod rdowy programw oraz
przykady zaczerpnite z praktyki
Skoncentrowana jest na nowoczesnych technologiach, ktre musz pozna
programici
Zawiera rady profesjonalistw, ktre pozwol czytelnikowi tworzy najlepsze
programy
Java Data Objects (JDO) przyspiesza tworzenie aplikacji w Javie dostarczajc
obiektowego mechanizmu trwaoci i standardowych interfejsw umoliwiajcych
korzystanie z baz danych. Ksika ta jest wszechstronnym przewodnikiem po
zagadnieniach trwaoci JDO, przeznaczony dla zaawansowanego programisty.
Korzystajc z realistycznych przykadw kodu autorzy przedstawiaj sposoby
tworzenia, pobierania, aktualizacji i usuwania obiektw trwaych, cykl ycia obiektw
i przejcia pomidzy stanami, klasy i interfejsy JDO, zapytania, architektur, problemy
bezpieczestwa i wiele innych zagadnie. Prezentuj sposoby integracji JDO z EJB,
JTA, JCA i innymi technologiami J2EE, omawiaj te najlepsze sposoby
wykorzystania JDO przez samodzielne aplikacje oraz komponenty J2EE.
Jeli chcesz powici wicej czasu na rozwizywanie zagadnie biznesowych,
a mniej traci na zajmowanie si problemem trwaoci, to potrzebujesz wanie JDO
i jednej dobrej ksiki, ktra pomoe Ci efektywnie uy JDO: Java Data Objects.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Omwienie specyfikacji JDO i podstawowych zagadnie zwizanych


z trwaoci obiektw
Programowanie z uyciem JDO; najwaniejsze klasy i obiekty
Cykl ycia obiektw
Wyszukiwanie danych w JDO
Przykadowa architektura i jej konstrukcja z uyciem JDO
JDO a J2EE: JCA, EJB, transakcje, bezpieczestwo
Porwnanie JDO z JDBC
Przyszo JDO i rozwj tej specyfikacji
Studium przypadku
Uzupenieniem s liczne dodatki omawiajce midzy innymi: stany JDO, metadane,
jzyk JDOQL w notacji BNF i dostpne implementacje JDO.

Spis treci
O Autorach...................................................................................................................................................13
Przedmowa .................................................................................................................................................15
Wstp.......................................................................................................................................................... 23

Cz I Wprowadzenie

25

Rozdzia 1. Przegld specyfikacji JDO...................................................................................................... 27


1.1. Powstanie specyfikacji JDO..................................................................................... 27
1.2. Obiektowy model dziedziny ..................................................................................... 27
1.3. Trwao ortogonalna ............................................................................................. 30
1.3.1. Obiekty trwae i obiekty ulotne ........................................................................ 33
1.4. rodowiska zarzdzane i niezarzdzane ................................................................... 36
1.4.1. rodowiska niezarzdzane.............................................................................. 36
1.4.2. rodowiska zarzdzane .................................................................................. 36
1.5. Role i obowizki..................................................................................................... 37
1.5.1. Specyfikacje JDO ........................................................................................... 38
1.5.2. Obowizki programisty ................................................................................... 38
1.5.3. Obowizki producenta .................................................................................... 40
1.6. Podsumowanie ...................................................................................................... 41

Rozdzia 2. Podstawowe zagadnienia dotyczce trwaoci obiektw .................................................. 43


2.1. Trwao i aplikacje................................................................................................ 43
2.2. Serializacja binarna JDK ......................................................................................... 44
2.2.1. Interfejs programowy serializacji...................................................................... 44
2.2.2. Zarzdzanie wersjami i serializacja.................................................................. 46
2.2.3. Kiedy stosowa serializacj? .......................................................................... 47
2.2.4. Kiedy unika stosowania serializacji? .............................................................. 48
2.3. Odwzorowania obiektowo-relacyjne .......................................................................... 48
2.3.1. Klasy i tablice................................................................................................ 49
2.3.2. Odwzorowania typw String, Date i innych........................................................ 50
2.3.3. Odwzorowanie dziedziczenia ........................................................................... 51

Java Data Objects


2.3.4. Bezpieczestwo............................................................................................. 53
2.3.5. Translacja jzyka zapyta ............................................................................... 54
2.3.6. Spjno referencyjna, usuwanie obiektw i inne zagadnienia ........................... 54
2.3.7. Trwao transparentna i odwzorowania O/R.................................................... 54
2.3.8. Identyfikacja.................................................................................................. 55
2.4. Tworzenie wasnej warstwy odwzorowania O/R ......................................................... 56
2.4.1. Buforowanie .................................................................................................. 56
2.4.2. Transakcyjny dostp do bazy i obiekty transakcyjne .......................................... 57
2.4.3. Blokowanie ................................................................................................... 58
2.4.4. Tablice, zbiory, listy i mapy ............................................................................. 58
2.4.5. Efektywno .................................................................................................. 59
2.4.6. Tworzy samodzielnie czy kupowa?................................................................ 59
2.5. Wnioski................................................................................................................. 60

Cz II Szczegy

63

Rozdzia 3. Rozpoczynamy programowanie z uyciem JDO .................................................................. 65


3.1. Jak dziaa JDO? ..................................................................................................... 66
3.2. Podstawy JDO........................................................................................................ 69
3.3. Definiowanie klasy ................................................................................................. 70
3.3.1. Metadane JDO............................................................................................... 71
3.3.2. Odwzorowanie klasy do bazy danych................................................................ 72
3.4. Poczenie do bazy danych ..................................................................................... 72
3.5. Tworzenie obiektu .................................................................................................. 74
3.6. Wczytywanie obiektu .............................................................................................. 76
3.6.1. Wczytywanie przez nawigacj .......................................................................... 76
3.6.2. Wczytywanie za pomoc interfejsu Extent ........................................................ 77
3.6.3. Wczytywanie przez zapytanie........................................................................... 78
3.7. Aktualizacja obiektu ............................................................................................... 79
3.8. Usuwanie obiektu .................................................................................................. 80
3.9. Model obiektowy JDO ............................................................................................. 82
3.9.1. Typy podstawowe........................................................................................... 82
3.9.2. Referencje .................................................................................................... 83
3.9.3. Klasy kolekcji ................................................................................................ 87
3.9.4. Tablice.......................................................................................................... 89
3.9.5. Dziedziczenie ................................................................................................ 90
3.9.6. Modyfikatory.................................................................................................. 91
3.9.7. Ograniczenia JDO........................................................................................... 92
3.10. Obsuga wyjtkw ................................................................................................ 92
3.11. Tosamo obiektw ............................................................................................ 93
3.12. Typy tosamoci obiektw .................................................................................... 94
3.12.1. Tosamo na poziomie bazy danych ............................................................ 95
3.12.2. Tosamo na poziomie aplikacji .................................................................. 95
3.12.3. Tosamo nietrwaa ................................................................................... 98
3.13. Cykl ycia obiektu ................................................................................................ 98
3.14. Sterowanie wspbienoci ................................................................................. 99
3.14.1. Transakcje ACID ........................................................................................ 100
3.14.2. Transakcje optymistyczne........................................................................... 100
3.15. Podsumowanie .................................................................................................. 101

Spis treci

Rozdzia 4. Cykl ycia obiektw...............................................................................................................103


4.1. Cykl ycia obiektu trwaego ................................................................................... 103
4.1.1. Utrwalanie obiektu ....................................................................................... 104
4.1.2. Odtwarzanie obiektw z bazy danych ............................................................. 105
4.1.3. Uproszczony cykl ycia obiektu...................................................................... 107
4.2. Informacja o stanie obiektu .................................................................................. 108
4.3. Operacje powodujce zmian stanu....................................................................... 109
4.3.1. PersistenceManager.makePersistent ............................................................ 110
4.3.2. PersistenceManager.deletePersistent ........................................................... 110
4.3.3. PersistenceManager.makeTransient.............................................................. 110
4.3.4. Transaction.commit ..................................................................................... 110
4.3.5. Transaction.rollback..................................................................................... 110
4.3.6. PersistenceManager.refresh......................................................................... 110
4.3.7. PersistenceManager.evict ............................................................................ 111
4.3.8. Odczyt pl wewntrz transakcji...................................................................... 111
4.3.9. Zapis pl wewntrz transakcji ....................................................................... 111
4.3.10. PersistenceManager.retrieve ...................................................................... 111
4.4. Wywoania zwrotne............................................................................................... 111
4.4.1. Zastosowania metody jdoPostLoad ............................................................... 112
4.4.2. Zastosowania metody jdoPreStore ................................................................ 113
4.4.3. Zastosowania metody jdoPreDelete............................................................... 114
4.4.4. Zastosowania metody jdoPreClear................................................................. 115
4.5. Stany opcjonalne ................................................................................................. 115
4.5.1. Ulotne instancje transakcyjne ....................................................................... 116
4.5.2. Zastosowania ulotnych instancji transakcyjnych ............................................. 117
4.5.3. Instancje nietransakcyjne ............................................................................. 117
4.5.4. Transakcje optymistyczne............................................................................. 119
4.6. Przykady ............................................................................................................. 120
4.7. Podsumowanie .................................................................................................... 124

Rozdzia 5. Programowanie w JDO .........................................................................................................125


5.1. Koncepcje JDO .................................................................................................... 125
5.1.1. Zdolno do trwaoci .................................................................................. 126
5.1.2. Metadane JDO............................................................................................. 126
5.1.3. Domylna grupa pobierania .......................................................................... 128
5.1.4. Trwao poprzez osigalno....................................................................... 128
5.1.5. Obiekty klas pierwszej i drugiej kategorii........................................................ 129
5.1.6. Tosamo obiektw.................................................................................... 130
5.1.7. Cykl ycia obiektu ........................................................................................ 130
5.1.8. Transakcje .................................................................................................. 131
5.2. Interfejsy i klasy JDO ............................................................................................ 135
5.3. Podstawowe interfejsy JDO ................................................................................... 138
5.3.1. javax.jdo.PersistenceManagerFactory ............................................................ 138
5.3.2. PersistenceManager .................................................................................... 148
5.3.3. Extent......................................................................................................... 165
5.3.4. Query.......................................................................................................... 167
5.3.5. Transaction ................................................................................................. 174
5.3.6. InstanceCallbacks ....................................................................................... 180
5.4. Klasy wyjtkw .................................................................................................... 182
5.4.1. JDOException .............................................................................................. 183
5.4.2. JDOFatalException ....................................................................................... 183

Java Data Objects


5.4.3. JDOFatalUserException ................................................................................ 183
5.4.4. JDOFatalInternalException ............................................................................ 184
5.4.5. JDOFatalDataStoreException ........................................................................ 184
5.4.6. JDOOptimisticVerificationException ............................................................... 184
5.4.7. JDOCanRetryException ................................................................................. 184
5.4.8. JDOUnsupportedOptionException .................................................................. 184
5.4.9. JDOUserException ....................................................................................... 185
5.4.10. JDODataStoreException ............................................................................. 185
5.4.11. JDOObjectNotFoundException ..................................................................... 185
5.5. Dodatkowe interfejsy............................................................................................ 185
5.5.1. Klasa JDOHelper ......................................................................................... 185
5.5.2. Klasa I18NHelper ........................................................................................ 187
5.6. SPI ..................................................................................................................... 187
5.6.1. PersistenceCapable ..................................................................................... 188
5.6.2. JDOPermission ............................................................................................ 188
5.6.3. JDOImplHelper ............................................................................................ 188
5.6.4. StateManager ............................................................................................. 189
5.7. Podsumowanie .................................................................................................... 189

Rozdzia 6. Wyszukiwanie danych............................................................................................................191


6.1. Wyszukiwanie obiektu na podstawie tosamoci ...................................................... 191
6.2. Wyszukiwanie zbioru obiektw za pomoc ekstensji................................................ 193
6.3. Wyszukiwanie obiektw za pomoc zapyta ........................................................... 194
6.3.1. Zapytania dla ekstensji ................................................................................ 197
6.4. JDOQL ................................................................................................................ 197
6.4.1. Specyfikacja filtrw ...................................................................................... 199
6.5. Zapytania, filtry i parametry opcjonalne.................................................................. 204
6.5.1. Deklaracje parametrw ................................................................................ 204
6.5.2. Deklaracje polece importu .......................................................................... 206
6.5.3. Deklaracje zmiennych .................................................................................. 206
6.5.4. Uporzdkowanie wynikw zapytania............................................................... 207
6.5.5. Przestrzenie nazw w zapytaniach................................................................... 208
6.6. Wicej o interfejsie Query ..................................................................................... 208
6.6.1. Tworzenie zapyta ....................................................................................... 209
6.6.2. Zapytania i buforowanie ............................................................................... 209
6.6.3. Zapytania skompilowane .............................................................................. 210
6.6.4. Szablony zapyta ......................................................................................... 210
6.6.5. Wybr innego jzyka zapyta......................................................................... 212
6.7. Podsumowanie .................................................................................................... 212

Rozdzia 7. Scenariusze i architektury ..................................................................................................213


7.1. JDO i JDBC .......................................................................................................... 213
7.2. Rodzaje baz danych ............................................................................................. 214
7.2.1. JDO i relacyjne bazy danych .......................................................................... 215
7.2.2. JDO i obiektowe bazy danych ........................................................................ 216
7.2.3. Porwnania baz danych ................................................................................ 216
7.3. J2EE, RMI i CORBA .............................................................................................. 217
7.4. rodowiska zarzdzane i niezarzdzane ................................................................. 218
7.4.1. Zarzdzanie poczeniami............................................................................. 219
7.4.2. Zarzdzanie transakcjami ............................................................................. 220

Spis treci

7.5. Aplikacje wielowtkowe ........................................................................................ 221


7.5.1. Programowanie wielowtkowe....................................................................... 221
7.5.2. Uproszczone programowanie wielowtkowe ................................................... 222
7.6. Podsumowanie .................................................................................................... 222

Cz III J2EE

223

Rozdzia 8. JDO i JCA ...............................................................................................................................225


8.1. Wprowadzenie do JCA .......................................................................................... 225
8.2. JDO i JCA ............................................................................................................ 227
8.3. Wykorzystanie JDO i JCA....................................................................................... 227
8.3.1. Konfiguracja ................................................................................................ 228
8.3.2. Zarzdzanie poczeniami............................................................................. 228
8.3.3. Zarzdzanie transakcjami ............................................................................. 230
8.3.4. Bezpieczestwo........................................................................................... 234
8.5. Wykorzystanie JDO bez JCA................................................................................... 234
8.6. Podsumowanie .................................................................................................... 235

Rozdzia 9. JDO i Enterprise JavaBeans ................................................................................................237


9.1. Wprowadzenie ..................................................................................................... 237
9.2. Komponenty sesyjne i JDO.................................................................................... 239
9.2.1. Zarzdzanie transakcjami ............................................................................. 240
9.2.2. Przykad komponentu sesyjnego, ktry nie ma stanu i uywa transakcji
zarzdzanych przez kontener ............................................................................. 243
9.2.3. Przykad komponentu sesyjnego, ktry ma stan i uywa transakcji
zarzdzanych przez kontener ............................................................................. 245
9.2.4. Architektura zorientowana na usugi (SOA) ..................................................... 247
9.3. Komponenty sterowane komunikatami i JDO .......................................................... 257
9.3.1. Przykad kodu .............................................................................................. 258
9.4. Komponenty Entity i JDO ...................................................................................... 259
9.4.1. Trwao zarzdzana przez komponent i JDO.................................................. 261
9.5. Kiedy uywa EJB? ............................................................................................... 261
9.5.1. Skalowalne aplikacje JDO i czenie w klastry ................................................ 265
9.5.2. Rozwizania z transmisj w obu kierunkach ................................................... 266
9.6. Podsumowanie .................................................................................................... 268

Rozdzia 10. Bezpieczestwo ...................................................................................................................271


10.1. Poziomy bezpieczestwa .................................................................................... 271
10.1.1. Bezpieczestwo na poziomie pl i klas ........................................................ 271
10.1.2. Bezpieczestwo na poziomie bazy danych.................................................... 272
10.1.3. Bezpieczestwo na poziomie aplikacji ......................................................... 273
10.2. Implementacja interfejsu PersistenceCapable ...................................................... 273
10.2.1. Referencyjne narzdzie rozszerzania kodu.................................................... 275
10.2.2. Zasady dziaania........................................................................................ 277
10.2.3. ledzenie dostpu do pola ......................................................................... 279
10.2.4. Dostp do metadanych .............................................................................. 282
10.2.5. Plik zasad bezpieczestwa ......................................................................... 283
10.2.6. Problemy z bezpieczestwem...................................................................... 283

Java Data Objects


10.3. Bezpieczestwo aplikacji .................................................................................... 284
10.3.1. Bezpieczestwo pocze ........................................................................... 284
10.3.2. rodowiska zarzdzane .............................................................................. 285
10.3.3. Autoryzacja na poziomie aplikacji ................................................................ 285
10.4. Podsumowanie .................................................................................................. 286

Rozdzia 11. Transakcje ...........................................................................................................................287


11.1. Koncepcje transakcji .......................................................................................... 287
11.1.1. Uczestnicy transakcji ................................................................................. 288
11.1.2. Transakcje lokalne..................................................................................... 289
11.1.3. Transakcje rozproszone.............................................................................. 289
11.1.4. Zatwierdzanie dwufazowe ........................................................................... 289
11.2. Transakcje i Java ............................................................................................... 292
11.2.1. Transakcje JDBC........................................................................................ 292
11.2.2. JTA i JTS ................................................................................................... 292
11.3. Transakcje w JDO .............................................................................................. 295
11.3.1. Konflikty podczas zatwierdzania transakcji optymistycznych........................... 301
11.3.2. Obiekty transakcyjne i nietransakcyjne ........................................................ 302
11.3.3. Zachowywanie i odtwarzanie wartoci .......................................................... 305
11.3.4. JDO i transakcje serwera aplikacji J2EE ....................................................... 306
11.3.5. Interfejs Transaction i synchronizacja za pomoc zwrotnych wywoa metod ... 314
11.4. Podsumowanie .................................................................................................. 314

Cz IV Wnioski

315

Rozdzia 12. JDO i JDBC.............................................................................................................................317


12.1. JDBC 2.0 i 3.0................................................................................................... 317
12.1.1. Podstawy JDBC ......................................................................................... 318
12.1.2. Historia JDBC ............................................................................................ 319
12.1.3. Nowe moliwoci JDBC 3.0......................................................................... 320
12.1.4. Rozszerzenia interfejsu JDBC...................................................................... 321
12.2. Przykad: przechowywanie obiektw w relacyjnej bazie danych za pomoc JDBC ...... 322
12.3. Porwnanie JDBC i JDO ...................................................................................... 325
12.3.1. Porwnanie moliwoci JDBC i JDO ............................................................. 328
12.3.2. Nieporozumienia zwizane z JDBC i JDO ...................................................... 328
12.3.3. Kiedy uywa JDBC .................................................................................... 333
12.3.4. Kiedy uywa razem JDO i JDBC? ................................................................ 339
12.4. Podsumowanie .................................................................................................. 339

Rozdzia 13. Wskazwki, triki i najlepsze rozwizania.........................................................................341


13.1. Modelowanie danych.......................................................................................... 341
13.1.1. Wprowadzenie ........................................................................................... 341
13.1.2. Klasy obudowujce i typy podstawowe......................................................... 342
13.1.3. Referencje obiektw trwaych...................................................................... 343
13.1.4. Pola o typie kolekcji ................................................................................... 343
13.1.5. Modelowanie zwizkw odwrotnych ............................................................. 346
13.1.6. Hierarchie dziedziczenia ............................................................................. 348
13.1.7. Klasy wiadome trwaoci .......................................................................... 348
13.2. JDO i serwlety.................................................................................................... 349
13.3. Wyodrbnienie klas nalecych do modelu dziedziny............................................. 352

Spis treci

13.4. Wykorzystanie XML-a jako formatu wymiany danych .............................................. 353


13.4.1. Wprowadzenie ........................................................................................... 354
13.4.2. Alternatywy................................................................................................ 355
13.4.3. Dostpne technologie ................................................................................ 355
13.4.4. Przykad .................................................................................................... 358
13.5. Kontrola poprawnoci danych.............................................................................. 359
13.5.1. Wykorzystanie metody jdoPrestore interfejsu InstanceCallback ...................... 361
13.5.2. Wykorzystanie metody beforeCompletion() interfejsu Synchronization............. 362
13.6. Podsumowanie .................................................................................................. 365

Rozdzia 14. Perspektywy.......................................................................................................................367


14.1. Zaawansowana semantyka transakcji .................................................................. 367
14.1.1. Zagniedanie transakcji ............................................................................ 368
14.1.2. Punkty odwoywania transakcji .................................................................... 368
14.1.3. Jawne blokowanie...................................................................................... 369
14.2. Optymalizacja wydajnoci ................................................................................... 369
14.3. Zarzdzanie zwizkami ....................................................................................... 369
14.3.1. Zwizki dwukierunkowe .............................................................................. 370
14.3.2. Usuwanie kaskadowe................................................................................. 370
14.3.3. Odzyskiwanie zasobw zajmowanych przez obiekty trwae ............................. 371
14.4. Rozszerzenia zapyta ......................................................................................... 371
14.4.1. acuchy .................................................................................................. 371
14.4.2. Operacje agregacji ..................................................................................... 371
14.4.3. Projekcje................................................................................................... 372
14.5. Odwzorowania obiektw...................................................................................... 372
14.6. Wzorzec wyliczenia ............................................................................................. 372
14.7. Podsumowanie .................................................................................................. 373

Rozdzia 15. Studium przypadku. Biblioteka JDO...................................................................................375


15.1. Pliki, pakiety i model obiektowy........................................................................... 375
15.2. Pakiet model ..................................................................................................... 376
15.2.1. Klasa Publication....................................................................................... 376
15.2.2. Klasa Book ............................................................................................... 378
15.2.3. Klasa CD .................................................................................................. 378
15.2.4. Klasa Copy................................................................................................ 380
15.2.5. Klasa User ................................................................................................ 381
15.2.6. Klasy Right i Rights.................................................................................... 383
15.3. Pakiet usecase.................................................................................................. 385
15.3.1. Klasa AbstractUserCase............................................................................. 385
15.3.2. Przypadek AddBook ................................................................................... 388
15.4. Klasa BookOperation ......................................................................................... 390
15.4.1. Przypadek ListBooks .................................................................................. 392
15.4.2. Przypadek DetailedBook ............................................................................. 395
15.4.3. Przypadek EditBook ................................................................................... 396
15.4.4. Przypadek DeleteBook ............................................................................... 398
15.4.5. Klasa BorrowReturn ................................................................................... 399
15.4.6. Przypadek Borrow ...................................................................................... 400
15.4.7. Przypadek Return....................................................................................... 400
15.5. Uruchamianie .................................................................................................... 400
15.5.1. Metadane XML .......................................................................................... 401
15.5.2. Uruchomienie z poziomu wiersza polece .................................................... 401
15.5.3. Uruchamianie serwletw ............................................................................ 402

10

Java Data Objects

Dodatki

403

Dodatek A Stany JDO ...............................................................................................................................405


Dodatek B Metadane XML........................................................................................................................409
Dodatek C Jzyk JDOQL w notacji BNF ....................................................................................................419
Dodatek D PersistenceManagerFactory informator ......................................................................425
Dodatek E Implementacje JDO.................................................................................................................429
Skorowidz .................................................................................................................................................441

Cykl ycia obiektw


W rozdziale tym omwimy cykl ycia obiektw oraz przedstawimy powody, dla ktrych znajomo zmian stanu obiektw JDO moe by istotna dla programisty aplikacji.
Dlaczego znajomo cyklu ycia obiektu i zmian stanu jest tak wana? Wyobramy sobie,
jak dziaa maszyna wirtualna JVM, gdy aplikacja wywouje operator . Wiemy, e przydzielany jest odpowiedni obszar pamici i zwracana jest jego referencja, ale w rzeczywistoci dziaanie maszyny wirtualnej jest bardziej skomplikowane. Najpierw moe si okaza,
e maszyna JVM musi zaadowa kod bajtowy z pewnego zasobu i przetumaczy go na instrukcje macierzystego procesora. Wykonywana jest statyczna inicjacja, adowane s klasy
bazowe i wywoywane konstruktory. Jeszcze bardziej skomplikowany moe by przebieg
usuwania obiektu, w ktry zaangaowany bdzie mechanizm odzyskiwania nieuytkw, mechanizm sabych referencji, kolejki i zwrotne wywoania metod . Dlatego te maszyna wirtualna JVM musi dysponowa dobrze zdefiniowanym modelem cyklu ycia obiektw. Podobnym modelem cyklu dysponuje rwnie implementacja JDO dla obiektw trwaych rozpoczynaj one ycie jako zwyke, ulotne obiekty jzyka Java, nastpnie uzyskuj
trwao, mog zosta usunite bd z powrotem przej do stanu ulotnego i tak dalej. Znajomo cyklu ycia obiektw trwaych w ogle nie jest konieczna, zwaszcza szczegowa.
Jeli jednak aplikacja uywa wywoa zwrotnych, to zalecane jest mylenie w kategoriach
efektw ubocznych zwizanych ze stanami obiektw trwaych i ich zmianami.
Najpierw omwione zostan obowizkowe i opcjonalne stany obiektw trwaych, metody
umoliwiajce okrelenie stanu obiektu oraz metody, ktrych skutkiem jest zmiana stanu.
Zmiany stanu obiektw trwaych zilustrowane zostan fragmentami kodu rdowego w jzyku Java wywietlajcymi dodatkowo informacje o stanie tych obiektw. Cze powicona
wywoaniom zwrotnym wyjani sposb i warunki ich uycia. Na kocu przedstawione zostan te stany i operacje, ktre s w JDO opcjonalne.

4.1. Cykl ycia obiektu trwaego


JDO definiuje siedem stanw obowizkowych i trzy stany opcjonalne. Stany
  , 

 , 
    , , 
  , 
  
 i 
 

104

Cz II n Szczegy
  s obowizkowe. Stany
  
,
   i 
  
 
  s opcjonalne i zostan omwione w dalszej czci rozdziau.

Niektre ze zmian stanu obiektu s bezporednio wywoywane przez aplikacj na przykad na skutek utrwalenia obiektu. Rwnie rozpoczcie lub zakoczenie transakcji moe
wywoa zmian stanu obiektu, czyli zachodzi ona na skutek wywoania przez aplikacj jednej z metod ,   lub
 klasy 
  . Zauwamy, e w rodowiskach zarzdzanych zmiany stanu mog by rwnie wywoywane przez zewntrzny kontroler transakcji. Instancja jzyka Java rozpoczyna cykl ycia JDO na skutek wywoania metody 
   lub zaadowania istniejcego obiektu trwaego z bazy danych.
Rozdzia rozpoczniemy od omwienia dwch typowych sekwencji utrwalania obiektw
i odtwarzania ich na podstawie informacji zapisanych w bazie danych. Zilustrujemy je krtkim przykadem kodu oraz pokaemy sposb uycia klasy  
w celu uzyskania informacji o zmianach stanw zachodzcych podczas wykonywania wspomnianych sekwencji.

4.1.1. Utrwalanie obiektu


Operacje prowadzce do utrwalenia obiektu mog przebiega w sposb przedstawiony na
diagramie stanw (rysunek 4.1).
Rysunek 4.1.
Utrwalanie
instancji ulotnych

4.1.1.1. Stan ulotny (transient)


Instancje klasy zdolnej do trwaoci zachowuj si po ich utworzeniu za pomoc operatora
 w taki sam sposb jak instancje kadej innej klasy jzyka Java. Modyfikacje pl tych instancji nie s ledzone, co w praktyce oznacza tak sam efektywno dostpu jak w przypadku instancji klas, ktre nie s zdolne do trwaoci. Na instancje ulotne nie maj wpywu
wywoania metod zwizanych z transakcjami czyli ,   i
 z wyjtkiem sytuacji, w ktrych instancje te s osigalne za porednictwem obiektw trwaych.

4.1.1.2. Stan persistent-new


Wywoanie metody 
 

   przypisuje instancji nowy identyfikator, a jej stan zmienia si z
  na 
  . Obiekt w stanie 
 
 zachowuje si tak samo jak obiekt w stanie
  , ale zapisywany jest w bazie danych podczas zatwierdzania transakcji lub gdy stan obiektu musi zosta zsynchronizowany
ze stanem w wewntrznych buforach JDO. Obiekt znajdujcy si w stanie 
  

Rozdzia 4. n Cykl ycia obiektw

105

jest ju kontrolowany przez implementacj JDO. Obiekty mog przej do stanu 


 
 rwnie wtedy, gdy osigalne s za porednictwem innych obiektw trwaych. Proces
ten przebiega tak dugo, a wszystkie instancje osigalne z danego obiektu znajd si w stanie

  lub 
  . Pomidzy wywoaniem metody 
   a zatwierdzeniem transakcji referencje mog ulec zmianie, a osigalne instancje sta si niedostpne.
Takie tymczasowo trwae obiekty znajduj si rwnie w stanie 
  . Jednak ich
stan moe ulec zmianie podczas zatwierdzania transakcji, gdy okae si, e tymczasowo
trwae obiekty nie s ju osigalne.

4.1.1.3. Stan pusty (hollow)


Po pomylnym zakoczeniu transakcji stan obiektu zmienia si z 
   na .
Obiekt w stanie pustym jest referencj, ktra moe reprezentowa pewne dane znajdujce
si w bazie danych, ale ktre nie zostay jeszcze zaadowane do pamici lub s nieaktualne.
Zwykle inni klienci bazy danych lub inne aplikacje JDO posiadaj swobodny dostp oraz
moliwo modyfikacji danych w bazie, ktrych referencj jest pusty obiekt. Gdy aplikacja
bdzie prbowaa uy obiektu w stanie pustym, to obowizkiem implementacji jest ponowne
zaadowanie danych do pamici. Scenariusz ten zostanie szczegowo wyjaniony nieco dalej. Po zatwierdzeniu transakcji zawarto obiektw znajdujcych si w stanie pustym zostaje
usunita w celu zwolnienia pamici. Jeli wrd tych danych znajdoway si referencje obiektw, to mechanizmowi odzyskiwania nieuytkw nie wolno zwolni grafu obiektw.
Stan pusty nie moe zosta stwierdzony przez aplikacj. Nie jest dostpna odpowiednia
w tym celu metoda klasy  
, a prba dostpu do pl takiego obiektu moe spowodowa zmian jego stanu i nie jest wtedy moliwe okrelenie poprzedniego stanu obiektu.

4.1.1.4. Stan persistent-new-deleted


Gdy obiekt znajdujcy si w stanie 
   zostaje usunity przez wywoanie metody

 
 
  , to jego stan zmienia si na 
    .
Przywrcenie takiego obiektu nie jest moliwe i stan 
     jest ostateczny do momentu zakoczenia transakcji. Prba dostpu do pl obiektu znajdujcego si
w stanie 
     spowoduje zgoszenie wyjtku ! 
"# . Nie
dotyczy to jedynie pl wchodzcych w skad klucza gwnego. Po zakoczeniu transakcji
(poprzez wywoanie metody   lub
) usunita instancja przechodzi do
stanu
  .

4.1.2. Odtwarzanie obiektw z bazy danych


Przejdziemy teraz do omwienia zmian stanw instancji, ktre zostaj pocztkowo zaadowane z bazy danych. Diagram zmian stanw dla takich instancji przedstawiony zosta na
rysunku 4.2

106

Cz II n Szczegy

Rysunek 4.2.
Odtwarzanie
instancji z bazy
danych

4.1.2.1. Stan pusty (hollow)


Jak ju wspomnielimy wczeniej, obiekty utworzone w celu reprezentacji referencji danych
zapisanych w bazie danych, ktre nie zawieraj jeszcze danych, znajduj si rwnie w stanie pustym. Prba dostpu do ich pl powoduje zaadowanie danych z bazy. Obiekty znajdujce si w stanie pustym tworzone s za pomoc wywoa metod takich jak "# 
 
 
 # , 
 
 $ %& lub wykonania zapytania. Zwykle trwae pola obiektw z stanie pustym inicjowane s za pomoc wartoci domylnych (0
lub '), ale poniewa obiekty takie tworzone s za pomoc konstruktorw nieposiadajcych argumentw, to konstruktory te mog nadawa tyme polom rwnie inne wartoci
pocztkowe. Na tym moe wanie polega jedyna rnica pomidzy obiektami w stanie pustym, ktre bray wczeniej udzia w transakcji (omwionymi w poprzednim punkcie),
a obiektami w stanie pustym utworzonymi przez implementacj JDO.

4.1.2.2. Stan persistent-clean


Po nadaniu polom obiektu wartoci pobranych z bazy danych obiekt taki przechodzi ze stanu  do stanu 
  , ale tylko wtedy, gdy jego dane nie zostay zmodyfikowane przez biec transakcj. Stan te nosi tak nazw (ang. clean czysty), poniewa
dane obiektu w pamici s spjne z odpowiadajcymi im danymi w bazie. Chocia pobraniem
danych obiektu zajmuje si implementacja JDO, to referencje do innych obiektw rozwizywane s przez instancj klasy 
 
. Referencje te mog wskazywa obiekty,
ktre znajduj si ju w pamici. W przeciwnym razie 
 
tworzy nowe
obiekty w stanie pustym. Zasoby obiektw znajdujcych si w stanie 
   mog
zosta zwolnione przez mechanizm odzyskiwania nieuytkw, jeli w kodzie aplikacji nie
istniej ju referencje do tych obiektw. Jeli obiekty zostay rzeczywicie zwolnione przez
ten mechanizm, to obowizkiem klasy 
 
jest buforowanie ich referencji
i utworzenie nowych obiektw w stanie pustym, gdy okae si, e s one potrzebne.

Rozdzia 4. n Cykl ycia obiektw

107

4.1.2.3. Stan persistent-dirty


Obiekt przechodzi ze stanu  lub 
   do stanu 
  
, gdy
zmodyfikowane zostaje co najmniej jedno jego pole. Stan ten nosi tak nazw (ang. dirty
brudny), poniewa dane obiektu w pamici przestaj by spjne z danymi znajdujcymi
si w bazie. Nawet jeli uzyskana w wyniku modyfikacji warto pola jest taka sama jak
poprzednia, to obiekt i tak przechodzi do stanu 
  
. Co wicej, instancja nie
powraca do stanu  lub 
  , gdy przywrcone zostan poprzednie wartoci pl. Gdy obiektowi znajdujcemu si w stanie 
   lub 
  

zostanie przypisana ulotna instancja, to obiekt taki nie przechodzi do stanu 
  .

4.1.2.4. Stan persistent-deleted


Na skutek wywoania metody 
  
 
   stan obiektu trwaego zmienia si na 
   . Opuszczenie tego stanu czyli przywrcenie usunitej
instancji trwaej moliwe jest jedynie poprzez przerwanie transakcji. Pomylne zatwierdzenie transakcji powoduje przejcie obiektu ze stanu 
    do stanu
  .
Obiekt nie moe zosta ponownie utrwalony z t sam tosamoci tak dugo jak znajduje
si w stanie 
   .

4.1.3. Uproszczony cykl ycia obiektu


Diagram zamieszczony na rysunku 4.3 przedstawia uproszczony cykl ycia obiektu. Obszar
obwiedziony prostoktem Odczyt zawiera stany, w ktrych odczyt (dostp) obiektu nie powoduje zmiany ich stanu. Prostokt Zapis zawiera stany, w ktrych modyfikacja obiektu nie
powoduje zmiany ich stanu.
Rysunek 4.3.
Cykl ycia
obiektu stany
obowizkowe

108

Cz II n Szczegy

4.2. Informacja o stanie obiektu


Wymienionych wczeniej siedem stanw:
  , 
  , 
   
, , 
  , 
  
 i 
    jest obowizkowych
dla wszystkich implementacji JDO. Jednak implementacje JDO nie udostpniaj adnego
interfejsu programowego, ktry umoliwiaby uzyskanie informacji o stanach, w ktrych
znajduj si obiekty JDO. Dokadny stan obiektu znany jest jedynie implementacji JDO,
a niektre stany mog nawet nie by implementowane przez pewnych producentw. Stany
obiektw JDO s zdefiniowane bowiem w sposb behawioralny. Mimo to istniej pewne
metody, ktre pozwalaj sprawdzi atrybuty trwaoci dla danego obiektu i na ich podstawie wnioskowa o stanie obiektu.
Metody te nale do klasy  
:

   

   
   
     
     

Nie istnieje natomiast metoda, ktra pozwalaaby ustali, czy obiekt znajduje si w stanie
pustym. Sposb adowania zawartoci takiego obiektu zaley bowiem od konkretnej implementacji. W dalszej czci rozdziau przedstawimy jednak inny sposb, ktry pozwala uzyska informacj o tym, czy obiekt znajduje si w stanie pustym. Przedstawiona poniej klasa wywietla znaczniki instancji, posugujc si klas  
:
 

     !" # $ $% 

# $&"""'# $&""  $(
" )
*+    
"+ ,   ,(
" )
*+  
"+ ,,(
" )
*+
  
"+ ,  ,(
" )
*+
  
"+ ,   ,(
" )
*+    
"+ ,   ,(
# + +  "+ # $ (
-

Poniszy fragment kodu ilustruje omwione dotd stany i metody:


     # $$ ./

  0$'"+$   0$ (
+    +$ (
&11'&1 (

Rozdzia 4. n Cykl ycia obiektw

109

 !" , 1 &1,%1(


+1   1(
 !" , 2 1 &1,%1(
+     1(
 !" , 3  1 &1,%1(
+    +1 (
 !" , 2  1,%1(
+    +$ (
+1   1(
+    + 
 !" ,4  4  1,%1(
+    +$ (
# $  '1+  (
 !" , 4 ,%1(
1+  ',,51+  (
 !" , "1,%1(
+     1(
 !" , 3  1 &1,%1(
+    + (
 !" ,4  4  1,%1(
-

Wykonanie powyszego kodu spowoduje wywietlenie nastpujcego tekstu:


 1 &16  
2 1 &16     
 3  1 &16       
 2  16  
4  4  16  
 4 6  
 "16     
 3  1 &16       
4  4  16  

4.3. Operacje powodujce zmian stanu


W poprzednim podrozdziale przestawilimy podstawowe stany obiektw oraz operacje takie jak odczyt pola lub usunicie obiektu trwaego z bazy, ktre w oczywisty sposb zmieniaj stan obiektw. W tym podrozdziale przyjrzymy si bliej metodom zmieniajcym stan
obiektw i wyjanimy ich dziaanie bardziej szczegowo. Niektre z tych metod zmieniaj
stan obiektw na skutek bezporedniego ich wywoania, inne wpywaj porednio na stan
wielu obiektw.

110

Cz II n Szczegy

4.3.1. PersistenceManager.makePersistent
Metoda 
  klasy 
 
powoduje przejcie ulotnych obiektw do
stanu 
  . Podczas wykonania tej metody przegldany jest graf obiektu w celu
znalezienia innych obiektw znajdujcych si jeszcze w stanie
  . Rwnie te obiekty
mog niejawnie przej do stanu 
  .

4.3.2. PersistenceManager.deletePersistent
Wywoanie metody  
  powoduje przejcie obiektu ze stanu 
  ,

  
 lub  do stanu 
   , natomiast obiekty znajdujce
si dotychczas w stanie 
   przechodz do stanu 
    . Operacja ta nie ma wpywu na inne osigalne obiekty.

4.3.3. PersistenceManager.makeTransient
Obiekt moe przej do stanu
  pod warunkiem, e jego obecnym stanem jest 

   lub . Na skutek wywoania metody 
  obiekt taki zostaje
wyjty spod kontroli instancji klasy 
 
i traci swoj tosamo. Metoda ta
nie wywiera wpywu na inne obiekty osigalne za porednictwem obiektu, ktry by jej parametrem wywoania.

4.3.4. Transaction.commit
Instancje nalece do biecej transakcji s przetwarzane przez JDO podczas jej zatwierdzania, instancje znajdujce si w stanie  nie zmieniaj swojego stanu, natomiast instancje znajdujce si w stanie ,  lub 
 przechodz do stanu . Wszystkie inne instancje staj si ulotne. Po zatwierdzeniu instancji obiekty znajdujce si w stanie pustym
oraz zwyke, ulotne obiekty jzyka Java pozostaj pod kontrol instancji klasy 
 

.

4.3.5. Transaction.rollback
Na skutek odwoania transakcji obiekty znajdujce si w stanie , 
 lub  
przechodz do stanu . Pozostae obiekty staj si ulotne. Obiekty, ktre znajdoway
si w stanie  lub
  powracaj do swojego poprzedniego stanu.

4.3.6. PersistenceManager.refresh
Wywoanie metody

  powoduje ponowne zaadowanie danych obiektu z bazy na skutek czego wszelkie modyfikacje obiektu zostaj utracone. Metoda ta przeprowadza obiekty
ze stanu 
  
 do stanu 
  .

Rozdzia 4. n Cykl ycia obiektw

111

4.3.7. PersistenceManager.evict
Metoda ta umoliwia zaoszczdzenie pamici przez implementacj buforowania stosowan
w klasie 
 
. Na skutek jej uycia obiekty przechodz ze stanu 
 
 do stanu . Wartoci pl obiektw s przy tym usuwane, aby umoliwi mechanizmowi odzysku nieuytkw zwolnienie podobiektw.

4.3.8. Odczyt pl wewntrz transakcji


Po wczytaniu danych z bazy obiekty przechodz ze stanu  do stanu 
  .
Gdy stosowany jest pesymistyczny algorytm zarzdzania wspbienoci, to obiekt moe
zosta zablokowany dla zapobieenia rwnoczesnej modyfikacji.

4.3.9. Zapis pl wewntrz transakcji


Gdy podczas wykonywania transakcji zmodyfikowane zostaje pole obiektu znajdujcego
si pod kontrol instancji klasy 
 
, to implementacja JDO musi zapamita, e naley pniej zaktualizowa dane tego obiektu w bazie. Obiekt przechodzi wtedy
ze stanu 
   lub  do stanu 
  
. Jeli stosowany jest pesymistyczny algorytm zarzdzania wspbienoci, to implementacja JDO moe zablokowa dostp do obiektu innym klientom tej samej bazy danych. Modyfikacja wartoci pl
obiektw znajdujcych si w stanie
  , 
  
 lub 
   pozostaje bez wpywu na stan takich obiektw. Gdy polu obiektu przypisywany jest inny obiekt,
to zmodyfikowany obiekt przechodzi do stanu 
  
, a obiekt przypisany nie
zmienia swojego stanu.

4.3.10. PersistenceManager.retrieve
Wywoanie metody 
 


( ma ten sam skutek, co odczyt pola obiektu podczas biecej transakcji.

4.4. Wywoania zwrotne


Implementujc metody wywoywane zwrotnie aplikacja moe przej obsug czci omwionych wydarze wystpujcych w cyklu ycia obiektu. Istniej w zasadzie trzy sytuacje,
w ktrych programista aplikacji moe zaimplementowa w ten sposb specjalne zachowanie obiektw trwaych:
n

odczyt lub zapis wartoci pl, ktre nie s trwae lub nie powinny by przetwarzane
przez domylny algorytm JDO,

usuwanie obiektw skadowych,

usuwanie zbdnych referencji.

112

Cz II n Szczegy
Metody wywoywane zwrotnie umieszczone zostay w osobnym interfejsie, ktrego obsuga przypomina sposb obsugi interfejsu etykietowego $(  )
. Jeli klasa
zdolna do trwaoci implementuje interfejs & * , to jest to sygnaem dla implementacji JDO, e naley uy wywoa zwrotnych. W przeciwnym razie nie s one wykorzystywane.

4.4.1. Zastosowania metody jdoPostLoad


Metoda $ + wywoywana jest za kadym razem, gdy obiekt trway zostaje zaadowany z bazy danych czyli, gdy jego stan zmienia si z  na 
  . Dokadniej rzecz ujmujc, metoda ta jest wywoywana w momencie, gdy dane obiektu staj si spjne z danymi zapisanymi w bazie danych.
Interfejs InstanceCallbacks
Jeli klasa implementuje interfejs & * , to metody $ +, $

) 
, $
*
i $
  s automatycznie wywoywane przez implementacj JDO, gdy pola instancji s odczytywane, modyfikowane, zerowane lub obiekty
s usuwane. W przeciwiestwie do interfejsu )
 klasa odpowiedzialna jest
za wywoanie metod interfejsu & * swojej klasy bazowej. Metody interfejsu & * zadeklarowane s jako metody o dostpie publicznym i dlatego naley zwrci uwag, by nie wywoywa ich w innych sytuacjach.

Implementujc metod $ +, moemy zaoszczdzi na kodzie sprawdzajcym pocztkowe przypisanie wartoci ulotnych, poniewa JDO definiuje, e metoda ta wywoywana jest dokadnie raz. Klasa moe wic zaimplementowa metod $ +, aby
przypisa wartoci pocztkowe polom ulotnym, zwaszcza gdy zale one od wartoci pl
trwaych. Moliwo taka jest szczeglnie przydatna, gdy ustalenie tych wartoci wymaga
skomplikowanych oblicze, ktre nie powinny by wykonywane wielokrotnie.
Inne zastosowanie moe polega na rejestrowaniu przez obiekty aplikacji zaadowania
obiektw trwaych z bazy danych. Na przykad w celu odroczenia inicjacji kolekcji do
momentu rzeczywistego jej uycia, co pozwala zaoszczdzi pami i zwikszy efektywno dziaania programu:
 &1
  + +! 71

   00(884 4
&1 # $  8894413
+++
  &1 88944)

    : 
0'* ;0 (88 4 2 
-

Rozdzia 4. n Cykl ycia obiektw

113

884 2  24 


   #  
   
  
   7 
-

4.4.2. Zastosowania metody jdoPreStore


Metoda ta wywoywana jest przed zapisaniem pl do bazy danych. Jedno z zastosowa tej
metody polega na aktualizacji wartoci pl trwaych na podstawie pl, ktre nie s trwae
przed zakoczeniem transakcji. Metoda moe by rwnie wykorzystana w celu sprawdzenia, czy wartoci pl trwaych s spjne lub speniaj ograniczenia. W przypadku, gdy warto pola narusza zdefiniowane ograniczenia, aplikacja moe uniemoliwi ich zapisanie
w bazie danych, zgaszajc wyjtek. Jednak obiekty biznesowe powinny udostpnia metody walidacji umoliwiajce sprawdzenie zgodnoci z naoonymi ograniczeniami. Metody
te powinny by wywoywane przez aplikacj przed zapisaniem danych w bazie. Powizanie
tego rodzaju walidacji ze szkieletem trwaoci nie jest dobr praktyk. Metody $
) 

naley raczej uywa w celu wykrycia bdnych wartoci pojawiajcych si w programie.
Poniej przedstawiamy sposb aktualizacji pola bdcego tablic bajtw za pomoc strumienia serializowanych obiektw, ktre nie s trwae:
 &1
 ! 71

   77(88  2
   ./(88 2$4431 4<= )

    : 
 ! # ' ! # 
& >! #  (
7' 7+  (
+  (
   #  
& >  # '& >  #  (
   #  '   #  (
 +  7(
 +  (
'+$ &  (
884 2  24 
   
  
   7 
-

114

Cz II n Szczegy

4.4.3. Zastosowania metody jdoPreDelete


Metoda $
  wywoywana jest przed usuniciem obiektu z bazy danych na przykad, gdy aplikacja wywoaa metod 
 
 
  . Metoda $

  nie jest wywoywana, gdy obiekt usuwany jest przez innego klienta tej samej bazy danych lub przez inne, wykonywane rwnolegle transakcje. Metoda $
  powinna by uywana jedynie dla obiektw znajdujcych si w pamici. Typowym jej zastosowaniem jest usuwanie podobiektw zalenych od danego obiektu:
 &1#;"
 ! 71

88 1 &1#;"94=6
7  ;  (
7 1 (
   
  
882<? 3  0$
  0$'
)
*+$   0$ ; (
88  ;  %1 @
+  > ;  (
884 2  24 
    : 
   #  
   7 
-

Spoeczno zwizana z JDO toczya dugie dyskusje dotyczce tego, czy obsuga obiektw
zalenych powinna odbywa si w kodzie rdowym w jzyku Java czy raczej by zadeklarowana w pliku metadanych JDO. Kolejny przykad zastosowania metody $
 
pokazuje sposb wyrejestrowania obiektu z innego obiektu, ktry posiada jego referencj.
Implementacja tej operacji moe by cakiem skomplikowana, gdy model obiektowy danej
aplikacji rozronie si. A oto prosty przykad:
 > 
 ! 71

88 1 > 4113 1 &1#;"
7  ;  (
 &1#;"
 ! 71

">  (8829A21
88$?= 446
&1#;" > 
 ; + '(
 + ;  + ; (
-

Rozdzia 4. n Cykl ycia obiektw

115

  &1#;" 8B$44)


B888  1 
8841 %1 A4
   
  
 + ;  +  ; (
884 2  24 
    : 
   #  
   7 
-

Uywajc JDO mamy zawsze moliwo wyboru modelowania zwizku pomidzy obiektami za pomoc referencji wprzd (instancja ,  posiada instancje %)) lub referencji wstecz (instancje %) nale do instancji , ). Nawigacja od obiektu nadrzdnego do podrzdnego wymaga zapytania (odnalezienia instancji %) posiadajcej
referencj wskazanej instancji , ). Wybr sposobu modelowania zwizkw pomidzy
obiektami naley do aplikacji. Gdy do wyrejestrowania obiektw uywane s zwrotne wywoania metod, to konieczne jest zastosowanie referencji wstecz (%)  ).

4.4.4. Zastosowania metody jdoPreClear


Metoda $
*
zostaje wywoana, gdy obiekt przechodzi do stanu  lub
 
ze stanu 
   , 
    , 
   lub 
 

 na skutek zakoczenia transakcji. Wywoanie tej metody moe by uyte w celu wyzerowania nietrwaych referencji innych obiektw, aby umoliwi zwolnienie zajmowanych
przez nie zasobw mechanizmowi odzyskiwania nieuytkw. Inne potencjalne zastosowania to wyrejestrowanie jednych obiektw z innych obiektw bd zerowanie pl ulotnych
lub nadawanie im niedozwolonych wartoci dla zapobieenia przypadkowemu dostpowi
do wyzerowanych instancji.

4.5. Stany opcjonalne


JDO definiuje stany opcjonalne, ktre mog zosta zaimplementowane przez producenta
implementacji JDO. Zadaniem tych stanw jest umoliwienie posugiwania si obiektami
trwaymi, ktre mog nie zawiera spjnych danych na zewntrz aktywnej transakcji. Stany
te mog by rwnie wykorzystane dla obiektw ulotnych, ktre powinny zachowywa si
jak obiekty trwae w obrbie aktywnej transakcji. Zanim jednak aplikacja rozpocznie korzystanie z tych opcjonalnych moliwoci, powinna najpierw sprawdzi ich dostpno za pomoc metody 
 
- 
 ' 
  .

116

Cz II n Szczegy

4.5.1. Ulotne instancje transakcyjne


Ulotne instancje klas zdolnych do trwaoci mog sta si transakcyjne, ale nie trwae na
skutek wywoania metody 
 

  . Obiekty takie nazywamy
ulotnymi instancjami transakcyjnymi. Ich dane zapisywane s w pewien sposb podczas
wywoania metody 
   i odtwarzane w przypadku odwoania transakcji, jednak nie s utrwalane w bazie danych. Moliwo taka jest szczeglnie przydatna w sytuacji,
gdy skomplikowana operacja modyfikuje wiele obiektw i moe zosta odwoana. Ulotne
obiekty znajdujce si w pamici zostaj rwnie powizane w sensie transakcji z obiektami trwaymi bdcymi pod kontrol tej samej instancji klasy 
 
.
Ulotne instancje transakcyjne s dostpne w JDO jedynie opcjonalnie, jednak ju podczas
pisania tej ksiki oferowaa je wikszo producentw implementacji JDO. Po wywoaniu
metody 
   ulotna instancja przechodzi do stanu
  . Mimo e
jej dane s nowe lub zmodyfikowane, to wywoanie to stanowi jedynie informacj dla instancji 
 
, e powinna ledzi modyfikacje tego obiektu. Gdy ulotna instancja
zostaje zmodyfikowana, przechodzi w stan
  
 i jej pola trwae s w celu pniejszego odtworzenia kopiowane. Istniej dwa przypadki, w ktrych metoda 
 
 moe zosta wywoana: przed i po rozpoczciu aktywnej transakcji. W pierwszym
przypadku zapisane zostan dane obiektu w momencie rozpoczcia transakcji. W drugim
dane obiektu, ktre posiada w momencie wywoania metody 
  .
Instancje przechodz ze stanu
  
 do stanu
   w momencie zatwierdzenia lub odwoania transakcji. Jeli transakcja zostaa odwoana, przywracane s
wczeniej zachowane wartoci pl. Instancje znajdujce si w stanie
   mog rwnie przej do stanu 
   na skutek wywoania metody .

 . Zarwno instancje znajdujce si w stanie
  , jak i
  
mog przej do stanu 
   na skutek wywoania metody 
  .
Diagram przedstawiony na rysunku 4.4 prezentuje moliwe przejcia pomidzy rnymi
stanami ulotnych instancji transakcyjnych.
Rysunek 4.4.
Cykl ycia
ulotnych instancji
transakcyjnych

Rozdzia 4. n Cykl ycia obiektw

117

4.5.2. Zastosowania ulotnych instancji transakcyjnych


Podstawowym celem stosowania ulotnych instancji transakcyjnych jest zapewnienie przezroczystego posugiwania si obiektami przez aplikacje. Dziki temu nie ma ju znaczenia,
czy dany obiekt jest ulotny czy trway w obu przypadkach jego dane zostan przywrcone, gdy transakcja zostanie odwoana. Przykadem zastosowanie moe by tutaj aplikacja
wykorzystujca okno dialogowe umoliwiajce konfiguracj rnych parametrw. Okno
takie moe zawiera zarwno trwae dane o konfiguracji, jak i lokalne, ulotne informacje.
Posugujc si ulotnymi instancjami transakcyjnymi, implementacja okna dialogowego
moe po prostu odwoa wszelkie modyfikacje, gdy uytkownik kliknie przycisk Cancel.

4.5.3. Instancje nietransakcyjne


Instancje nietransakcyjne umoliwiaj obsug rzadko zmieniajcych si, niespjnych danych oraz realizacj transakcji optymistycznych. W niektrych sytuacjach aplikacja moe
chcie jawnie wczyta dane do obiektw, ale nie interesuj jej modyfikacje wykonane przez
innych klientw tej samej bazy. Instancje nietransakcyjne mog by rwnie wynikiem zakoczonych transakcji.
JDO definiuje cztery rne waciwoci zmieniajce cykl ycia obiektw JDO:
n .
  /
n .
  0
 
n / 1'
n   

Aplikacja wybiera jedn lub wicej wymienionych waciwoci, aby wczy opcje dziaania
instancji klasy 
 
przed jej pierwszym uyciem. Opcje te stosowane s
przede wszystkim ze wzgldu na bezpieczestwo. Aplikacja moe bowiem przypadkowo
zmodyfikowa obiekt poza kontekstem transakcji, ale modyfikacja taka zostanie utracona
lub wczytane zostan nieprawidowe dane. A oto przykad sytuacji, w ktrej modyfikacja
zostaje zagubiona:
Klient A pobiera instancj.
Klient B pobiera t sam instancj.
Klient A modyfikuje instancj.
Klient B rwnie modyfikuje instancj.
Klient B zatwierdza transakcj.
Klient A zatwierdza transakcj (zastpujc modyfikacje dokonane przez klienta B).
Podobna sytuacja moe wystpi, gdy dane zostaj zmodyfikowane pomidzy dwiema kolejnymi operacjami odczytu:
Klient A zlicza wszystkie wypoyczone ksiki.
Klient B wypoycza ksik.

118

Cz II n Szczegy
Klient B zatwierdza transakcj.
Klient A zlicza wszystkie ksiki w bibliotece (bez jednej brakujcej).

4.5.3.1. Opcja NontransactionalRead


Opcja ta umoliwia aplikacji odczyt pl instancji, ktra nie jest transakcyjna lub znajduje
si w stanie  poza jakkolwiek transakcj. Umoliwia rwnie nawigacj i wykonywanie zapyta poza aktywn transakcj. Stan umoliwiajcy obsug danych pl, ktre nie
s spjne ani transakcyjne na zewntrz aktywnej transakcji nosi nazw 
  

  . Aplikacja moe wymusi przejcie obiektu znajdujcego si w stanie 

  do stanu 
  
   poprzez wywoanie metody 


.
  . Naley jednak zwrci uwag na efekty uboczne
i inne problemy zwizane z odczytem obiektw poza transakcjami.

4.5.3.2. Opcja NontransactionalWrite


Aktywacja tej opcji umoliwia modyfikacje instancji, ktre nie s transakcyjne na zewntrz
jakichkolwiek transakcji. Jednak modyfikacje takie nie zostaj nigdy zapisane w bazie danych. JDO nie definiuje sposobu przejcia instancji do stanu 
  
  
na skutek modyfikacji instancji poza transakcj (gdy opcja .
  0
  ma warto
').

4.5.3.3. Zastosowania instancji nietransakcyjnych


Z punktu widzenia architektury programu zastosowanie instancji nietransakcyjnych nie jest
zalecane z powodu potencjalnych problemw ze spjnoci danych. Zasady projektowania
zwizane z obsug transakcji omwione zostan w rozdziale 11. Istniej jednak wyjtkowe
sytuacje, w ktrych zastosowanie obiektw nietransakcyjnych ujawnia swoje zalety:
n

Gdy aplikacja musi wywietla pewne dane statystyczne co pewien czas, ale nie
jest istotne, by dane te byy aktualne w cile okrelonym momencie. Motywacj
takiego rozwizania moe by ch uniknicia zakce procesu obliczeniowego
przez proces prezentacji. W pewnych warunkach konieczne moe okaza si nawet
buforowanie wywietlanych danych i odczytywanie jedynie ich zmian.

Gdy aplikacja wyposaona w graficzny interfejs uytkownika uywa JDO


do przechowywania danych o swojej konfiguracji, ktra zostaje zaadowana
w okrelonym momencie przez inn cz systemu. Podczas edycji konfiguracji
transakcyjne zachowanie danych jest zbdne. Jedynie zmiana caej konfiguracji
powinna by atomowa, spjna, izolowana i trwaa.

4.5.3.4. Opcja RetainValues


JDO zeruje wszystkie obiekty trwae, gdy przechodz one do stanu . Umoliwia to pozbycie si zbdnych referencji i odzyskanie zajmowanej pamici. Jeli opcja / 1'
posiada warto
', to podczas zatwierdzania transakcji obiekty znajdujce si w stanie

Rozdzia 4. n Cykl ycia obiektw

119


  , 
   lub 
  
 przechodz do stanu 
 

   zamiast do stanu . Wartoci pl zostaj zachowane w celu p-

niejszego wykorzystania. Ich odczyt po zakoczeniu transakcji jest dozwolony. W porwnaniu do opcji .
  / po zakoczeniu transakcji nie jest moliwa nawigacja
po obiektach znajdujcych si w stanie  i odczyt ich danych.

4.5.3.5. Opcja RestoreValues


Jeli opcja / 
1' nie ma wartoci
', to opisany wyej efekt dziaania opcji /
1' jest moliwy tylko w przypadku zatwierdzenia transakcji. W przypadku odwoania transakcji instancje przejd bowiem do stanu  i tym samym odczyt ich pl nie
bdzie moliwy (przestan by dostpne dla aplikacji). Natomiast gdy opcja / 
1'
ma warto
', to JDO musi odtworzy poprzednie wartoci pl obiektw znajdujcych
si w stanie 
  
 w momencie odwoania transakcji. Odwoanie transakcji sprawia, e obiekty znajdujce si w stanie 
   lub 
  
 przechodz
do stanu 
  
   i tym samym staj si dostpne dla aplikacji.

4.5.4. Transakcje optymistyczne


JDO umoliwia take zarzdzanie transakcjami optymistycznymi. Ich dziaanie przypomina
dziaanie systemu zarzdzania wersjami kodu rdowego, ktry, zamiast blokowa dostp
do poszczeglnych dokumentw, umoliwia rwnoczesn prac wielu programistw. Warto
przy tym zauway, e zarzdzanie transakcjami optymistycznymi zmienia sposb przej
obiektw trwaych pomidzy stanami. Rozpoczynajc transakcj optymistyczn, aplikacja
zakada, e zablokowanie obiektw niepotrzebnie opni dostp innych uytkownikw, dlatego te konflikty pomidzy rnymi operacjami rozwizywane s dopiero podczas zatwierdzania transakcji. JDO osiga to poprzez umoliwienie modyfikacji obiektw trwaych, ktre zawieraj dane transakcyjne. Gdy aplikacja da od JDO zatwierdzenia transakcji, to
implementacja JDO sprawdza najpierw, czy dane zostay zmodyfikowane w czasie, ktry
min od ich zaadowania (zwykle uywajc wewntrznego mechanizmu identyfikacji wersji danych) i jeli tak, to odwouje transakcj, sygnalizujc aplikacji wystpienie problemu
z wersj danych. W ten sposb moliwy jest jednoczesny dostp do danych dla wielu klientw, ktry gwarantuje, e adne dane nie zostan utracone. Wad takiego rozwizania jest
oczywicie to, e aplikacja musi ponownie zada zatwierdzenia transakcji, uwzgldniajc
now, aktualn wersj danych. Z tego powodu mechanizm zarzdzania stanami obiektw
dopuszcza moliwo odwieenia danych obiektw znajdujcych si w stanie  lub

  , zanim aplikacja uyje ich wewntrz transakcji.
Jeli aplikacja zdecyduje si uywa transakcji optymistycznych, to podczas odczytu pola
instancji znajdujcych si w stanie  przechodz one do stanu 
  
 
  zamiast do stanu 
   (patrz rysunek 4.5). Modyfikacja wartoci pola
trwaego powoduje przejcie instancji do stanu 
  
 tak samo jak w przypadku transakcji pesymistycznych. Aplikacja musi jawnie zada odwieenia danych zapisanych w bazie zanim wykonana zostanie ich aktualizacja na podstawie bazy danych.
Zalety i wady transakcji optymistycznych zostan wyjanione w rozdziale 11.

120

Cz II n Szczegy

Rysunek 4.5.
Cykl ycia
obiektu:
dostp poza
transakcjami

4.6. Przykady
Zamieszczone poniej przykady kodu stanowi ilustracj sposobw sprawdzania stanu
obiektw oraz zastosowania wywoa zwrotnych w celu identyfikacji typowych problemw.
Przedstawiona zostanie klasa pomocnicza umoliwiajca uzyskanie informacji o stanie
obiektw, licznie obiektw w pamici, liczbie obiektw w wybranym stanie i tak dalej. Poniewa wikszo producentw implementacji JDO nie udostpnia metod umoliwiajcych
uzyskanie informacji o zawartoci buforw podrcznych wykorzystywanych przez instancj klasy 
 
, to posiadanie wasnego, niezalenego rozwizania w tym
zakresie jest bardzo przydatne.
Wszystkie przedstawione poniej metody umieszczone zostay w pliku rdowym DebugStates.java.
Pierwsza z omawianych metod umoliwi uzyskanie identyfikatora obiektu w pamici. Prosty sposb jego uzyskania polega na wywoaniu metody    *. Chocia uzyskany w ten sposb identyfikator nie jest unikalny, to jednak wystarcza w przypadku wikszoci maszyn wirtualnych i umoliwia ledzenie obiektw znajdujcych si w ich pamici:
    # $$ 0!  

$ '# +   * ;7  (
 :$+ # $  %C(88 <=   4  1
-

Kolejna metoda bdzie zwraca acuch, ktry zawiera zarwno identyfikator obiektu trwaego w pamici, jak i jego skrt bdcy wynikiem zastosowania metody mieszajcej. Jeli
obiekt nie jest jeszcze trway, to metoda zwrci jedynie jego identyfikator:
    # $$ !  

"  "   7
  0$'
)
*+$   0$ (
" @'
 ,D,5$ 0! 5
,!
6,5+$  ! (
 ,D,5$ 0! 5,1!
,(
-

Rozdzia 4. n Cykl ycia obiektw

121

Aby uzyska wicej informacji o cyklu ycia obiektw, posuymy si tablic licznikw ledzcych liczb rnych instancji trwaych. Liczniki te bd zwikszane przez metody nalece do interfejsu & * oraz konstruktory nie posiadajce argumentw, ktrych implementacja JDO uywa do tworzenia nowych obiektw w stanie pustym. Poniewa
tablica ta posuguje si sabymi referencjami obiektw, umoliwia rwnie zliczenie obiektw, ktrych zasoby zostay zwolnione przez mechanizm odzyskiwania nieuytkw.
Poniej przedstawiamy przykad klasy, ktra posuguje si klas ')   do zliczania
wywoa zwrotnych swoich metod:
 > ;
 ! 71

   # $(
> ; # $
 ; +'(
# $ # $ 

 ,> 6,5(
8B
B9 41 1 2 
B 4;1 A  +
BE 1   1 1 
$#   +
B8
  > ; 


$#   +   ; (
880  24 44)

88 $ 1 
$#   6
    : 

$#   + : ; (
   #  

$#   +#  ; (
   7 

$#   +7 ; (
   
  

$#   +
  ; (
-

Metody klasy ')   , do ktrych klasa ,' 


oddelegowaa metody wywoywane
zwrotnie, aktualizuj odpowiedni element tablicy w oparciu o identyfikator obiektu. Jeli
element tablicy dla takiego obiektu jeszcze nie istnieje, to zostaje dodany:

122

Cz II n Szczegy
      '  (
          

  +$  (
8B
B9 4  =2441 1 
B1 4   2<%1 A  $ A+
B8
        

   +  55(
88+++  1   " ! 71 +++
  $   

:$ ':$ # +   * ;7  (
   '    +$  (
"  ''
 '    %(
 +  % (
  (
-

Gdy kady obiekt reprezentowany jest w tablicy, to atwo moemy policzy wszystkie obiekty lub obiekty pewnego rodzaju. Ponisza metoda pozwala uzyska informacje o zuyciu
pamici przez obiekty trwae:
# $$ #    

    '(
  : '(
 # '(
 7'(
 
 '(
  '(
 $ '(
" ! '!  (+;  (
  '+ (
 55(
" +$ ''$ 55(
   5'+  (
 : 5'+ : (
# 5'+# (
75'+7(

 5'+
 (
# $:'# +$   ,+  ,(
# $  '
,41 A6,5 5:5
,4;19 16,5$ 5:5

Rozdzia 4. n Cykl ycia obiektw

123

,2F1 1 A6,5   5:5


,2F : 6,5 : 5:5
,2F# 6,5# 5:5
,2F76,575:5
,2F
 6,5
 5:(
   (
-

Wynik dziaania tej metody moe by interesujcy ju w przypadku utworzenia dwch obiektw przez nastpujcy fragment kodu:
+    +$ (
> ;'> ; ,*1&4,(
&1'&1 ,7)
,%(

Wywoanie metody  )    spowoduje w tym przypadku wywietlenie nastpujcych


informacji:
41 A6G
4;19 16
2F1 1 A6G
2F : 6
2F# 6
2F76
2F
 6

Chocia konstruktor bez argumentw nie zosta jawnie wywoany przez przedstawiony wyej fragment kodu, to jednak klasa ')   wyledzia utworzenie dwch obiektw.
Obiekty te uywane s przez implementacj JDO jako obiekty fabryki suce do tworzenia
instancji klas ,' 
i %. Wywoanie konstruktora bez argumentw zostao dodane podczas rozszerzania kodu bajtowego z powodw zwizanych z bezpieczestwem, ktre omwione zostan w rozdziale 10.
Podczas utrwalania obu obiektw (w tym obiektu klasy ,' 
poprzez osigalno z obiektu
klasy %):
+1   (
+    + (

wywoane zostan zwrotnie dla kadego z nich metody


) 
 i
*
:
41 A6G
4;19 16
2F1 1 A6G
2F : 6
2F# 6G
2F76G
2F
 6

Kolejny test spowoduje wywietlenie liczby obiektw zawartych w ekstensji klasy %:
+    +$ (
  '+$   &1+ % (
!   '+   (
;  +;  
&1' &1 + (
# $  '+  (88 4 1 1 > ;@
-

124

Cz II n Szczegy
Jeli baza zawieraa po 20 instancji kadej z klas % i ,' 
, to utworzone zostay 42
obiekty (w tym dwa jako fabryki). Metody  + i
*
wywoane zostay jedynie
dla instancji klasy %, poniewa pozostae obiekty znajdoway si w stanie pustym:
41 A6HG
4;19 16
2F1 1 A6HG
2F : 6G
2F# 6
2F76G
2F
 6

4.7. Podsumowanie
W rozdziale tym omwilimy cykl ycia obiektw JDO niezbdny do zrozumienia dynamicznego aspektu instancji trwaych i transakcyjnych. Przedstawilimy rwnie sposoby uzyskania informacji o stanie obiektw oraz zastosowania metod wywoywanych zwrotnie.
Omwione zostay rwnie opcjonalne stany obiektw JDO oraz przedstawiona zostaa przydatna klasa umoliwiajca ledzenie stanu obiektw JDO.
Znajomo cyklu ycia obiektw JDO jest konieczna do zrozumienia bardziej zaawansowanych problemw zwizanych z zastosowaniami JDO. Dodatek A zawiera kompletn tabel
przej pomidzy stanami obiektw JDO.

You might also like