SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Java Data Objects
                                         Autorzy: Sameer Tyagi, Keiron McCammon,
           KATALOG KSI¥¯EK               Michael Vorburger, Heiko Bobzin
                                         T³umaczenie: Jaromir Senczyk
                      KATALOG ONLINE     ISBN: 83-7361-392-7
                                         Tytu³ orygina³u: Core Java Data Objects
       ZAMÓW DRUKOWANY KATALOG           Format: B5, stron: 456
                                         Przyk³ady na ftp: 107 kB

              TWÓJ KOSZYK                Ksi¹¿ka „Java Data Objects”:
                    DODAJ DO KOSZYKA        • Demonstruje praktyczne techniki stosowane przez zawodowych programistów
                                            • Zawiera poprawny, gruntownie przetestowany kod ród³owy programów oraz
                                              przyk³ady zaczerpniête z praktyki
         CENNIK I INFORMACJE                • Skoncentrowana jest na nowoczesnych technologiach, które musz¹ poznaæ
                                              programi ci
                                            • Zawiera rady profesjonalistów, które pozwol¹ czytelnikowi tworzyæ najlepsze
                   ZAMÓW INFORMACJE           programy
                     O NOWO CIACH
                                         Java Data Objects (JDO) przyspiesza tworzenie aplikacji w Javie dostarczaj¹c
                       ZAMÓW CENNIK      obiektowego mechanizmu trwa³o ci i standardowych interfejsów umo¿liwiaj¹cych
                                         korzystanie z baz danych. Ksi¹¿ka ta jest wszechstronnym przewodnikiem po
                                         zagadnieniach trwa³o ci JDO, przeznaczony dla zaawansowanego programisty.
                 CZYTELNIA               Korzystaj¹c z realistycznych przyk³adów kodu autorzy przedstawiaj¹ sposoby
                                         tworzenia, pobierania, aktualizacji i usuwania obiektów trwa³ych, cykl ¿ycia obiektów
          FRAGMENTY KSI¥¯EK ONLINE       i przej cia pomiêdzy stanami, klasy i interfejsy JDO, zapytania, architekturê, problemy
                                         bezpieczeñstwa 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™.
                                         Je li chcesz po wiêciæ wiêcej czasu na rozwi¹zywanie zagadnieñ biznesowych,
                                         a mniej traciæ na zajmowanie siê problemem trwa³o ci, to potrzebujesz w³a nie JDO
                                         i jednej dobrej ksi¹¿ki, która pomo¿e Ci efektywnie u¿yæ JDO: „Java Data Objects”.
                                            • Omówienie specyfikacji JDO i podstawowych zagadnieñ zwi¹zanych
                                              z trwa³o ci¹ obiektów
                                            • Programowanie z u¿yciem JDO; najwa¿niejsze klasy i obiekty
                                            • Cykl ¿ycia obiektów
Wydawnictwo Helion                          • Wyszukiwanie danych w JDO
ul. Chopina 6                               • Przyk³adowa architektura i jej konstrukcja z u¿yciem JDO
44-100 Gliwice                              • JDO a J2EE: JCA, EJB, transakcje, bezpieczeñstwo
tel. (32)230-98-63                          • Porównanie JDO z JDBC
e-mail: helion@helion.pl                    • Przysz³o æ JDO i rozwój tej specyfikacji
                                            • Studium przypadku
                                         Uzupe³nieniem s¹ liczne dodatki omawiaj¹ce miêdzy innymi: stany JDO, metadane,
                                         jêzyk JDOQL w notacji BNF i dostêpne implementacje JDO.
Spis treści
  O Autorach...................................................................................................................................................13

  Przedmowa .................................................................................................................................................15

  Wstęp.......................................................................................................................................................... 23

Część I Wprowadzenie                                                                                                                                          25
  Rozdział 1. Przegląd specyfikacji JDO...................................................................................................... 27
       1.1. Powstanie specyfikacji JDO..................................................................................... 27
       1.2. Obiektowy model dziedziny ..................................................................................... 27
       1.3. Trwałość ortogonalna ............................................................................................. 30
          1.3.1. Obiekty trwałe i obiekty ulotne ........................................................................ 33
       1.4. Środowiska zarządzane i niezarządzane ................................................................... 36
          1.4.1. Środowiska niezarządzane.............................................................................. 36
          1.4.2. Środowiska zarządzane .................................................................................. 36
       1.5. Role i obowiązki..................................................................................................... 37
          1.5.1. Specyfikacje JDO ........................................................................................... 38
          1.5.2. Obowiązki programisty ................................................................................... 38
          1.5.3. Obowiązki producenta .................................................................................... 40
       1.6. Podsumowanie ...................................................................................................... 41

  Rozdział 2. Podstawowe zagadnienia dotyczące trwałości obiektów .................................................. 43
       2.1. Trwałość i aplikacje................................................................................................ 43
       2.2. Serializacja binarna JDK ......................................................................................... 44
          2.2.1. Interfejs programowy serializacji...................................................................... 44
          2.2.2. Zarządzanie 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 typów String, Date i innych........................................................ 50
          2.3.3. Odwzorowanie dziedziczenia ........................................................................... 51
4       Java Data Objects

           2.3.4. Bezpieczeństwo............................................................................................. 53
           2.3.5. Translacja języka zapytań ............................................................................... 54
           2.3.6. Spójność referencyjna, usuwanie obiektów i inne zagadnienia ........................... 54
           2.3.7. Trwałość transparentna i odwzorowania O/R.................................................... 54
           2.3.8. Identyfikacja.................................................................................................. 55
        2.4. Tworzenie własnej warstwy odwzorowania O/R ......................................................... 56
           2.4.1. Buforowanie .................................................................................................. 56
           2.4.2. Transakcyjny dostęp 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 Szczegóły                                                                                                                 63
    Rozdział 3. Rozpoczynamy programowanie z u yciem JDO .................................................................. 65
        3.1. Jak działa 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. Połączenie 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. Obsługa wyjątków ................................................................................................ 92
        3.11. Tożsamość obiektów ............................................................................................ 93
        3.12. Typy tożsamości obiektów .................................................................................... 94
           3.12.1. Tożsamość na poziomie bazy danych ............................................................ 95
           3.12.2. Tożsamość na poziomie aplikacji .................................................................. 95
           3.12.3. Tożsamość nietrwała ................................................................................... 98
        3.13. Cykl życia obiektu ................................................................................................ 98
        3.14. Sterowanie współbieżnością ................................................................................. 99
           3.14.1. Transakcje ACID ........................................................................................ 100
           3.14.2. Transakcje optymistyczne........................................................................... 100
        3.15. Podsumowanie .................................................................................................. 101
Spis treści              5


Rozdział 4. Cykl ycia obiektów...............................................................................................................103
     4.1. Cykl życia obiektu trwałego ................................................................................... 103
        4.1.1. Utrwalanie obiektu ....................................................................................... 104
        4.1.2. Odtwarzanie obiektów z bazy danych ............................................................. 105
        4.1.3. Uproszczony cykl życia obiektu...................................................................... 107
     4.2. Informacja o stanie obiektu .................................................................................. 108
     4.3. Operacje powodujące 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 pól wewnątrz transakcji...................................................................... 111
        4.3.9. Zapis pól wewnątrz transakcji ....................................................................... 111
        4.3.10. PersistenceManager.retrieve ...................................................................... 111
     4.4. Wywołania 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. Przykłady ............................................................................................................. 120
     4.7. Podsumowanie .................................................................................................... 124

Rozdział 5. Programowanie w JDO .........................................................................................................125
     5.1. Koncepcje JDO .................................................................................................... 125
        5.1.1. Zdolność do trwałości .................................................................................. 126
        5.1.2. Metadane JDO............................................................................................. 126
        5.1.3. Domyślna grupa pobierania .......................................................................... 128
        5.1.4. Trwałość poprzez osiągalność....................................................................... 128
        5.1.5. Obiekty klas pierwszej i drugiej kategorii........................................................ 129
        5.1.6. Tożsamość obiektów.................................................................................... 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 wyjątków .................................................................................................... 182
        5.4.1. JDOException .............................................................................................. 183
        5.4.2. JDOFatalException ....................................................................................... 183
6        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 tożsamości ...................................................... 191
         6.2. Wyszukiwanie zbioru obiektów za pomocą ekstensji................................................ 193
         6.3. Wyszukiwanie obiektów za pomocą zapytań ........................................................... 194
            6.3.1. Zapytania dla ekstensji ................................................................................ 197
         6.4. JDOQL ................................................................................................................ 197
            6.4.1. Specyfikacja filtrów ...................................................................................... 199
         6.5. Zapytania, filtry i parametry opcjonalne.................................................................. 204
            6.5.1. Deklaracje parametrów ................................................................................ 204
            6.5.2. Deklaracje poleceń importu .......................................................................... 206
            6.5.3. Deklaracje zmiennych .................................................................................. 206
            6.5.4. Uporządkowanie wyników zapytania............................................................... 207
            6.5.5. Przestrzenie nazw w zapytaniach................................................................... 208
         6.6. Więcej 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. Wybór innego języka 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. Porównania baz danych ................................................................................ 216
         7.3. J2EE, RMI i CORBA .............................................................................................. 217
         7.4. Środowiska zarządzane i niezarządzane ................................................................. 218
            7.4.1. Zarządzanie połączeniami............................................................................. 219
            7.4.2. Zarządzanie transakcjami ............................................................................. 220
Spis treści               7

        7.5. Aplikacje wielowątkowe ........................................................................................ 221
           7.5.1. Programowanie wielowątkowe....................................................................... 221
           7.5.2. Uproszczone programowanie wielowątkowe ................................................... 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. Zarządzanie połączeniami............................................................................. 228
           8.3.3. Zarządzanie transakcjami ............................................................................. 230
           8.3.4. Bezpieczeństwo........................................................................................... 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. Zarządzanie transakcjami ............................................................................. 240
           9.2.2. Przykład komponentu sesyjnego, który nie ma stanu i używa transakcji
               zarządzanych przez kontener ............................................................................. 243
           9.2.3. Przykład komponentu sesyjnego, który ma stan i używa transakcji
               zarządzanych przez kontener ............................................................................. 245
           9.2.4. Architektura zorientowana na usługi (SOA) ..................................................... 247
        9.3. Komponenty sterowane komunikatami i JDO .......................................................... 257
           9.3.1. Przykład kodu .............................................................................................. 258
        9.4. Komponenty Entity i JDO ...................................................................................... 259
           9.4.1. Trwałość zarządzana przez komponent i JDO.................................................. 261
        9.5. Kiedy używać EJB? ............................................................................................... 261
           9.5.1. Skalowalne aplikacje JDO i łączenie w klastry ................................................ 265
           9.5.2. Rozwiązania z transmisją w obu kierunkach ................................................... 266
        9.6. Podsumowanie .................................................................................................... 268

   Rozdział 10. Bezpieczeństwo ...................................................................................................................271
        10.1. Poziomy bezpieczeństwa .................................................................................... 271
           10.1.1. Bezpieczeństwo na poziomie pól i klas ........................................................ 271
           10.1.2. Bezpieczeństwo na poziomie bazy danych.................................................... 272
           10.1.3. Bezpieczeństwo na poziomie aplikacji ......................................................... 273
        10.2. Implementacja interfejsu PersistenceCapable ...................................................... 273
           10.2.1. Referencyjne narzędzie rozszerzania kodu.................................................... 275
           10.2.2. Zasady działania........................................................................................ 277
           10.2.3. Śledzenie dostępu do pola ......................................................................... 279
           10.2.4. Dostęp do metadanych .............................................................................. 282
           10.2.5. Plik zasad bezpieczeństwa ......................................................................... 283
           10.2.6. Problemy z bezpieczeństwem...................................................................... 283
8        Java Data Objects

         10.3. Bezpieczeństwo aplikacji .................................................................................... 284
            10.3.1. Bezpieczeństwo połączeń ........................................................................... 284
            10.3.2. Środowiska zarządzane .............................................................................. 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 wartości .......................................................... 305
            11.3.4. JDO i transakcje serwera aplikacji J2EE ....................................................... 306
            11.3.5. Interfejs Transaction i synchronizacja za pomocą zwrotnych wywołań 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 możliwości JDBC 3.0......................................................................... 320
            12.1.4. Rozszerzenia interfejsu JDBC...................................................................... 321
         12.2. Przykład: przechowywanie obiektów w relacyjnej bazie danych za pomocą JDBC ...... 322
         12.3. Porównanie JDBC i JDO ...................................................................................... 325
            12.3.1. Porównanie możliwości JDBC i JDO ............................................................. 328
            12.3.2. Nieporozumienia związane z JDBC i JDO ...................................................... 328
            12.3.3. Kiedy używać JDBC .................................................................................... 333
            12.3.4. Kiedy używać razem JDO i JDBC? ................................................................ 339
         12.4. Podsumowanie .................................................................................................. 339

    Rozdział 13. Wskazówki, triki i najlepsze rozwiązania.........................................................................341
         13.1. Modelowanie danych.......................................................................................... 341
            13.1.1. Wprowadzenie ........................................................................................... 341
            13.1.2. Klasy obudowujące i typy podstawowe......................................................... 342
            13.1.3. Referencje obiektów trwałych...................................................................... 343
            13.1.4. Pola o typie kolekcji ................................................................................... 343
            13.1.5. Modelowanie związków odwrotnych ............................................................. 346
            13.1.6. Hierarchie dziedziczenia ............................................................................. 348
            13.1.7. Klasy świadome trwałości .......................................................................... 348
         13.2. JDO i serwlety.................................................................................................... 349
         13.3. Wyodrębnienie klas należących do modelu dziedziny............................................. 352
Spis treści              9

     13.4. Wykorzystanie XML-a jako formatu wymiany danych .............................................. 353
        13.4.1. Wprowadzenie ........................................................................................... 354
        13.4.2. Alternatywy................................................................................................ 355
        13.4.3. Dostępne technologie ................................................................................ 355
        13.4.4. Przykład .................................................................................................... 358
     13.5. Kontrola poprawności 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. Zagnieżdżanie transakcji ............................................................................ 368
        14.1.2. Punkty odwoływania transakcji .................................................................... 368
        14.1.3. Jawne blokowanie...................................................................................... 369
     14.2. Optymalizacja wydajności ................................................................................... 369
     14.3. Zarządzanie związkami ....................................................................................... 369
        14.3.1. Związki dwukierunkowe .............................................................................. 370
        14.3.2. Usuwanie kaskadowe................................................................................. 370
        14.3.3. Odzyskiwanie zasobów zajmowanych przez obiekty trwałe ............................. 371
     14.4. Rozszerzenia zapytań ......................................................................................... 371
        14.4.1. Łańcuchy .................................................................................................. 371
        14.4.2. Operacje agregacji ..................................................................................... 371
        14.4.3. Projekcje................................................................................................... 372
     14.5. Odwzorowania obiektów...................................................................................... 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 serwletów ............................................................................ 402
10        Java Data Objects


Dodatki                                                                                                                                                    403
     Dodatek A Stany JDO ...............................................................................................................................405

     Dodatek B Metadane XML........................................................................................................................409

     Dodatek C Język JDOQL w notacji BNF ....................................................................................................419

     Dodatek D PersistenceManagerFactory — informator ......................................................................425

     Dodatek E Implementacje JDO.................................................................................................................429

     Skorowidz .................................................................................................................................................441
Cykl ycia obiektów
   W rozdziale tym omówimy cykl ycia obiektów oraz przedstawimy powody, dla których zna-
   jomość zmian stanu obiektów JDO mo e być istotna dla programisty aplikacji.

   Dlaczego znajomość cyklu ycia obiektu i zmian stanu jest tak wa na? Wyobraźmy sobie,
   jak działa maszyna wirtualna JVM, gdy aplikacja wywołuje operator PGY. Wiemy, e przy-
   dzielany jest odpowiedni obszar pamięci i zwracana jest jego referencja, ale w rzeczywisto-
   ści działanie maszyny wirtualnej jest bardziej skomplikowane. Najpierw mo e się okazać,
     e maszyna JVM musi załadować kod bajtowy z pewnego zasobu i przetłumaczyć go na in-
   strukcje macierzystego procesora. Wykonywana jest statyczna inicjacja, ładowane są klasy
   bazowe i wywoływane konstruktory. Jeszcze bardziej skomplikowany mo e być przebieg
   usuwania obiektu, w który zaanga owany będzie mechanizm odzyskiwania nieu ytków, me-
   chanizm słabych referencji, kolejki i zwrotne wywołania metod HKPCNKG. Dlatego te ma-
   szyna wirtualna JVM musi dysponować dobrze zdefiniowanym modelem cyklu ycia obiek-
   tów. Podobnym modelem cyklu dysponuje równie implementacja JDO dla obiektów trwa-
   łych — rozpoczynają one ycie jako zwykłe, ulotne obiekty języka Java, następnie uzyskują
   trwałość, mogą zostać usunięte bądź z powrotem przejść do stanu ulotnego i tak dalej. Zna-
   jomość cyklu ycia obiektów trwałych w ogóle nie jest konieczna, zwłaszcza szczegółowa.
   Jeśli jednak aplikacja u ywa wywołań zwrotnych, to zalecane jest myślenie w kategoriach
   efektów ubocznych związanych ze stanami obiektów trwałych i ich zmianami.

   Najpierw omówione zostaną obowiązkowe i opcjonalne stany obiektów trwałych, metody
   umo liwiające określenie stanu obiektu oraz metody, których skutkiem jest zmiana stanu.
   Zmiany stanu obiektów trwałych zilustrowane zostaną fragmentami kodu źródłowego w ję-
   zyku Java wyświetlającymi dodatkowo informacje o stanie tych obiektów. Cześć poświęcona
   wywołaniom zwrotnym wyjaśni sposób i warunki ich u ycia. Na końcu przedstawione zosta-
   ną te stany i operacje, które są w JDO opcjonalne.



4.1. Cykl ycia obiektu trwałego
   JDO definiuje siedem stanów obowiązkowych i trzy stany opcjonalne. Stany VTCPUKGPV, RGTUKU
   VGPVPGY, RGTUKUVGPVPGYFGNGVGF, JQNNQY, RGTUKUVGPVENGCP, RGTUKUVGPVFKTV[ i RGTUKUVGPV
104    Część II n Szczegóły

       FGNGVGF są obowiązkowe. Stany VTCPUKGPVFKTV[, VTCPUKGPVENGCP i RGTUKUVGPVPQPVTCPUC
       EVKQPCN są opcjonalne i zostaną omówione w dalszej części rozdziału.

       Niektóre ze zmian stanu obiektu są bezpośrednio wywoływane przez aplikację — na przy-
       kład na skutek utrwalenia obiektu. Równie rozpoczęcie lub zakończenie transakcji mo e
       wywołać zmianę stanu obiektu, czyli zachodzi ona na skutek wywołania przez aplikację jed-
       nej z metod DGIKP
, EQOOKV
 lub TQNNDCEM
 klasy 6TCPUCEVKQP. Zauwa my, e w środo-
       wiskach zarządzanych zmiany stanu mogą być równie wywoływane przez zewnętrzny kon-
       troler transakcji. Instancja języka Java rozpoczyna cykl ycia JDO na skutek wywołania me-
       tody OCMG2GTUKUVGPV
 lub załadowania istniejącego obiektu trwałego z bazy danych.

       Rozdział rozpoczniemy od omówienia dwóch typowych sekwencji utrwalania obiektów
       i odtwarzania ich na podstawie informacji zapisanych w bazie danych. Zilustrujemy je krót-
       kim przykładem kodu oraz poka emy sposób u ycia klasy ,1*GNRGT w celu uzyskania in-
       formacji o zmianach stanów zachodzących podczas wykonywania wspomnianych sekwencji.


4.1.1. Utrwalanie obiektu
       Operacje prowadzące do utrwalenia obiektu mogą przebiegać w sposób przedstawiony na
       diagramie stanów (rysunek 4.1).

Rysunek 4.1.
Utrwalanie
instancji ulotnych




4.1.1.1. Stan ulotny (transient)

       Instancje klasy zdolnej do trwałości zachowują się po ich utworzeniu za pomocą operatora
       PGY w taki sam sposób jak instancje ka dej innej klasy języka Java. Modyfikacje pól tych in-
       stancji nie są śledzone, co w praktyce oznacza taką samą efektywność dostępu jak w przypa-
       dku instancji klas, które nie są zdolne do trwałości. Na instancje ulotne nie mają wpływu
       wywołania metod związanych z transakcjami czyli DGIKP
, EQOOKV
 i TQNNDCEM
 z wyjąt-
       kiem sytuacji, w których instancje te są osiągalne za pośrednictwem obiektów trwałych.


4.1.1.2. Stan persistent-new

       Wywołanie metody 2GTUKUVGPEG/CPCIGTOCMG2GTUKUVGPV
 przypisuje instancji nowy identy-
       fikator, a jej stan zmienia się z VTCPUKGPV na RGTUKUVGPVPGY. Obiekt w stanie RGTUKUVGPV
       PGY zachowuje się tak samo jak obiekt w stanie VTCPUKGPV, ale zapisywany jest w bazie da-
       nych podczas zatwierdzania transakcji lub gdy stan obiektu musi zostać zsynchronizowany
       ze stanem w wewnętrznych buforach JDO. Obiekt znajdujący się w stanie RGTUKUVGPVPGY
Rozdział 4. n Cykl ycia obiektów     105

      jest ju kontrolowany przez implementację JDO. Obiekty mogą przejść do stanu RGTUKUVGPV
      PGY równie wtedy, gdy osiągalne są za pośrednictwem innych obiektów trwałych. Proces
      ten przebiega tak długo, a wszystkie instancje osiągalne z danego obiektu znajdą się w stanie
      VTCPUKGPV lub RGTUKUVGPVPGY. Pomiędzy wywołaniem metody OCMG2GTUKUVGPV
 a zatwier-
      dzeniem transakcji referencje mogą ulec zmianie, a osiągalne instancje stać się niedostępne.
      Takie tymczasowo trwałe obiekty znajdują się równie w stanie RGTUKUVGPVPGY. Jednak ich
      stan mo e ulec zmianie podczas zatwierdzania transakcji, gdy oka e się, e tymczasowo
      trwałe obiekty nie są ju osiągalne.


4.1.1.3. Stan pusty (hollow)

      Po pomyślnym zakończeniu transakcji stan obiektu zmienia się z RGTUKUVGPVPGY na JQNNQY.
      Obiekt w stanie pustym jest referencją, która mo e reprezentować pewne dane znajdujące
      się w bazie danych, ale które nie zostały jeszcze załadowane do pamięci lub są nieaktualne.
      Zwykle inni klienci bazy danych lub inne aplikacje JDO posiadają swobodny dostęp oraz
      mo liwość modyfikacji danych w bazie, których referencją jest pusty obiekt. Gdy aplikacja
      będzie próbowała u yć obiektu w stanie pustym, to obowiązkiem implementacji jest ponowne
      załadowanie danych do pamięci. Scenariusz ten zostanie szczegółowo wyjaśniony nieco da-
      lej. Po zatwierdzeniu transakcji zawartość obiektów znajdujących się w stanie pustym zostaje
      usunięta w celu zwolnienia pamięci. Jeśli wśród tych danych znajdowały się referencje obie-
      któw, to mechanizmowi odzyskiwania nieu ytków nie wolno zwolnić grafu obiektów.

      Stan pusty nie mo e zostać stwierdzony przez aplikację. Nie jest dostępna odpowiednia
      w tym celu metoda klasy ,1*GNRGT, a próba dostępu do pól takiego obiektu mo e spowo-
      dować zmianę jego stanu i nie jest wtedy mo liwe określenie poprzedniego stanu obiektu.


4.1.1.4. Stan persistent-new-deleted

      Gdy obiekt znajdujący się w stanie RGTUKUVGPVPGY zostaje usunięty przez wywołanie metody
      2GTUKUVGPEG/CPCIGTFGNGVG2GTUKUVGPV
, to jego stan zmienia się na RGTUKUVGPVPGYFGNGVGF.
      Przywrócenie takiego obiektu nie jest mo liwe i stan RGTUKUVGPVPGYFGNGVGF jest osta-
      teczny do momentu zakończenia transakcji. Próba dostępu do pól obiektu znajdującego się
      w stanie RGTUKUVGPVPGYFGNGVGF spowoduje zgłoszenie wyjątku ,17UGT'ZEGRVKQP. Nie
      dotyczy to jedynie pól wchodzących w skład klucza głównego. Po zakończeniu transakcji
      (poprzez wywołanie metody EQOOKV
 lub TQNNDCEM
) usunięta instancja przechodzi do
      stanu VTCPUKGPV.


4.1.2. Odtwarzanie obiektów z bazy danych
      Przejdziemy teraz do omówienia zmian stanów instancji, które zostają początkowo załado-
      wane z bazy danych. Diagram zmian stanów dla takich instancji przedstawiony został na
      rysunku 4.2
106    Część II n Szczegóły

Rysunek 4.2.
Odtwarzanie
instancji z bazy
danych




4.1.2.1. Stan pusty (hollow)

       Jak ju wspomnieliśmy wcześniej, obiekty utworzone w celu reprezentacji referencji danych
       zapisanych w bazie danych, które nie zawierają jeszcze danych, znajdują się równie w sta-
       nie pustym. Próba dostępu do ich pól powoduje załadowanie danych z bazy. Obiekty znaj-
       dujące się w stanie pustym tworzone są za pomocą wywołań metod takich jak 'ZVGPV
       KVGTCVQT
PGZV
, 2GTUKUVGPEG/CPCIGTIGV1DLGEV$[+F
 lub wykonania zapytania. Zwy-
       kle trwałe pola obiektów z stanie pustym inicjowane są za pomocą wartości domyślnych (0
       lub PWNN), ale poniewa obiekty takie tworzone są za pomocą konstruktorów nieposiadają-
       cych argumentów, to konstruktory te mogą nadawać tym e polom równie inne wartości
       początkowe. Na tym mo e właśnie polegać jedyna ró nica pomiędzy obiektami w stanie pu-
       stym, które brały wcześniej udział w transakcji (omówionymi w poprzednim punkcie),
       a obiektami w stanie pustym utworzonymi przez implementację JDO.


4.1.2.2. Stan persistent-clean

       Po nadaniu polom obiektu wartości pobranych z bazy danych obiekt taki przechodzi ze sta-
       nu JQNNQY do stanu RGTUKUVGPVENGCP, ale tylko wtedy, gdy jego dane nie zostały zmodyfi-
       kowane przez bie ącą transakcję. Stan te nosi taką nazwę (ang. clean — czysty), poniewa
       dane obiektu w pamięci są spójne z odpowiadającymi im danymi w bazie. Chocia pobraniem
       danych obiektu zajmuje się implementacja JDO, to referencje do innych obiektów rozwiązy-
       wane są przez instancję klasy 2GTUKUVGPEG/CPCIGT. Referencje te mogą wskazywać obiekty,
       które znajdują się ju w pamięci. W przeciwnym razie 2GTUKUVGPEG/CPCIGT tworzy nowe
       obiekty w stanie pustym. Zasoby obiektów znajdujących się w stanie RGTUKUVGPVENGCP mogą
       zostać zwolnione przez mechanizm odzyskiwania nieu ytków, jeśli w kodzie aplikacji nie
       istnieją ju referencje do tych obiektów. Jeśli obiekty zostały rzeczywiście zwolnione przez
       ten mechanizm, to obowiązkiem klasy 2GTUKUVGPEG/CPCIGT jest buforowanie ich referencji
       i utworzenie nowych obiektów w stanie pustym, gdy oka e się, e są one potrzebne.
Rozdział 4. n Cykl ycia obiektów    107


4.1.2.3. Stan persistent-dirty

      Obiekt przechodzi ze stanu JQNNQY lub RGTUKUVGPVENGCP do stanu RGTUKUVGPVFKTV[, gdy
      zmodyfikowane zostaje co najmniej jedno jego pole. Stan ten nosi taką nazwę (ang. dirty
      — brudny), poniewa dane obiektu w pamięci przestają być spójne z danymi znajdującymi
      się w bazie. Nawet jeśli uzyskana w wyniku modyfikacji wartość pola jest taka sama jak
      poprzednia, to obiekt i tak przechodzi do stanu RGTUKUVGPVFKTV[. Co więcej, instancja nie
      powraca do stanu JQNNQY lub RGTUKUVGPVENGCP, gdy przywrócone zostaną poprzednie warto-
      ści pól. Gdy obiektowi znajdującemu się w stanie RGTUKUVGPVENGCP lub RGTUKUVGPVFKTV[
      zostanie przypisana ulotna instancja, to obiekt taki nie przechodzi do stanu RGTUKUVGPVPGY.


4.1.2.4. Stan persistent-deleted

      Na skutek wywołania metody 2GTUKUVGPV/CPCIGTFGNGVG2GTUKUVGPV
 stan obiektu trwałe-
      go zmienia się na RGTUKUVGPVFGNGVGF. Opuszczenie tego stanu czyli przywrócenie usuniętej
      instancji trwałej mo liwe jest jedynie poprzez przerwanie transakcji. Pomyślne zatwierdze-
      nie transakcji powoduje przejście obiektu ze stanu RGTUKUVGPVFGNGVGF do stanu VTCPUKGPV.
      Obiekt nie mo e zostać ponownie utrwalony z tą samą to samością tak długo jak znajduje
      się w stanie RGTUKUVGPVFGNGVGF.


4.1.3. Uproszczony cykl ycia obiektu
      Diagram zamieszczony na rysunku 4.3 przedstawia uproszczony cykl ycia obiektu. Obszar
      obwiedziony prostokątem Odczyt zawiera stany, w których odczyt (dostęp) obiektu nie po-
      woduje zmiany ich stanu. Prostokąt Zapis zawiera stany, w których modyfikacja obiektu nie
      powoduje zmiany ich stanu.

Rysunek 4.3.
Cykl życia
obiektu — stany
obowiązkowe
108   Część II n Szczegóły



4.2. Informacja o stanie obiektu
      Wymienionych wcześniej siedem stanów: VTCPUKGPV, RGTUKUVGPVPGY, RGTUKUVGPVPGYFGNG
      VGF, JQNNQY, RGTUKUVGPVENGCP, RGTUKUVGPVFKTV[ i RGTUKUVGPVFGNGVGF jest obowiązkowych
      dla wszystkich implementacji JDO. Jednak implementacje JDO nie udostępniają adnego
      interfejsu programowego, który umo liwiałby uzyskanie informacji o stanach, w których
      znajdują się obiekty JDO. Dokładny stan obiektu znany jest jedynie implementacji JDO,
      a niektóre stany mogą nawet nie być implementowane przez pewnych producentów. Stany
      obiektów JDO są zdefiniowane bowiem w sposób behawioralny. Mimo to istnieją pewne
      metody, które pozwalają sprawdzić atrybuty trwałości dla danego obiektu i na ich podsta-
      wie wnioskować o stanie obiektu.

      Metody te nale ą do klasy ,1*GNRGT:
        DQQNGCP   KUGNGVGF
1DLGEV Q
        DQQNGCP   KUKTV[
1DLGEV Q
        DQQNGCP   KU0GY
1DLGEV Q
        DQQNGCP   KU2GTUKUVGPV
1DLGEV Q
        DQQNGCP   KU6TCPUCEVKQPCN
1DLGEV Q

      Nie istnieje natomiast metoda, która pozwalałaby ustalić, czy obiekt znajduje się w stanie
      pustym. Sposób ładowania zawartości takiego obiektu zale y bowiem od konkretnej imple-
      mentacji. W dalszej części rozdziału przedstawimy jednak inny sposób, który pozwala uzy-
      skać informację o tym, czy obiekt znajduje się w stanie pustym. Przedstawiona poni ej kla-
      sa wyświetla znaczniki instancji, posługując się klasą ,1*GNRGT:
        RWDNKE ENCUU 'ZCORNG
        ]
          RWDNKE UVCVKE XQKF RTKPV+PHQ
5VTKPI OUI 1DLGEV QDL
          ]
            5VTKPI$WHHGT DWH  PGY 5VTKPI$WHHGT
OUI
            KH 
,1*GNRGTKU2GTUKUVGPV
QDL
              DWHCRRGPF
 RGTUKUVGPV 
           KH 
,1*GNRGTKU0GY
QDL
              DWHCRRGPF
 PGY 
           KH 
,1*GNRGTKUKTV[
QDL
              DWHCRRGPF
 FKTV[ 
           KH 
,1*GNRGTKUGNGVGF
QDL
              DWHCRRGPF
 FGNGVGF 
           KH 
,1*GNRGTKU6TCPUCEVKQPCN
QDL
              DWHCRRGPF
 VTCPUCEVKQPCN 
           5[UVGOQWVRTKPVNP
DWHVQ5VTKPI

          _
        _

      Poni szy fragment kodu ilustruje omówione dotąd stany i metody:
        RWDNKE UVCVKE XQKF OCKP
5VTKPI CTIU=?
        ]
          2GTUKUVGPEG/CPCIGT RO  ROHIGV2GTUKUVGPEG/CPCIGT

          ROEWTTGPV6TCPUCEVKQP
DGIKP


          $QQM DQQM  PGY $QQM
Rozdział 4. n Cykl ycia obiektów   109

         RTKPV+PHQ
 PQYC KPUVCPELC MNCU[ $QQM  DQQM

         ROOCMG2GTUKUVGPV
DQQM
         RTKPV+PHQ
 VTYC C KPUVCPELC MNCU[ $QQM  DQQM

         ROFGNGVG2GTUKUVGPV
DQQM
         RTKPV+PHQ
 WUWPKúVC KPUVCPELC MNCU[ $QQM  DQQM

         ROEWTTGPV6TCPUCEVKQP
TQNNDCEM

         RTKPV+PHQ
 QFYQ CPKG VTCPUCMELK  DQQM

         ROEWTTGPV6TCPUCEVKQP
DGIKP

         ROOCMG2GTUKUVGPV
DQQM
         ROEWTTGPV6TCPUCEVKQP
EQOOKV

         RTKPV+PHQ
 CVYKGTFGPKG VTCPUCMELK  DQQM

         ROEWTTGPV6TCPUCEVKQP
DGIKP

         5VTKPI VKVNG  DQQMVKVNG
         RTKPV+PHQ
 QFE[V RQNC  DQQM


         DQQMVKVNG  PQYC 
 DQQMVKVNG
         RTKPV+PHQ
 OQF[HKMCELC RQNC  DQQM

         ROFGNGVG2GTUKUVGPV
DQQM
         RTKPV+PHQ
 WUWPKúVC KPUVCPELC MNCU[ $QQM  DQQM


         ROEWTTGPV6TCPUCEVKQP
EQOOKV

         RTKPV+PHQ
 CVYKGTFGPKG VTCPUCMELK  DQQM
     _

   Wykonanie powy szego kodu spowoduje wyświetlenie następującego tekstu:
     PQYC KPUVCPELC MNCU[ $QQM FKTV[
     VTYC C KPUVCPELC MNCU[ $QQM RGTUKUVGPV PGY FKTV[
     WUWPKúVC KPUVCPELC MNCU[ $QQM RGTUKUVGPV PGY FKTV[ FGNGVGF
     QFYQ CPKG VTCPUCMELK FKTV[
     CVYKGTFGPKG VTCPUCMELK RGTUKUVGPV
     QFE[V RQNC RGTUKUVGPV
     OQF[HKMCELC RQNC RGTUKUVGPV FKTV[
     WUWPKúVC KPUVCPELC MNCU[ $QQM RGTUKUVGPV FKTV[ FGNGVGF
     CVYKGTFGPKG VTCPUCMELK FKTV[




4.3. Operacje powodujące zmianę stanu
   W poprzednim podrozdziale przestawiliśmy podstawowe stany obiektów oraz operacje ta-
   kie jak odczyt pola lub usunięcie obiektu trwałego z bazy, które w oczywisty sposób zmie-
   niają stan obiektów. W tym podrozdziale przyjrzymy się bli ej metodom zmieniającym stan
   obiektów i wyjaśnimy ich działanie bardziej szczegółowo. Niektóre z tych metod zmieniają
   stan obiektów na skutek bezpośredniego ich wywołania, inne wpływają pośrednio na stan
   wielu obiektów.
110   Część II n Szczegóły


4.3.1. PersistenceManager.makePersistent
      Metoda OCMG2GTUKUVGPV klasy 2GTUKUVGPEG/CPCIGT powoduje przejście ulotnych obiektów do
      stanu RGTUKUVGPVPGY. Podczas wykonania tej metody przeglądany jest graf obiektu w celu
      znalezienia innych obiektów znajdujących się jeszcze w stanie VTCPUKGPV. Równie te obiekty
      mogą niejawnie przejść do stanu RGTUKUVGPVPGY.


4.3.2. PersistenceManager.deletePersistent
      Wywołanie metody FGNGVG2GTUKUVGPV powoduje przejście obiektu ze stanu RGTUKUVGPVENGCP,
      RGTUKUVGPVFKTV[ lub JQNNQY do stanu RGTUKUVGPVFGNGVGF, natomiast obiekty znajdujące
      się dotychczas w stanie RGTUKUVGPVPGY przechodzą do stanu RGTUKUVGPVPGYFGNGVGF. Ope-
      racja ta nie ma wpływu na inne osiągalne obiekty.


4.3.3. PersistenceManager.makeTransient
      Obiekt mo e przejść do stanu VTCPUKGPV pod warunkiem, e jego obecnym stanem jest RGT
      UKUVGPVENGCP lub JQNNQY. Na skutek wywołania metody OCMG6TCPUKGPV obiekt taki zostaje
      wyjęty spod kontroli instancji klasy 2GTUKUVGPEG/CPCIGT i traci swoją to samość. Metoda ta
      nie wywiera wpływu na inne obiekty osiągalne za pośrednictwem obiektu, który był jej pa-
      rametrem wywołania.


4.3.4. Transaction.commit
      Instancje nale ące do bie ącej transakcji są przetwarzane przez JDO podczas jej zatwierdza-
      nia, instancje znajdujące się w stanie JQNNQY nie zmieniają swojego stanu, natomiast instan-
      cje znajdujące się w stanie PGY, ENGCP lub FKTV[ przechodzą do stanu JQNNQY. Wszystkie in-
      ne instancje stają się ulotne. Po zatwierdzeniu instancji obiekty znajdujące się w stanie pustym
      oraz zwykłe, ulotne obiekty języka Java pozostają pod kontrolą instancji klasy 2GTUKUVGP
      EG/CPCIGT.


4.3.5. Transaction.rollback
      Na skutek odwołania transakcji obiekty znajdujące się w stanie ENGCP, FKTV[ lub FGNGVGF
      przechodzą do stanu JQNNQY. Pozostałe obiekty stają się ulotne. Obiekty, które znajdowały
      się w stanie JQNNQY lub VTCPUKGPV powracają do swojego poprzedniego stanu.


4.3.6. PersistenceManager.refresh
      Wywołanie metody TGHTGUJ powoduje ponowne załadowanie danych obiektu z bazy na sku-
      tek czego wszelkie modyfikacje obiektu zostają utracone. Metoda ta przeprowadza obiekty
      ze stanu RGTUKUVGPVFKTV[ do stanu RGTUKUVGPVENGCP.
Rozdział 4. n Cykl ycia obiektów        111


4.3.7. PersistenceManager.evict
     Metoda ta umo liwia zaoszczędzenie pamięci przez implementację buforowania stosowaną
     w klasie 2GTUKUVGPEG/CPCIGT. Na skutek jej u ycia obiekty przechodzą ze stanu RGTUKUVGPV
     ENGCP do stanu JQNNQY. Wartości pól obiektów są przy tym usuwane, aby umo liwić mechani-
     zmowi odzysku nieu ytków zwolnienie podobiektów.


4.3.8. Odczyt pól wewnątrz transakcji
     Po wczytaniu danych z bazy obiekty przechodzą ze stanu JQNNQY do stanu RGTUKUVGPVENGCP.
     Gdy stosowany jest pesymistyczny algorytm zarządzania współbie nością, to obiekt mo e
     zostać zablokowany dla zapobie enia równoczesnej modyfikacji.


4.3.9. Zapis pól wewnątrz transakcji
     Gdy podczas wykonywania transakcji zmodyfikowane zostaje pole obiektu znajdującego
     się pod kontrolą instancji klasy 2GTUKUVGPEG/CPCIGT, to implementacja JDO musi zapamię-
     tać, e nale y później zaktualizować dane tego obiektu w bazie. Obiekt przechodzi wtedy
     ze stanu RGTUKUVGPVENGCP lub JQNNQY do stanu RGTUKUVGPVFKTV[. Jeśli stosowany jest pe-
     symistyczny algorytm zarządzania współbie nością, to implementacja JDO mo e zabloko-
     wać dostęp do obiektu innym klientom tej samej bazy danych. Modyfikacja wartości pól
     obiektów znajdujących się w stanie VTCPUKGPV, RGTUKUVGPVFKTV[ lub RGTUKUVGPVPGY pozo-
     staje bez wpływu na stan takich obiektów. Gdy polu obiektu przypisywany jest inny obiekt,
     to zmodyfikowany obiekt przechodzi do stanu RGTUKUVGPVFKTV[, a obiekt przypisany nie
     zmienia swojego stanu.


4.3.10. PersistenceManager.retrieve
     Wywołanie metody 2GTUKUVGPEG/CPCIGTTGVTKGXG
 ma ten sam skutek, co odczyt pola obie-
     ktu podczas bie ącej transakcji.



4.4. Wywołania zwrotne
     Implementując metody wywoływane zwrotnie aplikacja mo e przejąć obsługę części omó-
     wionych wydarzeń występujących w cyklu ycia obiektu. Istnieją w zasadzie trzy sytuacje,
     w których programista aplikacji mo e zaimplementować w ten sposób specjalne zachowa-
     nie obiektów trwałych:
       n   odczyt lub zapis wartości pól, które nie są trwałe lub nie powinny być przetwarzane
           przez domyślny algorytm JDO,
       n   usuwanie obiektów składowych,
       n   usuwanie zbędnych referencji.
112   Część II n Szczegóły

      Metody wywoływane zwrotnie umieszczone zostały w osobnym interfejsie, którego obsłu-
      ga przypomina sposób obsługi interfejsu etykietowego LCXCKQ5GTKCNKCDNG. Jeśli klasa
      zdolna do trwałości implementuje interfejs +PUVCPEG%CNNDCEMU, to jest to sygnałem dla im-
      plementacji JDO, e nale y u yć wywołań zwrotnych. W przeciwnym razie nie są one wy-
      korzystywane.


4.4.1. Zastosowania metody jdoPostLoad
      Metoda LFQ2QUV.QCF wywoływana jest za ka dym razem, gdy obiekt trwały zostaje załado-
      wany z bazy danych czyli, gdy jego stan zmienia się z JQNNQY na RGTUKUVGPVENGCP. Dokład-
      niej rzecz ujmując, metoda ta jest wywoływana w momencie, gdy dane obiektu stają się spój-
      ne z danymi zapisanymi w bazie danych.

         Interfejs InstanceCallbacks
         Jeśli klasa implementuje interfejs +PUVCPEG%CNNDCEMU, to metody LFQ2QUV.QCF, LFQ
         2TG5VQTG, LFQ2TG%NGCT i LFQ2TGGNGVG są automatycznie wywoływane przez imple-
         mentację JDO, gdy pola instancji są odczytywane, modyfikowane, zerowane lub obiekty
         są usuwane. W przeciwieństwie do interfejsu 5GTKCNKCDNG klasa odpowiedzialna jest
         za wywołanie metod interfejsu +PUVCPEG%CNNDCEMU swojej klasy bazowej. Metody inter-
         fejsu +PUVCPEG%CNNDCEMU zadeklarowane są jako metody o dostępie publicznym i dla-
         tego należy zwrócić uwagę, by nie wywoływać ich w innych sytuacjach.


      Implementując metodę LFQ2QUV.QCF, mo emy zaoszczędzić na kodzie sprawdzającym po-
      czątkowe przypisanie wartości ulotnych, poniewa JDO definiuje, e metoda ta wywoły-
      wana jest dokładnie raz. Klasa mo e więc zaimplementować metodę LFQ2QUV.QCF, aby
      przypisać wartości początkowe polom ulotnym, zwłaszcza gdy zale ą one od wartości pól
      trwałych. Mo liwość taka jest szczególnie przydatna, gdy ustalenie tych wartości wymaga
      skomplikowanych obliczeń, które nie powinny być wykonywane wielokrotnie.

      Inne zastosowanie mo e polegać na rejestrowaniu przez obiekty aplikacji załadowania
      obiektów trwałych z bazy danych. Na przykład w celu odroczenia inicjacji kolekcji do
      momentu rzeczywistego jej u ycia, co pozwala zaoszczędzić pamięć i zwiększyć efektyw-
      ność działania programu:
        RWDNKE ENCUU $QQM
          KORNGOGPVU LCXCZLFQ+PUVCPEG%CNNDCEMU
        ]
          VTCPUKGPV /CR O[/CR  PC TCKG PKG LGUV CKPKELQYCPC

          RWDNKE $QQM
5VTKPI VKVNG ]  W [YCP[ RTG CRNKMCELú
              
          _

          RTKXCVG $QQM
 ]  W [YCP[ RTG ,1
          _

          RWDNKE XQKF LFQ2QUV.QCF
 ]
            O[/CR  PGY *CUJ/CR
  KPKELQYCPC RQFECU CFQYCPKC
          _
Rozdział 4. n Cykl ycia obiektów   113

           RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG
          RWDNKE XQKF LFQ2TG5VQTG
 ]
          _
          RWDNKE XQKF LFQ2TGGNGVG
 ]
          _
          RWDNKE XQKF LFQ2TG%NGCT
 ]
          _
      _



4.4.2. Zastosowania metody jdoPreStore
    Metoda ta wywoływana jest przed zapisaniem pól do bazy danych. Jedno z zastosowań tej
    metody polega na aktualizacji wartości pól trwałych na podstawie pól, które nie są trwałe
    przed zakończeniem transakcji. Metoda mo e być równie wykorzystana w celu sprawdze-
    nia, czy wartości pól trwałych są spójne lub spełniają ograniczenia. W przypadku, gdy war-
    tość pola narusza zdefiniowane ograniczenia, aplikacja mo e uniemo liwić ich zapisanie
    w bazie danych, zgłaszając wyjątek. Jednak obiekty biznesowe powinny udostępniać meto-
    dy walidacji umo liwiające sprawdzenie zgodności z nało onymi ograniczeniami. Metody
    te powinny być wywoływane przez aplikację przed zapisaniem danych w bazie. Powiązanie
    tego rodzaju walidacji ze szkieletem trwałości nie jest dobrą praktyką. Metody LFQ2TG5VQTG
    nale y raczej u ywać w celu wykrycia błędnych wartości pojawiających się w programie.

    Poni ej przedstawiamy sposób aktualizacji pola będącego tablicą bajtów za pomocą strumie-
    nia serializowanych obiektów, które nie są trwałe:
      RWDNKE ENCUU $QQM
         KORNGOGPVU +PUVCPEG%CNNDCEMU
      ]
        VTCPUKGPV %QNQT O[%QNQT  RQNG PKG LGUV VTYC G
        RTKXCVG D[VG=? CTTC[  QDU WIKYCPC RTG YKúMUQ è KORNGOGPVCELK ,1

          RWDNKE XQKF LFQ2QUV.QCF
 ]
            1DLGEV+PRWV5VTGCO KP  PGY 1DLGEV+PRWV5VTGCO

              PGY $[VG#TTC[+PRWV5VTGCO
CTTC[
            O[%QNQT  
%QNQT KPTGCF1DLGEV

            KPENQUG

          _

          RWDNKE XQKF LFQ2TG5VQTG
 ]
            $[VG#TTC[1WVRWV5VTGCO DQ  PGY $[VG#TTC[1WVRWV5VTGCO

            1DLGEV1WVRWV5VTGCO QWV  PGY 1DLGEV1WVRWV5VTGCO
DQ
            QWVYTKVG1DLGEV
O[%QNQT
            QWVENQUG

            CTTC[  DQIGV$[VGU

          _

           RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG
          RWDNKE XQKF LFQ2TGGNGVG
 ]
          _
          RWDNKE XQKF LFQ2TG%NGCT
 ]
          _
      _
114   Część II n Szczegóły


4.4.3. Zastosowania metody jdoPreDelete
      Metoda LFQ2TGGNGVG wywoływana jest przed usunięciem obiektu z bazy danych — na przy-
      kład, gdy aplikacja wywołała metodę 2GTUKUVGPEG/CPCIGTFGNGVG2GTUKUVGPV. Metoda LFQ
      2TGGNGVG nie jest wywoływana, gdy obiekt usuwany jest przez innego klienta tej samej ba-
      zy danych lub przez inne, wykonywane równolegle transakcje. Metoda LFQ2TGGNGVG powi-
      nna być u ywana jedynie dla obiektów znajdujących się w pamięci. Typowym jej zastoso-
      waniem jest usuwanie podobiektów zale nych od danego obiektu:
        RWDNKE ENCUU $QQM5JGNH
          KORNGOGPVU +PUVCPEG%CNNDCEMU
        ]
           KPUVCPELC MNCU[ $QQM5JGNH OQ G CYKGTCè
          %QNNGEVKQP UJGNXGU
          %QNNGEVKQP DQQMU
          RWDNKE XQKF LFQ2TGGNGVG
 ]
              RQDKGTC Y C EKYæ KPUVCPELú 2GTUKUVGPEG/CPCIGT
            2GTUKUVGPEG/CPCIGT RO 
              ,1*GNRGTIGV2GTUKUVGPEG/CPCIGT
VJKU
               WUWYC UJGNXGU CNG PKG DQQMU
              ROFGNGVG#NN
UJGNXGU
          _
            RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG
          RWDNKE XQKF LFQ2QUV.QCF
 ]
          _
          RWDNKE XQKF LFQ2TG5VQTG
 ]
          _
          RWDNKE XQKF LFQ2TG%NGCT
 ]
          _
        _

      Społeczność związana z JDO toczyła długie dyskusje dotyczące tego, czy obsługa obiektów
      zale nych powinna odbywać się w kodzie źródłowym w języku Java czy raczej być zade-
      klarowana w pliku metadanych JDO. Kolejny przykład zastosowania metody LFQ2TGGNGVG
      pokazuje sposób wyrejestrowania obiektu z innego obiektu, który posiada jego referencję.
      Implementacja tej operacji mo e być całkiem skomplikowana, gdy model obiektowy danej
      aplikacji rozrośnie się. A oto prosty przykład:
        RWDNKE ENCUU #KUNG
          KORNGOGPVU +PUVCPEG%CNNDCEMU
        ]
           KPUVCPELC MNCU[ #KUNG CYKGTC MQNGMELú KPUVCPELK MNCU[ $QQM5JGNH
          %QNNGEVKQP UJGNXGU
        _

        RWDNKE ENCUU $QQM5JGNH
          KORNGOGPVU +PUVCPEG%CNNDCEMU
        ]
          HKPCN #KUNG CKUNG  RQ Q GPKG RÎ MK

           OQIæ D[è VYQTQPG TCGO
          RWDNKE $QQM5JGNH
#KUNG CK ]
            VJKUCKUNG  CK
            CKUNGUJGNXGUCFF
VJKU
          _
Rozdział 4. n Cykl ycia obiektów    115

          RTKXCVG $QQM5JGNH
 ]
Y[OCICP[ RTG ,1
_

           Y[TGLGUVTQYWLG WUWYCPG QDKGMV[
            QDKGMVW MVÎT[ LG CYKGTC
          RWDNKE XQKF LFQ2TGGNGVG
 ]
            CKUNGUJGNXGUTGOQXG
VJKU
          _

           RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG
          RWDNKE XQKF LFQ2QUV.QCF
 ]
          _
          RWDNKE XQKF LFQ2TG5VQTG
 ]
          _
          RWDNKE XQKF LFQ2TG%NGCT
 ]
          _
      _

    U ywając JDO mamy zawsze mo liwość wyboru modelowania związku pomiędzy obiek-
    tami za pomocą referencji wprzód (instancja #KUNG posiada instancje $QQM5JGNH) lub refe-
    rencji wstecz (instancje $QQM5JGNH nale ą do instancji #KUNG). Nawigacja od obiektu nadrzęd-
    nego do podrzędnego wymaga zapytania (odnalezienia instancji $QQM5JGNH posiadającej
    referencję wskazanej instancji #KUNG). Wybór sposobu modelowania związków pomiędzy
    obiektami nale y do aplikacji. Gdy do wyrejestrowania obiektów u ywane są zwrotne wy-
    wołania metod, to konieczne jest zastosowanie referencji wstecz ($QQM5JGNHCKUNG).


4.4.4. Zastosowania metody jdoPreClear
    Metoda LFQ2TG%NGCT zostaje wywołana, gdy obiekt przechodzi do stanu JQNNQY lub VTCPUKGPV
    ze stanu RGTUKUVGPVFGNGVGF, RGTUKUVGPVPGYFGNGVGF, RGTUKUVGPVENGCP lub RGTUKUVGPV
    FKTV[ na skutek zakończenia transakcji. Wywołanie tej metody mo e być u yte w celu wy-
    zerowania nietrwałych referencji innych obiektów, aby umo liwić zwolnienie zajmowanych
    przez nie zasobów mechanizmowi odzyskiwania nieu ytków. Inne potencjalne zastosowa-
    nia to wyrejestrowanie jednych obiektów z innych obiektów bądź zerowanie pól ulotnych
    lub nadawanie im niedozwolonych wartości dla zapobie enia przypadkowemu dostępowi
    do wyzerowanych instancji.



4.5. Stany opcjonalne
    JDO definiuje stany opcjonalne, które mogą zostać zaimplementowane przez producenta
    implementacji JDO. Zadaniem tych stanów jest umo liwienie posługiwania się obiektami
    trwałymi, które mogą nie zawierać spójnych danych na zewnątrz aktywnej transakcji. Stany
    te mogą być równie wykorzystane dla obiektów ulotnych, które powinny zachowywać się
    jak obiekty trwałe w obrębie aktywnej transakcji. Zanim jednak aplikacja rozpocznie korzy-
    stanie z tych opcjonalnych mo liwości, powinna najpierw sprawdzić ich dostępność za po-
    mocą metody 2GTUKUVGPEG/CPCIGT(CEVQT[UWRRQTVGF1RVKQPU
.
116    Część II n Szczegóły


4.5.1. Ulotne instancje transakcyjne
       Ulotne instancje klas zdolnych do trwałości mogą stać się transakcyjne, ale nie trwałe na
       skutek wywołania metody 2GTUKUVGPEG/CPCIGTOCMG6TCPUCEVKQPCN. Obiekty takie nazywamy
       ulotnymi instancjami transakcyjnymi. Ich dane zapisywane są w pewien sposób podczas
       wywołania metody OCMG6TCPUCEVKQPCN i odtwarzane w przypadku odwołania transakcji, jed-
       nak nie są utrwalane w bazie danych. Mo liwość taka jest szczególnie przydatna w sytuacji,
       gdy skomplikowana operacja modyfikuje wiele obiektów i mo e zostać odwołana. Ulotne
       obiekty znajdujące się w pamięci zostają równie powiązane w sensie transakcji z obiekta-
       mi trwałymi będącymi pod kontrolą tej samej instancji klasy 2GTUKUVGPEG/CPCIGT.

       Ulotne instancje transakcyjne są dostępne w JDO jedynie opcjonalnie, jednak ju podczas
       pisania tej ksią ki oferowała je większość producentów implementacji JDO. Po wywołaniu
       metody OCMG6TCPUCEVKQPCN ulotna instancja przechodzi do stanu VTCPUKGPVENGCP. Mimo e
       jej dane są nowe lub zmodyfikowane, to wywołanie to stanowi jedynie informację dla instan-
       cji 2GTUKUVGPEG/CPCIGT, e powinna śledzić modyfikacje tego obiektu. Gdy ulotna instancja
       zostaje zmodyfikowana, przechodzi w stan VTCPUKGPVFKTV[ i jej pola trwałe są w celu póź-
       niejszego odtworzenia kopiowane. Istnieją dwa przypadki, w których metoda OCMG6TCPUCE
       VKQPCN mo e zostać wywołana: przed i po rozpoczęciu aktywnej transakcji. W pierwszym
       przypadku zapisane zostaną dane obiektu w momencie rozpoczęcia transakcji. W drugim
       dane obiektu, które posiadał w momencie wywołania metody OCMG6TCPUCEVKQPCN.

       Instancje przechodzą ze stanu VTCPUKGPVFKTV[ do stanu VTCPUKGPVENGCP w momencie za-
       twierdzenia lub odwołania transakcji. Jeśli transakcja została odwołana, przywracane są
       wcześniej zachowane wartości pól. Instancje znajdujące się w stanie VTCPUKGPVENGCP mo-
       gą równie przejść do stanu PQPVTCPUCEVKQPCN na skutek wywołania metody OCMG0QP6TCP
       UCEVKQPCN. Zarówno instancje znajdujące się w stanie VTCPUKGPVENGCP, jak i VTCPUKGPVPGY
       mogą przejść do stanu RGTUKUVGPVPGY na skutek wywołania metody OCMG2GTUKUVGPV.

       Diagram przedstawiony na rysunku 4.4 prezentuje mo liwe przejścia pomiędzy ró nymi
       stanami ulotnych instancji transakcyjnych.

Rysunek 4.4.
Cykl życia
ulotnych instancji
transakcyjnych
Rozdział 4. n Cykl ycia obiektów       117


4.5.2. Zastosowania ulotnych instancji transakcyjnych
     Podstawowym celem stosowania ulotnych instancji transakcyjnych jest zapewnienie prze-
     zroczystego posługiwania się obiektami przez aplikacje. Dzięki temu nie ma ju znaczenia,
     czy dany obiekt jest ulotny czy trwały — w obu przypadkach jego dane zostaną przywró-
     cone, gdy transakcja zostanie odwołana. Przykładem zastosowanie mo e być tutaj aplikacja
     wykorzystująca okno dialogowe umo liwiające konfigurację ró nych parametrów. Okno
     takie mo e zawierać zarówno trwałe dane o konfiguracji, jak i lokalne, ulotne informacje.
     Posługując się ulotnymi instancjami transakcyjnymi, implementacja okna dialogowego
     mo e po prostu odwołać wszelkie modyfikacje, gdy u ytkownik kliknie przycisk Cancel.


4.5.3. Instancje nietransakcyjne
     Instancje nietransakcyjne umo liwiają obsługę rzadko zmieniających się, niespójnych da-
     nych oraz realizację transakcji optymistycznych. W niektórych sytuacjach aplikacja mo e
     chcieć jawnie wczytać dane do obiektów, ale nie interesują jej modyfikacje wykonane przez
     innych klientów tej samej bazy. Instancje nietransakcyjne mogą być równie wynikiem za-
     kończonych transakcji.

     JDO definiuje cztery ró ne właściwości zmieniające cykl ycia obiektów JDO:
       n 0QPVTCPUCEVKQPCN4GCF

       n 0QPVTCPUCEVKQPCN9TKVG

       n 4GVCKP8CNWGU

       n 1RVKOKUVKE

     Aplikacja wybiera jedną lub więcej wymienionych właściwości, aby włączyć opcje działania
     instancji klasy 2GTUKUVGPEG/CPCIGT przed jej pierwszym u yciem. Opcje te stosowane są
     przede wszystkim ze względu na bezpieczeństwo. Aplikacja mo e bowiem przypadkowo
     zmodyfikować obiekt poza kontekstem transakcji, ale modyfikacja taka zostanie utracona
     lub wczytane zostaną nieprawidłowe dane. A oto przykład sytuacji, w której modyfikacja
     zostaje zagubiona:
          Klient A pobiera instancję.
          Klient B pobiera tę samą instancję.
          Klient A modyfikuje instancję.
          Klient B równie modyfikuje instancję.
          Klient B zatwierdza transakcję.
          Klient A zatwierdza transakcję (zastępując modyfikacje dokonane przez klienta B).

     Podobna sytuacja mo e wystąpić, gdy dane zostają zmodyfikowane pomiędzy dwiema ko-
     lejnymi operacjami odczytu:
          Klient A zlicza wszystkie wypo yczone ksią ki.
          Klient B wypo ycza ksią kę.
118   Część II n Szczegóły

            Klient B zatwierdza transakcję.
            Klient A zlicza wszystkie ksią ki w bibliotece (bez jednej brakującej).


4.5.3.1. Opcja NontransactionalRead

      Opcja ta umo liwia aplikacji odczyt pól instancji, która nie jest transakcyjna lub znajduje
      się w stanie JQNNQY poza jakąkolwiek transakcją. Umo liwia równie nawigację i wykony-
      wanie zapytań poza aktywną transakcją. Stan umo liwiający obsługę danych pól, które nie
      są spójne ani transakcyjne na zewnątrz aktywnej transakcji nosi nazwę RGTUKUVGPVPQPVTC
      PUCEVKQPCN. Aplikacja mo e wymusić przejście obiektu znajdującego się w stanie RGTUK
      UVGPVENGCP do stanu RGTUKUVGPVPQPVTCPUCEVKQPCN poprzez wywołanie metody 2GTUK
      UVGPEG/CPCIGTOCMG0QPVTCPUCEVKQPCN. Nale y jednak zwrócić uwagę na efekty uboczne
      i inne problemy związane z odczytem obiektów poza transakcjami.


4.5.3.2. Opcja NontransactionalWrite

      Aktywacja tej opcji umo liwia modyfikacje instancji, które nie są transakcyjne na zewnątrz
      jakichkolwiek transakcji. Jednak modyfikacje takie nie zostają nigdy zapisane w bazie da-
      nych. JDO nie definiuje sposobu przejścia instancji do stanu RGTUKUVGPVPQPVTCPUCEVKQPCN
      na skutek modyfikacji instancji poza transakcją (gdy opcja 0QPVTCPUCEVKQPCN9TKVG ma war-
      tość VTWG).


4.5.3.3. Zastosowania instancji nietransakcyjnych

      Z punktu widzenia architektury programu zastosowanie instancji nietransakcyjnych nie jest
      zalecane z powodu potencjalnych problemów ze spójnością danych. Zasady projektowania
      związane z obsługą transakcji omówione zostaną w rozdziale 11. Istnieją jednak wyjątkowe
      sytuacje, w których zastosowanie obiektów nietransakcyjnych ujawnia swoje zalety:
        n   Gdy aplikacja musi wyświetlać pewne dane statystyczne co pewien czas, ale nie
            jest istotne, by dane te były aktualne w ściśle określonym momencie. Motywacją
            takiego rozwiązania mo e być chęć uniknięcia zakłóceń procesu obliczeniowego
            przez proces prezentacji. W pewnych warunkach konieczne mo e okazać się nawet
            buforowanie wyświetlanych danych i odczytywanie jedynie ich zmian.
        n   Gdy aplikacja wyposa ona w graficzny interfejs u ytkownika u ywa JDO
            do przechowywania danych o swojej konfiguracji, która zostaje załadowana
            w określonym momencie przez inną część systemu. Podczas edycji konfiguracji
            transakcyjne zachowanie danych jest zbędne. Jedynie zmiana całej konfiguracji
            powinna być atomowa, spójna, izolowana i trwała.


4.5.3.4. Opcja RetainValues

      JDO zeruje wszystkie obiekty trwałe, gdy przechodzą one do stanu JQNNQY. Umo liwia to po-
      zbycie się zbędnych referencji i odzyskanie zajmowanej pamięci. Jeśli opcja 4GVCKP8CNWGU
      posiada wartość VTWG, to podczas zatwierdzania transakcji obiekty znajdujące się w stanie
Rozdział 4. n Cykl ycia obiektów     119

     RGTUKUVGPVENGCP, RGTUKUVGPVPGY lub RGTUKUVGPVFKTV[ przechodzą do stanu RGTUKUVGPV
     PQPVTCPUCEVKQPCN zamiast do stanu JQNNQY. Wartości pól zostają zachowane w celu póź-
     niejszego wykorzystania. Ich odczyt po zakończeniu transakcji jest dozwolony. W porów-
     naniu do opcji 0QPVTCPUCEVKQPCN4GCF po zakończeniu transakcji nie jest mo liwa nawigacja
     po obiektach znajdujących się w stanie JQNNQY i odczyt ich danych.


4.5.3.5. Opcja RestoreValues

     Jeśli opcja 4GUVQTG8CNWGU nie ma wartości VTWG, to opisany wy ej efekt działania opcji 4G
     VCKP8CNWGU jest mo liwy tylko w przypadku zatwierdzenia transakcji. W przypadku odwo-
     łania transakcji instancje przejdą bowiem do stanu JQNNQY i tym samym odczyt ich pól nie
     będzie mo liwy (przestaną być dostępne dla aplikacji). Natomiast gdy opcja 4GUVQTG8CNWGU
     ma wartość VTWG, to JDO musi odtworzyć poprzednie wartości pól obiektów znajdujących
     się w stanie RGTUKUVGPVFKTV[ w momencie odwołania transakcji. Odwołanie transakcji spra-
     wia, e obiekty znajdujące się w stanie RGTUKUVGPVENGCP lub RGTUKUVGPVFKTV[ przechodzą
     do stanu RGTUKUVGPVPQPVTCPUCEVKQPCN i tym samym stają się dostępne dla aplikacji.


4.5.4. Transakcje optymistyczne
     JDO umo liwia tak e zarządzanie transakcjami optymistycznymi. Ich działanie przypomina
     działanie systemu zarządzania wersjami kodu źródłowego, który, zamiast blokować dostęp
     do poszczególnych dokumentów, umo liwia równoczesną pracę wielu programistów. Warto
     przy tym zauwa yć, e zarządzanie transakcjami optymistycznymi zmienia sposób przejść
     obiektów trwałych pomiędzy stanami. Rozpoczynając transakcję optymistyczną, aplikacja
     zakłada, e zablokowanie obiektów niepotrzebnie opóźni dostęp innych u ytkowników, dla-
     tego te konflikty pomiędzy ró nymi operacjami rozwiązywane są dopiero podczas zatwier-
     dzania transakcji. JDO osiąga to poprzez umo liwienie modyfikacji obiektów trwałych, któ-
     re zawierają dane transakcyjne. Gdy aplikacja ąda od JDO zatwierdzenia transakcji, to
     implementacja JDO sprawdza najpierw, czy dane zostały zmodyfikowane w czasie, który
     minął od ich załadowania (zwykle u ywając wewnętrznego mechanizmu identyfikacji wer-
     sji danych) i jeśli tak, to odwołuje transakcję, sygnalizując aplikacji wystąpienie problemu
     z wersją danych. W ten sposób mo liwy jest jednoczesny dostęp do danych dla wielu klien-
     tów, który gwarantuje, e adne dane nie zostaną utracone. Wadą takiego rozwiązania jest
     oczywiście to, e aplikacja musi ponownie za ądać zatwierdzenia transakcji, uwzględniając
     nową, aktualną wersję danych. Z tego powodu mechanizm zarządzania stanami obiektów
     dopuszcza mo liwość odświe enia danych obiektów znajdujących się w stanie JQNNQY lub
     PQPVTCPUCEVKQPCN, zanim aplikacja u yje ich wewnątrz transakcji.

     Jeśli aplikacja zdecyduje się u ywać transakcji optymistycznych, to podczas odczytu pola
     instancji znajdujących się w stanie JQNNQY przechodzą one do stanu RGTUKUVGPVPQPVTCPUC
     EVKQPCN zamiast do stanu RGTUKUVGPVENGCP (patrz rysunek 4.5). Modyfikacja wartości pola
     trwałego powoduje przejście instancji do stanu RGTUKUVGPVFKTV[ — tak samo jak w przy-
     padku transakcji pesymistycznych. Aplikacja musi jawnie za ądać odświe enia danych za-
     pisanych w bazie zanim wykonana zostanie ich aktualizacja na podstawie bazy danych.
     Zalety i wady transakcji optymistycznych zostaną wyjaśnione w rozdziale 11.
120   Część II n Szczegóły

Rysunek 4.5.
Cykl życia
obiektu:
dostęp poza
transakcjami




4.6. Przykłady
      Zamieszczone poni ej przykłady kodu stanowią ilustrację sposobów sprawdzania stanu
      obiektów oraz zastosowania wywołań zwrotnych w celu identyfikacji typowych problemów.
      Przedstawiona zostanie klasa pomocnicza umo liwiająca uzyskanie informacji o stanie
      obiektów, licznie obiektów w pamięci, liczbie obiektów w wybranym stanie i tak dalej. Po-
      niewa większość producentów implementacji JDO nie udostępnia metod umo liwiających
      uzyskanie informacji o zawartości buforów podręcznych wykorzystywanych przez instan-
      cję klasy 2GTUKUVGPEG/CPCIGT, to posiadanie własnego, niezale nego rozwiązania w tym
      zakresie jest bardzo przydatne.

      Wszystkie przedstawione poni ej metody umieszczone zostały w pliku źródłowym Debug-
      States.java.

      Pierwsza z omawianych metod umo liwi uzyskanie identyfikatora obiektu w pamięci. Pro-
      sty sposób jego uzyskania polega na wywołaniu metody KFGPVKV[*CUJ%QFG. Chocia uzyska-
      ny w ten sposób identyfikator nie jest unikalny, to jednak wystarcza w przypadku większo-
      ści maszyn wirtualnych i umo liwia śledzenie obiektów znajdujących się w ich pamięci:
         RTKXCVG UVCVKE 5VTKPI IGV/GOQT[+F
1DLGEV QDL
         ]
           NQPI KF  5[UVGOKFGPVKV[*CUJ%QFG
QDL
           TGVWTP .QPIVQ5VTKPI
KF   YCTVQ è Y U[UVGOKG UGUPCUVMQY[O
         _

      Kolejna metoda będzie zwracać łańcuch, który zawiera zarówno identyfikator obiektu trwałe-
      go w pamięci, jak i jego skrót będący wynikiem zastosowania metody mieszającej. Jeśli
      obiekt nie jest jeszcze trwały, to metoda zwróci jedynie jego identyfikator:
         RTKXCVG UVCVKE 5VTKPI IGV+F
1DLGEV QDL
         ]
           KH 
QDL KPUVCPEG1H 2GTUKUVGPV%CRCDNG ]
             2GTUKUVGPEG/CPCIGT RO 
               ,1*GNRGTIGV2GTUKUVGPEG/CPCIGT
QDL
             KH 
RO  PWNN ]
               TGVWTP  
 IGV/GOQT[+F
QDL 
                    1+ 
 ROIGV1DLGEV+F
QDL
             _
           _
           TGVWTP  
 IGV/GOQT[+F
QDL 
 DTCM 1+ 
         _
Rozdział 4. n Cykl ycia obiektów   121

Aby uzyskać więcej informacji o cyklu ycia obiektów, posłu ymy się tablicą liczników śle-
dzących liczbę ró nych instancji trwałych. Liczniki te będą zwiększane przez metody nale-
 ące do interfejsu +PUVCPEG%CNNDCEMU oraz konstruktory nie posiadające argumentów, któ-
rych implementacja JDO u ywa do tworzenia nowych obiektów w stanie pustym. Poniewa
tablica ta posługuje się słabymi referencjami obiektów, umo liwia równie zliczenie obiek-
tów, których zasoby zostały zwolnione przez mechanizm odzyskiwania nieu ytków.

Poni ej przedstawiamy przykład klasy, która posługuje się klasą GDWI5VCVGU do zliczania
wywołań zwrotnych swoich metod:
  RWDNKE ENCUU #WVJQT
    KORNGOGPVU +PUVCPEG%CNNDCEMU
  ]
    RTQVGEVGF 5VTKPI PCOG

      RWDNKE #WVJQT
 5VTKPI PCOG  ]
        VJKUPCOG  PCOG
      _

      RWDNKE 5VTKPI VQ5VTKPI

      ]
         TGVWTP #WVQT 
 PCOG
      _

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

JavaServer Faces. Wydanie II
JavaServer Faces. Wydanie IIJavaServer Faces. Wydanie II
JavaServer Faces. Wydanie II
 
Praktyczny kurs SQL
Praktyczny kurs SQLPraktyczny kurs SQL
Praktyczny kurs SQL
 
SQL w mgnieniu oka
SQL w mgnieniu okaSQL w mgnieniu oka
SQL w mgnieniu oka
 
M2j1
M2j1M2j1
M2j1
 
J2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIJ2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie II
 
M2j2
M2j2M2j2
M2j2
 
M1j3
M1j3M1j3
M1j3
 
Bazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktykaBazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktyka
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. Programowanie
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
M3j2
M3j2M3j2
M3j2
 
100 sposobów na Visual Studio
100 sposobów na Visual Studio100 sposobów na Visual Studio
100 sposobów na Visual Studio
 
Oracle Discoverer
Oracle DiscovererOracle Discoverer
Oracle Discoverer
 
Po prostu Outlook 2003 PL
Po prostu Outlook 2003 PLPo prostu Outlook 2003 PL
Po prostu Outlook 2003 PL
 
ActionScript 2.0. Od podstaw
ActionScript 2.0. Od podstawActionScript 2.0. Od podstaw
ActionScript 2.0. Od podstaw
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
 
SQL. Leksykon kieszonkowy
SQL. Leksykon kieszonkowySQL. Leksykon kieszonkowy
SQL. Leksykon kieszonkowy
 
Java 2. Techniki zaawansowane
Java 2. Techniki zaawansowaneJava 2. Techniki zaawansowane
Java 2. Techniki zaawansowane
 
Java. Potrzaski
Java. PotrzaskiJava. Potrzaski
Java. Potrzaski
 

Andere mochten auch

Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 
Adobe Photoshop CS/CS PL. Oficjalny podręcznik
Adobe Photoshop CS/CS PL. Oficjalny podręcznikAdobe Photoshop CS/CS PL. Oficjalny podręcznik
Adobe Photoshop CS/CS PL. Oficjalny podręcznikWydawnictwo Helion
 
Struktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychStruktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychWydawnictwo Helion
 

Andere mochten auch (9)

802.11. Bezpieczeństwo
802.11. Bezpieczeństwo802.11. Bezpieczeństwo
802.11. Bezpieczeństwo
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Po prostu PowerPoint 2003 PL
Po prostu PowerPoint 2003 PLPo prostu PowerPoint 2003 PL
Po prostu PowerPoint 2003 PL
 
Adobe Photoshop CS/CS PL. Oficjalny podręcznik
Adobe Photoshop CS/CS PL. Oficjalny podręcznikAdobe Photoshop CS/CS PL. Oficjalny podręcznik
Adobe Photoshop CS/CS PL. Oficjalny podręcznik
 
Photoshop CS. Kurs
Photoshop CS. KursPhotoshop CS. Kurs
Photoshop CS. Kurs
 
Sposoby na PeCeta
Sposoby na PeCetaSposoby na PeCeta
Sposoby na PeCeta
 
ABC ochrony przed wirusami
ABC ochrony przed wirusamiABC ochrony przed wirusami
ABC ochrony przed wirusami
 
Linux. Komendy i polecenia
Linux. Komendy i poleceniaLinux. Komendy i polecenia
Linux. Komendy i polecenia
 
Struktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychStruktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowych
 

Ähnlich wie Java Data Objects

Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Wydawnictwo Helion
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieWydawnictwo Helion
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaWydawnictwo Helion
 
JBoss 4.0. Podręcznik administratora
JBoss 4.0. Podręcznik administratoraJBoss 4.0. Podręcznik administratora
JBoss 4.0. Podręcznik administratoraWydawnictwo Helion
 
Java 2. Techniki zaawansowane. Wydanie II
Java 2. Techniki zaawansowane. Wydanie IIJava 2. Techniki zaawansowane. Wydanie II
Java 2. Techniki zaawansowane. Wydanie IIWydawnictwo Helion
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduWydawnictwo Helion
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoWydawnictwo Helion
 
Praktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIPraktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIWydawnictwo Helion
 
Oracle Database 10g. Kompendium administratora
Oracle Database 10g. Kompendium administratoraOracle Database 10g. Kompendium administratora
Oracle Database 10g. Kompendium administratoraWydawnictwo Helion
 
J2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowychJ2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowychWydawnictwo Helion
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyWydawnictwo Helion
 
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IIWydawnictwo Helion
 
JavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanieJavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanieWydawnictwo Helion
 

Ähnlich wie Java Data Objects (20)

Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
 
J2EE. Wzorce projektowe
J2EE. Wzorce projektoweJ2EE. Wzorce projektowe
J2EE. Wzorce projektowe
 
Java. Kompendium programisty
Java. Kompendium programistyJava. Kompendium programisty
Java. Kompendium programisty
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
 
JBoss 4.0. Podręcznik administratora
JBoss 4.0. Podręcznik administratoraJBoss 4.0. Podręcznik administratora
JBoss 4.0. Podręcznik administratora
 
Java 2. Techniki zaawansowane. Wydanie II
Java 2. Techniki zaawansowane. Wydanie IIJava 2. Techniki zaawansowane. Wydanie II
Java 2. Techniki zaawansowane. Wydanie II
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
 
ABC Delphi 2006
ABC Delphi 2006ABC Delphi 2006
ABC Delphi 2006
 
Praktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIPraktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie II
 
Java. Wprowadzenie
Java. WprowadzenieJava. Wprowadzenie
Java. Wprowadzenie
 
Delphi 2005
Delphi 2005Delphi 2005
Delphi 2005
 
Oracle Database 10g. Kompendium administratora
Oracle Database 10g. Kompendium administratoraOracle Database 10g. Kompendium administratora
Oracle Database 10g. Kompendium administratora
 
J2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowychJ2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowych
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalisty
 
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
 
Delphi 7 i bazy danych
Delphi 7 i bazy danychDelphi 7 i bazy danych
Delphi 7 i bazy danych
 
JavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanieJavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanie
 

Mehr von Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Mehr von Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Java Data Objects

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Java Data Objects Autorzy: Sameer Tyagi, Keiron McCammon, KATALOG KSI¥¯EK Michael Vorburger, Heiko Bobzin T³umaczenie: Jaromir Senczyk KATALOG ONLINE ISBN: 83-7361-392-7 Tytu³ orygina³u: Core Java Data Objects ZAMÓW DRUKOWANY KATALOG Format: B5, stron: 456 Przyk³ady na ftp: 107 kB TWÓJ KOSZYK Ksi¹¿ka „Java Data Objects”: DODAJ DO KOSZYKA • Demonstruje praktyczne techniki stosowane przez zawodowych programistów • Zawiera poprawny, gruntownie przetestowany kod ród³owy programów oraz przyk³ady zaczerpniête z praktyki CENNIK I INFORMACJE • Skoncentrowana jest na nowoczesnych technologiach, które musz¹ poznaæ programi ci • Zawiera rady profesjonalistów, które pozwol¹ czytelnikowi tworzyæ najlepsze ZAMÓW INFORMACJE programy O NOWO CIACH Java Data Objects (JDO) przyspiesza tworzenie aplikacji w Javie dostarczaj¹c ZAMÓW CENNIK obiektowego mechanizmu trwa³o ci i standardowych interfejsów umo¿liwiaj¹cych korzystanie z baz danych. Ksi¹¿ka ta jest wszechstronnym przewodnikiem po zagadnieniach trwa³o ci JDO, przeznaczony dla zaawansowanego programisty. CZYTELNIA Korzystaj¹c z realistycznych przyk³adów kodu autorzy przedstawiaj¹ sposoby tworzenia, pobierania, aktualizacji i usuwania obiektów trwa³ych, cykl ¿ycia obiektów FRAGMENTY KSI¥¯EK ONLINE i przej cia pomiêdzy stanami, klasy i interfejsy JDO, zapytania, architekturê, problemy bezpieczeñstwa 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™. Je li chcesz po wiêciæ wiêcej czasu na rozwi¹zywanie zagadnieñ biznesowych, a mniej traciæ na zajmowanie siê problemem trwa³o ci, to potrzebujesz w³a nie JDO i jednej dobrej ksi¹¿ki, która pomo¿e Ci efektywnie u¿yæ JDO: „Java Data Objects”. • Omówienie specyfikacji JDO i podstawowych zagadnieñ zwi¹zanych z trwa³o ci¹ obiektów • Programowanie z u¿yciem JDO; najwa¿niejsze klasy i obiekty • Cykl ¿ycia obiektów Wydawnictwo Helion • Wyszukiwanie danych w JDO ul. Chopina 6 • Przyk³adowa architektura i jej konstrukcja z u¿yciem JDO 44-100 Gliwice • JDO a J2EE: JCA, EJB, transakcje, bezpieczeñstwo tel. (32)230-98-63 • Porównanie JDO z JDBC e-mail: helion@helion.pl • Przysz³o æ JDO i rozwój tej specyfikacji • Studium przypadku Uzupe³nieniem s¹ liczne dodatki omawiaj¹ce miêdzy innymi: stany JDO, metadane, jêzyk JDOQL w notacji BNF i dostêpne implementacje JDO.
  • 2. Spis treści O Autorach...................................................................................................................................................13 Przedmowa .................................................................................................................................................15 Wstęp.......................................................................................................................................................... 23 Część I Wprowadzenie 25 Rozdział 1. Przegląd specyfikacji JDO...................................................................................................... 27 1.1. Powstanie specyfikacji JDO..................................................................................... 27 1.2. Obiektowy model dziedziny ..................................................................................... 27 1.3. Trwałość ortogonalna ............................................................................................. 30 1.3.1. Obiekty trwałe i obiekty ulotne ........................................................................ 33 1.4. Środowiska zarządzane i niezarządzane ................................................................... 36 1.4.1. Środowiska niezarządzane.............................................................................. 36 1.4.2. Środowiska zarządzane .................................................................................. 36 1.5. Role i obowiązki..................................................................................................... 37 1.5.1. Specyfikacje JDO ........................................................................................... 38 1.5.2. Obowiązki programisty ................................................................................... 38 1.5.3. Obowiązki producenta .................................................................................... 40 1.6. Podsumowanie ...................................................................................................... 41 Rozdział 2. Podstawowe zagadnienia dotyczące trwałości obiektów .................................................. 43 2.1. Trwałość i aplikacje................................................................................................ 43 2.2. Serializacja binarna JDK ......................................................................................... 44 2.2.1. Interfejs programowy serializacji...................................................................... 44 2.2.2. Zarządzanie 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 typów String, Date i innych........................................................ 50 2.3.3. Odwzorowanie dziedziczenia ........................................................................... 51
  • 3. 4 Java Data Objects 2.3.4. Bezpieczeństwo............................................................................................. 53 2.3.5. Translacja języka zapytań ............................................................................... 54 2.3.6. Spójność referencyjna, usuwanie obiektów i inne zagadnienia ........................... 54 2.3.7. Trwałość transparentna i odwzorowania O/R.................................................... 54 2.3.8. Identyfikacja.................................................................................................. 55 2.4. Tworzenie własnej warstwy odwzorowania O/R ......................................................... 56 2.4.1. Buforowanie .................................................................................................. 56 2.4.2. Transakcyjny dostęp 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 Szczegóły 63 Rozdział 3. Rozpoczynamy programowanie z u yciem JDO .................................................................. 65 3.1. Jak działa 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. Połączenie 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. Obsługa wyjątków ................................................................................................ 92 3.11. Tożsamość obiektów ............................................................................................ 93 3.12. Typy tożsamości obiektów .................................................................................... 94 3.12.1. Tożsamość na poziomie bazy danych ............................................................ 95 3.12.2. Tożsamość na poziomie aplikacji .................................................................. 95 3.12.3. Tożsamość nietrwała ................................................................................... 98 3.13. Cykl życia obiektu ................................................................................................ 98 3.14. Sterowanie współbieżnością ................................................................................. 99 3.14.1. Transakcje ACID ........................................................................................ 100 3.14.2. Transakcje optymistyczne........................................................................... 100 3.15. Podsumowanie .................................................................................................. 101
  • 4. Spis treści 5 Rozdział 4. Cykl ycia obiektów...............................................................................................................103 4.1. Cykl życia obiektu trwałego ................................................................................... 103 4.1.1. Utrwalanie obiektu ....................................................................................... 104 4.1.2. Odtwarzanie obiektów z bazy danych ............................................................. 105 4.1.3. Uproszczony cykl życia obiektu...................................................................... 107 4.2. Informacja o stanie obiektu .................................................................................. 108 4.3. Operacje powodujące 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 pól wewnątrz transakcji...................................................................... 111 4.3.9. Zapis pól wewnątrz transakcji ....................................................................... 111 4.3.10. PersistenceManager.retrieve ...................................................................... 111 4.4. Wywołania 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. Przykłady ............................................................................................................. 120 4.7. Podsumowanie .................................................................................................... 124 Rozdział 5. Programowanie w JDO .........................................................................................................125 5.1. Koncepcje JDO .................................................................................................... 125 5.1.1. Zdolność do trwałości .................................................................................. 126 5.1.2. Metadane JDO............................................................................................. 126 5.1.3. Domyślna grupa pobierania .......................................................................... 128 5.1.4. Trwałość poprzez osiągalność....................................................................... 128 5.1.5. Obiekty klas pierwszej i drugiej kategorii........................................................ 129 5.1.6. Tożsamość obiektów.................................................................................... 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 wyjątków .................................................................................................... 182 5.4.1. JDOException .............................................................................................. 183 5.4.2. JDOFatalException ....................................................................................... 183
  • 5. 6 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 tożsamości ...................................................... 191 6.2. Wyszukiwanie zbioru obiektów za pomocą ekstensji................................................ 193 6.3. Wyszukiwanie obiektów za pomocą zapytań ........................................................... 194 6.3.1. Zapytania dla ekstensji ................................................................................ 197 6.4. JDOQL ................................................................................................................ 197 6.4.1. Specyfikacja filtrów ...................................................................................... 199 6.5. Zapytania, filtry i parametry opcjonalne.................................................................. 204 6.5.1. Deklaracje parametrów ................................................................................ 204 6.5.2. Deklaracje poleceń importu .......................................................................... 206 6.5.3. Deklaracje zmiennych .................................................................................. 206 6.5.4. Uporządkowanie wyników zapytania............................................................... 207 6.5.5. Przestrzenie nazw w zapytaniach................................................................... 208 6.6. Więcej 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. Wybór innego języka 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. Porównania baz danych ................................................................................ 216 7.3. J2EE, RMI i CORBA .............................................................................................. 217 7.4. Środowiska zarządzane i niezarządzane ................................................................. 218 7.4.1. Zarządzanie połączeniami............................................................................. 219 7.4.2. Zarządzanie transakcjami ............................................................................. 220
  • 6. Spis treści 7 7.5. Aplikacje wielowątkowe ........................................................................................ 221 7.5.1. Programowanie wielowątkowe....................................................................... 221 7.5.2. Uproszczone programowanie wielowątkowe ................................................... 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. Zarządzanie połączeniami............................................................................. 228 8.3.3. Zarządzanie transakcjami ............................................................................. 230 8.3.4. Bezpieczeństwo........................................................................................... 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. Zarządzanie transakcjami ............................................................................. 240 9.2.2. Przykład komponentu sesyjnego, który nie ma stanu i używa transakcji zarządzanych przez kontener ............................................................................. 243 9.2.3. Przykład komponentu sesyjnego, który ma stan i używa transakcji zarządzanych przez kontener ............................................................................. 245 9.2.4. Architektura zorientowana na usługi (SOA) ..................................................... 247 9.3. Komponenty sterowane komunikatami i JDO .......................................................... 257 9.3.1. Przykład kodu .............................................................................................. 258 9.4. Komponenty Entity i JDO ...................................................................................... 259 9.4.1. Trwałość zarządzana przez komponent i JDO.................................................. 261 9.5. Kiedy używać EJB? ............................................................................................... 261 9.5.1. Skalowalne aplikacje JDO i łączenie w klastry ................................................ 265 9.5.2. Rozwiązania z transmisją w obu kierunkach ................................................... 266 9.6. Podsumowanie .................................................................................................... 268 Rozdział 10. Bezpieczeństwo ...................................................................................................................271 10.1. Poziomy bezpieczeństwa .................................................................................... 271 10.1.1. Bezpieczeństwo na poziomie pól i klas ........................................................ 271 10.1.2. Bezpieczeństwo na poziomie bazy danych.................................................... 272 10.1.3. Bezpieczeństwo na poziomie aplikacji ......................................................... 273 10.2. Implementacja interfejsu PersistenceCapable ...................................................... 273 10.2.1. Referencyjne narzędzie rozszerzania kodu.................................................... 275 10.2.2. Zasady działania........................................................................................ 277 10.2.3. Śledzenie dostępu do pola ......................................................................... 279 10.2.4. Dostęp do metadanych .............................................................................. 282 10.2.5. Plik zasad bezpieczeństwa ......................................................................... 283 10.2.6. Problemy z bezpieczeństwem...................................................................... 283
  • 7. 8 Java Data Objects 10.3. Bezpieczeństwo aplikacji .................................................................................... 284 10.3.1. Bezpieczeństwo połączeń ........................................................................... 284 10.3.2. Środowiska zarządzane .............................................................................. 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 wartości .......................................................... 305 11.3.4. JDO i transakcje serwera aplikacji J2EE ....................................................... 306 11.3.5. Interfejs Transaction i synchronizacja za pomocą zwrotnych wywołań 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 możliwości JDBC 3.0......................................................................... 320 12.1.4. Rozszerzenia interfejsu JDBC...................................................................... 321 12.2. Przykład: przechowywanie obiektów w relacyjnej bazie danych za pomocą JDBC ...... 322 12.3. Porównanie JDBC i JDO ...................................................................................... 325 12.3.1. Porównanie możliwości JDBC i JDO ............................................................. 328 12.3.2. Nieporozumienia związane z JDBC i JDO ...................................................... 328 12.3.3. Kiedy używać JDBC .................................................................................... 333 12.3.4. Kiedy używać razem JDO i JDBC? ................................................................ 339 12.4. Podsumowanie .................................................................................................. 339 Rozdział 13. Wskazówki, triki i najlepsze rozwiązania.........................................................................341 13.1. Modelowanie danych.......................................................................................... 341 13.1.1. Wprowadzenie ........................................................................................... 341 13.1.2. Klasy obudowujące i typy podstawowe......................................................... 342 13.1.3. Referencje obiektów trwałych...................................................................... 343 13.1.4. Pola o typie kolekcji ................................................................................... 343 13.1.5. Modelowanie związków odwrotnych ............................................................. 346 13.1.6. Hierarchie dziedziczenia ............................................................................. 348 13.1.7. Klasy świadome trwałości .......................................................................... 348 13.2. JDO i serwlety.................................................................................................... 349 13.3. Wyodrębnienie klas należących do modelu dziedziny............................................. 352
  • 8. Spis treści 9 13.4. Wykorzystanie XML-a jako formatu wymiany danych .............................................. 353 13.4.1. Wprowadzenie ........................................................................................... 354 13.4.2. Alternatywy................................................................................................ 355 13.4.3. Dostępne technologie ................................................................................ 355 13.4.4. Przykład .................................................................................................... 358 13.5. Kontrola poprawności 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. Zagnieżdżanie transakcji ............................................................................ 368 14.1.2. Punkty odwoływania transakcji .................................................................... 368 14.1.3. Jawne blokowanie...................................................................................... 369 14.2. Optymalizacja wydajności ................................................................................... 369 14.3. Zarządzanie związkami ....................................................................................... 369 14.3.1. Związki dwukierunkowe .............................................................................. 370 14.3.2. Usuwanie kaskadowe................................................................................. 370 14.3.3. Odzyskiwanie zasobów zajmowanych przez obiekty trwałe ............................. 371 14.4. Rozszerzenia zapytań ......................................................................................... 371 14.4.1. Łańcuchy .................................................................................................. 371 14.4.2. Operacje agregacji ..................................................................................... 371 14.4.3. Projekcje................................................................................................... 372 14.5. Odwzorowania obiektów...................................................................................... 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 serwletów ............................................................................ 402
  • 9. 10 Java Data Objects Dodatki 403 Dodatek A Stany JDO ...............................................................................................................................405 Dodatek B Metadane XML........................................................................................................................409 Dodatek C Język JDOQL w notacji BNF ....................................................................................................419 Dodatek D PersistenceManagerFactory — informator ......................................................................425 Dodatek E Implementacje JDO.................................................................................................................429 Skorowidz .................................................................................................................................................441
  • 10. Cykl ycia obiektów W rozdziale tym omówimy cykl ycia obiektów oraz przedstawimy powody, dla których zna- jomość zmian stanu obiektów JDO mo e być istotna dla programisty aplikacji. Dlaczego znajomość cyklu ycia obiektu i zmian stanu jest tak wa na? Wyobraźmy sobie, jak działa maszyna wirtualna JVM, gdy aplikacja wywołuje operator PGY. Wiemy, e przy- dzielany jest odpowiedni obszar pamięci i zwracana jest jego referencja, ale w rzeczywisto- ści działanie maszyny wirtualnej jest bardziej skomplikowane. Najpierw mo e się okazać, e maszyna JVM musi załadować kod bajtowy z pewnego zasobu i przetłumaczyć go na in- strukcje macierzystego procesora. Wykonywana jest statyczna inicjacja, ładowane są klasy bazowe i wywoływane konstruktory. Jeszcze bardziej skomplikowany mo e być przebieg usuwania obiektu, w który zaanga owany będzie mechanizm odzyskiwania nieu ytków, me- chanizm słabych referencji, kolejki i zwrotne wywołania metod HKPCNKG. Dlatego te ma- szyna wirtualna JVM musi dysponować dobrze zdefiniowanym modelem cyklu ycia obiek- tów. Podobnym modelem cyklu dysponuje równie implementacja JDO dla obiektów trwa- łych — rozpoczynają one ycie jako zwykłe, ulotne obiekty języka Java, następnie uzyskują trwałość, mogą zostać usunięte bądź z powrotem przejść do stanu ulotnego i tak dalej. Zna- jomość cyklu ycia obiektów trwałych w ogóle nie jest konieczna, zwłaszcza szczegółowa. Jeśli jednak aplikacja u ywa wywołań zwrotnych, to zalecane jest myślenie w kategoriach efektów ubocznych związanych ze stanami obiektów trwałych i ich zmianami. Najpierw omówione zostaną obowiązkowe i opcjonalne stany obiektów trwałych, metody umo liwiające określenie stanu obiektu oraz metody, których skutkiem jest zmiana stanu. Zmiany stanu obiektów trwałych zilustrowane zostaną fragmentami kodu źródłowego w ję- zyku Java wyświetlającymi dodatkowo informacje o stanie tych obiektów. Cześć poświęcona wywołaniom zwrotnym wyjaśni sposób i warunki ich u ycia. Na końcu przedstawione zosta- ną te stany i operacje, które są w JDO opcjonalne. 4.1. Cykl ycia obiektu trwałego JDO definiuje siedem stanów obowiązkowych i trzy stany opcjonalne. Stany VTCPUKGPV, RGTUKU VGPVPGY, RGTUKUVGPVPGYFGNGVGF, JQNNQY, RGTUKUVGPVENGCP, RGTUKUVGPVFKTV[ i RGTUKUVGPV
  • 11. 104 Część II n Szczegóły FGNGVGF są obowiązkowe. Stany VTCPUKGPVFKTV[, VTCPUKGPVENGCP i RGTUKUVGPVPQPVTCPUC EVKQPCN są opcjonalne i zostaną omówione w dalszej części rozdziału. Niektóre ze zmian stanu obiektu są bezpośrednio wywoływane przez aplikację — na przy- kład na skutek utrwalenia obiektu. Równie rozpoczęcie lub zakończenie transakcji mo e wywołać zmianę stanu obiektu, czyli zachodzi ona na skutek wywołania przez aplikację jed- nej z metod DGIKP , EQOOKV lub TQNNDCEM klasy 6TCPUCEVKQP. Zauwa my, e w środo- wiskach zarządzanych zmiany stanu mogą być równie wywoływane przez zewnętrzny kon- troler transakcji. Instancja języka Java rozpoczyna cykl ycia JDO na skutek wywołania me- tody OCMG2GTUKUVGPV lub załadowania istniejącego obiektu trwałego z bazy danych. Rozdział rozpoczniemy od omówienia dwóch typowych sekwencji utrwalania obiektów i odtwarzania ich na podstawie informacji zapisanych w bazie danych. Zilustrujemy je krót- kim przykładem kodu oraz poka emy sposób u ycia klasy ,1*GNRGT w celu uzyskania in- formacji o zmianach stanów zachodzących podczas wykonywania wspomnianych sekwencji. 4.1.1. Utrwalanie obiektu Operacje prowadzące do utrwalenia obiektu mogą przebiegać w sposób przedstawiony na diagramie stanów (rysunek 4.1). Rysunek 4.1. Utrwalanie instancji ulotnych 4.1.1.1. Stan ulotny (transient) Instancje klasy zdolnej do trwałości zachowują się po ich utworzeniu za pomocą operatora PGY w taki sam sposób jak instancje ka dej innej klasy języka Java. Modyfikacje pól tych in- stancji nie są śledzone, co w praktyce oznacza taką samą efektywność dostępu jak w przypa- dku instancji klas, które nie są zdolne do trwałości. Na instancje ulotne nie mają wpływu wywołania metod związanych z transakcjami czyli DGIKP , EQOOKV i TQNNDCEM z wyjąt- kiem sytuacji, w których instancje te są osiągalne za pośrednictwem obiektów trwałych. 4.1.1.2. Stan persistent-new Wywołanie metody 2GTUKUVGPEG/CPCIGTOCMG2GTUKUVGPV przypisuje instancji nowy identy- fikator, a jej stan zmienia się z VTCPUKGPV na RGTUKUVGPVPGY. Obiekt w stanie RGTUKUVGPV PGY zachowuje się tak samo jak obiekt w stanie VTCPUKGPV, ale zapisywany jest w bazie da- nych podczas zatwierdzania transakcji lub gdy stan obiektu musi zostać zsynchronizowany ze stanem w wewnętrznych buforach JDO. Obiekt znajdujący się w stanie RGTUKUVGPVPGY
  • 12. Rozdział 4. n Cykl ycia obiektów 105 jest ju kontrolowany przez implementację JDO. Obiekty mogą przejść do stanu RGTUKUVGPV PGY równie wtedy, gdy osiągalne są za pośrednictwem innych obiektów trwałych. Proces ten przebiega tak długo, a wszystkie instancje osiągalne z danego obiektu znajdą się w stanie VTCPUKGPV lub RGTUKUVGPVPGY. Pomiędzy wywołaniem metody OCMG2GTUKUVGPV a zatwier- dzeniem transakcji referencje mogą ulec zmianie, a osiągalne instancje stać się niedostępne. Takie tymczasowo trwałe obiekty znajdują się równie w stanie RGTUKUVGPVPGY. Jednak ich stan mo e ulec zmianie podczas zatwierdzania transakcji, gdy oka e się, e tymczasowo trwałe obiekty nie są ju osiągalne. 4.1.1.3. Stan pusty (hollow) Po pomyślnym zakończeniu transakcji stan obiektu zmienia się z RGTUKUVGPVPGY na JQNNQY. Obiekt w stanie pustym jest referencją, która mo e reprezentować pewne dane znajdujące się w bazie danych, ale które nie zostały jeszcze załadowane do pamięci lub są nieaktualne. Zwykle inni klienci bazy danych lub inne aplikacje JDO posiadają swobodny dostęp oraz mo liwość modyfikacji danych w bazie, których referencją jest pusty obiekt. Gdy aplikacja będzie próbowała u yć obiektu w stanie pustym, to obowiązkiem implementacji jest ponowne załadowanie danych do pamięci. Scenariusz ten zostanie szczegółowo wyjaśniony nieco da- lej. Po zatwierdzeniu transakcji zawartość obiektów znajdujących się w stanie pustym zostaje usunięta w celu zwolnienia pamięci. Jeśli wśród tych danych znajdowały się referencje obie- któw, to mechanizmowi odzyskiwania nieu ytków nie wolno zwolnić grafu obiektów. Stan pusty nie mo e zostać stwierdzony przez aplikację. Nie jest dostępna odpowiednia w tym celu metoda klasy ,1*GNRGT, a próba dostępu do pól takiego obiektu mo e spowo- dować zmianę jego stanu i nie jest wtedy mo liwe określenie poprzedniego stanu obiektu. 4.1.1.4. Stan persistent-new-deleted Gdy obiekt znajdujący się w stanie RGTUKUVGPVPGY zostaje usunięty przez wywołanie metody 2GTUKUVGPEG/CPCIGTFGNGVG2GTUKUVGPV , to jego stan zmienia się na RGTUKUVGPVPGYFGNGVGF. Przywrócenie takiego obiektu nie jest mo liwe i stan RGTUKUVGPVPGYFGNGVGF jest osta- teczny do momentu zakończenia transakcji. Próba dostępu do pól obiektu znajdującego się w stanie RGTUKUVGPVPGYFGNGVGF spowoduje zgłoszenie wyjątku ,17UGT'ZEGRVKQP. Nie dotyczy to jedynie pól wchodzących w skład klucza głównego. Po zakończeniu transakcji (poprzez wywołanie metody EQOOKV lub TQNNDCEM ) usunięta instancja przechodzi do stanu VTCPUKGPV. 4.1.2. Odtwarzanie obiektów z bazy danych Przejdziemy teraz do omówienia zmian stanów instancji, które zostają początkowo załado- wane z bazy danych. Diagram zmian stanów dla takich instancji przedstawiony został na rysunku 4.2
  • 13. 106 Część II n Szczegóły Rysunek 4.2. Odtwarzanie instancji z bazy danych 4.1.2.1. Stan pusty (hollow) Jak ju wspomnieliśmy wcześniej, obiekty utworzone w celu reprezentacji referencji danych zapisanych w bazie danych, które nie zawierają jeszcze danych, znajdują się równie w sta- nie pustym. Próba dostępu do ich pól powoduje załadowanie danych z bazy. Obiekty znaj- dujące się w stanie pustym tworzone są za pomocą wywołań metod takich jak 'ZVGPV KVGTCVQT PGZV , 2GTUKUVGPEG/CPCIGTIGV1DLGEV$[+F lub wykonania zapytania. Zwy- kle trwałe pola obiektów z stanie pustym inicjowane są za pomocą wartości domyślnych (0 lub PWNN), ale poniewa obiekty takie tworzone są za pomocą konstruktorów nieposiadają- cych argumentów, to konstruktory te mogą nadawać tym e polom równie inne wartości początkowe. Na tym mo e właśnie polegać jedyna ró nica pomiędzy obiektami w stanie pu- stym, które brały wcześniej udział w transakcji (omówionymi w poprzednim punkcie), a obiektami w stanie pustym utworzonymi przez implementację JDO. 4.1.2.2. Stan persistent-clean Po nadaniu polom obiektu wartości pobranych z bazy danych obiekt taki przechodzi ze sta- nu JQNNQY do stanu RGTUKUVGPVENGCP, ale tylko wtedy, gdy jego dane nie zostały zmodyfi- kowane przez bie ącą transakcję. Stan te nosi taką nazwę (ang. clean — czysty), poniewa dane obiektu w pamięci są spójne z odpowiadającymi im danymi w bazie. Chocia pobraniem danych obiektu zajmuje się implementacja JDO, to referencje do innych obiektów rozwiązy- wane są przez instancję klasy 2GTUKUVGPEG/CPCIGT. Referencje te mogą wskazywać obiekty, które znajdują się ju w pamięci. W przeciwnym razie 2GTUKUVGPEG/CPCIGT tworzy nowe obiekty w stanie pustym. Zasoby obiektów znajdujących się w stanie RGTUKUVGPVENGCP mogą zostać zwolnione przez mechanizm odzyskiwania nieu ytków, jeśli w kodzie aplikacji nie istnieją ju referencje do tych obiektów. Jeśli obiekty zostały rzeczywiście zwolnione przez ten mechanizm, to obowiązkiem klasy 2GTUKUVGPEG/CPCIGT jest buforowanie ich referencji i utworzenie nowych obiektów w stanie pustym, gdy oka e się, e są one potrzebne.
  • 14. Rozdział 4. n Cykl ycia obiektów 107 4.1.2.3. Stan persistent-dirty Obiekt przechodzi ze stanu JQNNQY lub RGTUKUVGPVENGCP do stanu RGTUKUVGPVFKTV[, gdy zmodyfikowane zostaje co najmniej jedno jego pole. Stan ten nosi taką nazwę (ang. dirty — brudny), poniewa dane obiektu w pamięci przestają być spójne z danymi znajdującymi się w bazie. Nawet jeśli uzyskana w wyniku modyfikacji wartość pola jest taka sama jak poprzednia, to obiekt i tak przechodzi do stanu RGTUKUVGPVFKTV[. Co więcej, instancja nie powraca do stanu JQNNQY lub RGTUKUVGPVENGCP, gdy przywrócone zostaną poprzednie warto- ści pól. Gdy obiektowi znajdującemu się w stanie RGTUKUVGPVENGCP lub RGTUKUVGPVFKTV[ zostanie przypisana ulotna instancja, to obiekt taki nie przechodzi do stanu RGTUKUVGPVPGY. 4.1.2.4. Stan persistent-deleted Na skutek wywołania metody 2GTUKUVGPV/CPCIGTFGNGVG2GTUKUVGPV stan obiektu trwałe- go zmienia się na RGTUKUVGPVFGNGVGF. Opuszczenie tego stanu czyli przywrócenie usuniętej instancji trwałej mo liwe jest jedynie poprzez przerwanie transakcji. Pomyślne zatwierdze- nie transakcji powoduje przejście obiektu ze stanu RGTUKUVGPVFGNGVGF do stanu VTCPUKGPV. Obiekt nie mo e zostać ponownie utrwalony z tą samą to samością tak długo jak znajduje się w stanie RGTUKUVGPVFGNGVGF. 4.1.3. Uproszczony cykl ycia obiektu Diagram zamieszczony na rysunku 4.3 przedstawia uproszczony cykl ycia obiektu. Obszar obwiedziony prostokątem Odczyt zawiera stany, w których odczyt (dostęp) obiektu nie po- woduje zmiany ich stanu. Prostokąt Zapis zawiera stany, w których modyfikacja obiektu nie powoduje zmiany ich stanu. Rysunek 4.3. Cykl życia obiektu — stany obowiązkowe
  • 15. 108 Część II n Szczegóły 4.2. Informacja o stanie obiektu Wymienionych wcześniej siedem stanów: VTCPUKGPV, RGTUKUVGPVPGY, RGTUKUVGPVPGYFGNG VGF, JQNNQY, RGTUKUVGPVENGCP, RGTUKUVGPVFKTV[ i RGTUKUVGPVFGNGVGF jest obowiązkowych dla wszystkich implementacji JDO. Jednak implementacje JDO nie udostępniają adnego interfejsu programowego, który umo liwiałby uzyskanie informacji o stanach, w których znajdują się obiekty JDO. Dokładny stan obiektu znany jest jedynie implementacji JDO, a niektóre stany mogą nawet nie być implementowane przez pewnych producentów. Stany obiektów JDO są zdefiniowane bowiem w sposób behawioralny. Mimo to istnieją pewne metody, które pozwalają sprawdzić atrybuty trwałości dla danego obiektu i na ich podsta- wie wnioskować o stanie obiektu. Metody te nale ą do klasy ,1*GNRGT: DQQNGCP KUGNGVGF 1DLGEV Q DQQNGCP KUKTV[ 1DLGEV Q DQQNGCP KU0GY 1DLGEV Q DQQNGCP KU2GTUKUVGPV 1DLGEV Q DQQNGCP KU6TCPUCEVKQPCN 1DLGEV Q Nie istnieje natomiast metoda, która pozwalałaby ustalić, czy obiekt znajduje się w stanie pustym. Sposób ładowania zawartości takiego obiektu zale y bowiem od konkretnej imple- mentacji. W dalszej części rozdziału przedstawimy jednak inny sposób, który pozwala uzy- skać informację o tym, czy obiekt znajduje się w stanie pustym. Przedstawiona poni ej kla- sa wyświetla znaczniki instancji, posługując się klasą ,1*GNRGT: RWDNKE ENCUU 'ZCORNG ] RWDNKE UVCVKE XQKF RTKPV+PHQ 5VTKPI OUI 1DLGEV QDL ] 5VTKPI$WHHGT DWH PGY 5VTKPI$WHHGT OUI KH ,1*GNRGTKU2GTUKUVGPV QDL DWHCRRGPF RGTUKUVGPV KH ,1*GNRGTKU0GY QDL DWHCRRGPF PGY KH ,1*GNRGTKUKTV[ QDL DWHCRRGPF FKTV[ KH ,1*GNRGTKUGNGVGF QDL DWHCRRGPF FGNGVGF KH ,1*GNRGTKU6TCPUCEVKQPCN QDL DWHCRRGPF VTCPUCEVKQPCN 5[UVGOQWVRTKPVNP DWHVQ5VTKPI _ _ Poni szy fragment kodu ilustruje omówione dotąd stany i metody: RWDNKE UVCVKE XQKF OCKP 5VTKPI CTIU=? ] 2GTUKUVGPEG/CPCIGT RO ROHIGV2GTUKUVGPEG/CPCIGT ROEWTTGPV6TCPUCEVKQP DGIKP $QQM DQQM PGY $QQM
  • 16. Rozdział 4. n Cykl ycia obiektów 109 RTKPV+PHQ PQYC KPUVCPELC MNCU[ $QQM DQQM ROOCMG2GTUKUVGPV DQQM RTKPV+PHQ VTYC C KPUVCPELC MNCU[ $QQM DQQM ROFGNGVG2GTUKUVGPV DQQM RTKPV+PHQ WUWPKúVC KPUVCPELC MNCU[ $QQM DQQM ROEWTTGPV6TCPUCEVKQP TQNNDCEM RTKPV+PHQ QFYQ CPKG VTCPUCMELK DQQM ROEWTTGPV6TCPUCEVKQP DGIKP ROOCMG2GTUKUVGPV DQQM ROEWTTGPV6TCPUCEVKQP EQOOKV RTKPV+PHQ CVYKGTFGPKG VTCPUCMELK DQQM ROEWTTGPV6TCPUCEVKQP DGIKP 5VTKPI VKVNG DQQMVKVNG RTKPV+PHQ QFE[V RQNC DQQM DQQMVKVNG PQYC DQQMVKVNG RTKPV+PHQ OQF[HKMCELC RQNC DQQM ROFGNGVG2GTUKUVGPV DQQM RTKPV+PHQ WUWPKúVC KPUVCPELC MNCU[ $QQM DQQM ROEWTTGPV6TCPUCEVKQP EQOOKV RTKPV+PHQ CVYKGTFGPKG VTCPUCMELK DQQM _ Wykonanie powy szego kodu spowoduje wyświetlenie następującego tekstu: PQYC KPUVCPELC MNCU[ $QQM FKTV[ VTYC C KPUVCPELC MNCU[ $QQM RGTUKUVGPV PGY FKTV[ WUWPKúVC KPUVCPELC MNCU[ $QQM RGTUKUVGPV PGY FKTV[ FGNGVGF QFYQ CPKG VTCPUCMELK FKTV[ CVYKGTFGPKG VTCPUCMELK RGTUKUVGPV QFE[V RQNC RGTUKUVGPV OQF[HKMCELC RQNC RGTUKUVGPV FKTV[ WUWPKúVC KPUVCPELC MNCU[ $QQM RGTUKUVGPV FKTV[ FGNGVGF CVYKGTFGPKG VTCPUCMELK FKTV[ 4.3. Operacje powodujące zmianę stanu W poprzednim podrozdziale przestawiliśmy podstawowe stany obiektów oraz operacje ta- kie jak odczyt pola lub usunięcie obiektu trwałego z bazy, które w oczywisty sposób zmie- niają stan obiektów. W tym podrozdziale przyjrzymy się bli ej metodom zmieniającym stan obiektów i wyjaśnimy ich działanie bardziej szczegółowo. Niektóre z tych metod zmieniają stan obiektów na skutek bezpośredniego ich wywołania, inne wpływają pośrednio na stan wielu obiektów.
  • 17. 110 Część II n Szczegóły 4.3.1. PersistenceManager.makePersistent Metoda OCMG2GTUKUVGPV klasy 2GTUKUVGPEG/CPCIGT powoduje przejście ulotnych obiektów do stanu RGTUKUVGPVPGY. Podczas wykonania tej metody przeglądany jest graf obiektu w celu znalezienia innych obiektów znajdujących się jeszcze w stanie VTCPUKGPV. Równie te obiekty mogą niejawnie przejść do stanu RGTUKUVGPVPGY. 4.3.2. PersistenceManager.deletePersistent Wywołanie metody FGNGVG2GTUKUVGPV powoduje przejście obiektu ze stanu RGTUKUVGPVENGCP, RGTUKUVGPVFKTV[ lub JQNNQY do stanu RGTUKUVGPVFGNGVGF, natomiast obiekty znajdujące się dotychczas w stanie RGTUKUVGPVPGY przechodzą do stanu RGTUKUVGPVPGYFGNGVGF. Ope- racja ta nie ma wpływu na inne osiągalne obiekty. 4.3.3. PersistenceManager.makeTransient Obiekt mo e przejść do stanu VTCPUKGPV pod warunkiem, e jego obecnym stanem jest RGT UKUVGPVENGCP lub JQNNQY. Na skutek wywołania metody OCMG6TCPUKGPV obiekt taki zostaje wyjęty spod kontroli instancji klasy 2GTUKUVGPEG/CPCIGT i traci swoją to samość. Metoda ta nie wywiera wpływu na inne obiekty osiągalne za pośrednictwem obiektu, który był jej pa- rametrem wywołania. 4.3.4. Transaction.commit Instancje nale ące do bie ącej transakcji są przetwarzane przez JDO podczas jej zatwierdza- nia, instancje znajdujące się w stanie JQNNQY nie zmieniają swojego stanu, natomiast instan- cje znajdujące się w stanie PGY, ENGCP lub FKTV[ przechodzą do stanu JQNNQY. Wszystkie in- ne instancje stają się ulotne. Po zatwierdzeniu instancji obiekty znajdujące się w stanie pustym oraz zwykłe, ulotne obiekty języka Java pozostają pod kontrolą instancji klasy 2GTUKUVGP EG/CPCIGT. 4.3.5. Transaction.rollback Na skutek odwołania transakcji obiekty znajdujące się w stanie ENGCP, FKTV[ lub FGNGVGF przechodzą do stanu JQNNQY. Pozostałe obiekty stają się ulotne. Obiekty, które znajdowały się w stanie JQNNQY lub VTCPUKGPV powracają do swojego poprzedniego stanu. 4.3.6. PersistenceManager.refresh Wywołanie metody TGHTGUJ powoduje ponowne załadowanie danych obiektu z bazy na sku- tek czego wszelkie modyfikacje obiektu zostają utracone. Metoda ta przeprowadza obiekty ze stanu RGTUKUVGPVFKTV[ do stanu RGTUKUVGPVENGCP.
  • 18. Rozdział 4. n Cykl ycia obiektów 111 4.3.7. PersistenceManager.evict Metoda ta umo liwia zaoszczędzenie pamięci przez implementację buforowania stosowaną w klasie 2GTUKUVGPEG/CPCIGT. Na skutek jej u ycia obiekty przechodzą ze stanu RGTUKUVGPV ENGCP do stanu JQNNQY. Wartości pól obiektów są przy tym usuwane, aby umo liwić mechani- zmowi odzysku nieu ytków zwolnienie podobiektów. 4.3.8. Odczyt pól wewnątrz transakcji Po wczytaniu danych z bazy obiekty przechodzą ze stanu JQNNQY do stanu RGTUKUVGPVENGCP. Gdy stosowany jest pesymistyczny algorytm zarządzania współbie nością, to obiekt mo e zostać zablokowany dla zapobie enia równoczesnej modyfikacji. 4.3.9. Zapis pól wewnątrz transakcji Gdy podczas wykonywania transakcji zmodyfikowane zostaje pole obiektu znajdującego się pod kontrolą instancji klasy 2GTUKUVGPEG/CPCIGT, to implementacja JDO musi zapamię- tać, e nale y później zaktualizować dane tego obiektu w bazie. Obiekt przechodzi wtedy ze stanu RGTUKUVGPVENGCP lub JQNNQY do stanu RGTUKUVGPVFKTV[. Jeśli stosowany jest pe- symistyczny algorytm zarządzania współbie nością, to implementacja JDO mo e zabloko- wać dostęp do obiektu innym klientom tej samej bazy danych. Modyfikacja wartości pól obiektów znajdujących się w stanie VTCPUKGPV, RGTUKUVGPVFKTV[ lub RGTUKUVGPVPGY pozo- staje bez wpływu na stan takich obiektów. Gdy polu obiektu przypisywany jest inny obiekt, to zmodyfikowany obiekt przechodzi do stanu RGTUKUVGPVFKTV[, a obiekt przypisany nie zmienia swojego stanu. 4.3.10. PersistenceManager.retrieve Wywołanie metody 2GTUKUVGPEG/CPCIGTTGVTKGXG ma ten sam skutek, co odczyt pola obie- ktu podczas bie ącej transakcji. 4.4. Wywołania zwrotne Implementując metody wywoływane zwrotnie aplikacja mo e przejąć obsługę części omó- wionych wydarzeń występujących w cyklu ycia obiektu. Istnieją w zasadzie trzy sytuacje, w których programista aplikacji mo e zaimplementować w ten sposób specjalne zachowa- nie obiektów trwałych: n odczyt lub zapis wartości pól, które nie są trwałe lub nie powinny być przetwarzane przez domyślny algorytm JDO, n usuwanie obiektów składowych, n usuwanie zbędnych referencji.
  • 19. 112 Część II n Szczegóły Metody wywoływane zwrotnie umieszczone zostały w osobnym interfejsie, którego obsłu- ga przypomina sposób obsługi interfejsu etykietowego LCXCKQ5GTKCNKCDNG. Jeśli klasa zdolna do trwałości implementuje interfejs +PUVCPEG%CNNDCEMU, to jest to sygnałem dla im- plementacji JDO, e nale y u yć wywołań zwrotnych. W przeciwnym razie nie są one wy- korzystywane. 4.4.1. Zastosowania metody jdoPostLoad Metoda LFQ2QUV.QCF wywoływana jest za ka dym razem, gdy obiekt trwały zostaje załado- wany z bazy danych czyli, gdy jego stan zmienia się z JQNNQY na RGTUKUVGPVENGCP. Dokład- niej rzecz ujmując, metoda ta jest wywoływana w momencie, gdy dane obiektu stają się spój- ne z danymi zapisanymi w bazie danych. Interfejs InstanceCallbacks Jeśli klasa implementuje interfejs +PUVCPEG%CNNDCEMU, to metody LFQ2QUV.QCF, LFQ 2TG5VQTG, LFQ2TG%NGCT i LFQ2TGGNGVG są automatycznie wywoływane przez imple- mentację JDO, gdy pola instancji są odczytywane, modyfikowane, zerowane lub obiekty są usuwane. W przeciwieństwie do interfejsu 5GTKCNKCDNG klasa odpowiedzialna jest za wywołanie metod interfejsu +PUVCPEG%CNNDCEMU swojej klasy bazowej. Metody inter- fejsu +PUVCPEG%CNNDCEMU zadeklarowane są jako metody o dostępie publicznym i dla- tego należy zwrócić uwagę, by nie wywoływać ich w innych sytuacjach. Implementując metodę LFQ2QUV.QCF, mo emy zaoszczędzić na kodzie sprawdzającym po- czątkowe przypisanie wartości ulotnych, poniewa JDO definiuje, e metoda ta wywoły- wana jest dokładnie raz. Klasa mo e więc zaimplementować metodę LFQ2QUV.QCF, aby przypisać wartości początkowe polom ulotnym, zwłaszcza gdy zale ą one od wartości pól trwałych. Mo liwość taka jest szczególnie przydatna, gdy ustalenie tych wartości wymaga skomplikowanych obliczeń, które nie powinny być wykonywane wielokrotnie. Inne zastosowanie mo e polegać na rejestrowaniu przez obiekty aplikacji załadowania obiektów trwałych z bazy danych. Na przykład w celu odroczenia inicjacji kolekcji do momentu rzeczywistego jej u ycia, co pozwala zaoszczędzić pamięć i zwiększyć efektyw- ność działania programu: RWDNKE ENCUU $QQM KORNGOGPVU LCXCZLFQ+PUVCPEG%CNNDCEMU ] VTCPUKGPV /CR O[/CR PC TCKG PKG LGUV CKPKELQYCPC RWDNKE $QQM 5VTKPI VKVNG ] W [YCP[ RTG CRNKMCELú _ RTKXCVG $QQM ] W [YCP[ RTG ,1 _ RWDNKE XQKF LFQ2QUV.QCF ] O[/CR PGY *CUJ/CR KPKELQYCPC RQFECU CFQYCPKC _
  • 20. Rozdział 4. n Cykl ycia obiektów 113 RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG RWDNKE XQKF LFQ2TG5VQTG ] _ RWDNKE XQKF LFQ2TGGNGVG ] _ RWDNKE XQKF LFQ2TG%NGCT ] _ _ 4.4.2. Zastosowania metody jdoPreStore Metoda ta wywoływana jest przed zapisaniem pól do bazy danych. Jedno z zastosowań tej metody polega na aktualizacji wartości pól trwałych na podstawie pól, które nie są trwałe przed zakończeniem transakcji. Metoda mo e być równie wykorzystana w celu sprawdze- nia, czy wartości pól trwałych są spójne lub spełniają ograniczenia. W przypadku, gdy war- tość pola narusza zdefiniowane ograniczenia, aplikacja mo e uniemo liwić ich zapisanie w bazie danych, zgłaszając wyjątek. Jednak obiekty biznesowe powinny udostępniać meto- dy walidacji umo liwiające sprawdzenie zgodności z nało onymi ograniczeniami. Metody te powinny być wywoływane przez aplikację przed zapisaniem danych w bazie. Powiązanie tego rodzaju walidacji ze szkieletem trwałości nie jest dobrą praktyką. Metody LFQ2TG5VQTG nale y raczej u ywać w celu wykrycia błędnych wartości pojawiających się w programie. Poni ej przedstawiamy sposób aktualizacji pola będącego tablicą bajtów za pomocą strumie- nia serializowanych obiektów, które nie są trwałe: RWDNKE ENCUU $QQM KORNGOGPVU +PUVCPEG%CNNDCEMU ] VTCPUKGPV %QNQT O[%QNQT RQNG PKG LGUV VTYC G RTKXCVG D[VG=? CTTC[ QDU WIKYCPC RTG YKúMUQ è KORNGOGPVCELK ,1 RWDNKE XQKF LFQ2QUV.QCF ] 1DLGEV+PRWV5VTGCO KP PGY 1DLGEV+PRWV5VTGCO PGY $[VG#TTC[+PRWV5VTGCO CTTC[ O[%QNQT %QNQT KPTGCF1DLGEV KPENQUG _ RWDNKE XQKF LFQ2TG5VQTG ] $[VG#TTC[1WVRWV5VTGCO DQ PGY $[VG#TTC[1WVRWV5VTGCO 1DLGEV1WVRWV5VTGCO QWV PGY 1DLGEV1WVRWV5VTGCO DQ QWVYTKVG1DLGEV O[%QNQT QWVENQUG CTTC[ DQIGV$[VGU _ RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG RWDNKE XQKF LFQ2TGGNGVG ] _ RWDNKE XQKF LFQ2TG%NGCT ] _ _
  • 21. 114 Część II n Szczegóły 4.4.3. Zastosowania metody jdoPreDelete Metoda LFQ2TGGNGVG wywoływana jest przed usunięciem obiektu z bazy danych — na przy- kład, gdy aplikacja wywołała metodę 2GTUKUVGPEG/CPCIGTFGNGVG2GTUKUVGPV. Metoda LFQ 2TGGNGVG nie jest wywoływana, gdy obiekt usuwany jest przez innego klienta tej samej ba- zy danych lub przez inne, wykonywane równolegle transakcje. Metoda LFQ2TGGNGVG powi- nna być u ywana jedynie dla obiektów znajdujących się w pamięci. Typowym jej zastoso- waniem jest usuwanie podobiektów zale nych od danego obiektu: RWDNKE ENCUU $QQM5JGNH KORNGOGPVU +PUVCPEG%CNNDCEMU ] KPUVCPELC MNCU[ $QQM5JGNH OQ G CYKGTCè %QNNGEVKQP UJGNXGU %QNNGEVKQP DQQMU RWDNKE XQKF LFQ2TGGNGVG ] RQDKGTC Y C EKYæ KPUVCPELú 2GTUKUVGPEG/CPCIGT 2GTUKUVGPEG/CPCIGT RO ,1*GNRGTIGV2GTUKUVGPEG/CPCIGT VJKU WUWYC UJGNXGU CNG PKG DQQMU ROFGNGVG#NN UJGNXGU _ RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG RWDNKE XQKF LFQ2QUV.QCF ] _ RWDNKE XQKF LFQ2TG5VQTG ] _ RWDNKE XQKF LFQ2TG%NGCT ] _ _ Społeczność związana z JDO toczyła długie dyskusje dotyczące tego, czy obsługa obiektów zale nych powinna odbywać się w kodzie źródłowym w języku Java czy raczej być zade- klarowana w pliku metadanych JDO. Kolejny przykład zastosowania metody LFQ2TGGNGVG pokazuje sposób wyrejestrowania obiektu z innego obiektu, który posiada jego referencję. Implementacja tej operacji mo e być całkiem skomplikowana, gdy model obiektowy danej aplikacji rozrośnie się. A oto prosty przykład: RWDNKE ENCUU #KUNG KORNGOGPVU +PUVCPEG%CNNDCEMU ] KPUVCPELC MNCU[ #KUNG CYKGTC MQNGMELú KPUVCPELK MNCU[ $QQM5JGNH %QNNGEVKQP UJGNXGU _ RWDNKE ENCUU $QQM5JGNH KORNGOGPVU +PUVCPEG%CNNDCEMU ] HKPCN #KUNG CKUNG RQ Q GPKG RÎ MK OQIæ D[è VYQTQPG TCGO RWDNKE $QQM5JGNH #KUNG CK ] VJKUCKUNG CK CKUNGUJGNXGUCFF VJKU _
  • 22. Rozdział 4. n Cykl ycia obiektów 115 RTKXCVG $QQM5JGNH ]
  • 24. _ Y[TGLGUVTQYWLG WUWYCPG QDKGMV[ QDKGMVW MVÎT[ LG CYKGTC RWDNKE XQKF LFQ2TGGNGVG ] CKUNGUJGNXGUTGOQXG VJKU _ RQQUVC G OGVQF[ Y[YQ [YCPG YTQVPKG RWDNKE XQKF LFQ2QUV.QCF ] _ RWDNKE XQKF LFQ2TG5VQTG ] _ RWDNKE XQKF LFQ2TG%NGCT ] _ _ U ywając JDO mamy zawsze mo liwość wyboru modelowania związku pomiędzy obiek- tami za pomocą referencji wprzód (instancja #KUNG posiada instancje $QQM5JGNH) lub refe- rencji wstecz (instancje $QQM5JGNH nale ą do instancji #KUNG). Nawigacja od obiektu nadrzęd- nego do podrzędnego wymaga zapytania (odnalezienia instancji $QQM5JGNH posiadającej referencję wskazanej instancji #KUNG). Wybór sposobu modelowania związków pomiędzy obiektami nale y do aplikacji. Gdy do wyrejestrowania obiektów u ywane są zwrotne wy- wołania metod, to konieczne jest zastosowanie referencji wstecz ($QQM5JGNHCKUNG). 4.4.4. Zastosowania metody jdoPreClear Metoda LFQ2TG%NGCT zostaje wywołana, gdy obiekt przechodzi do stanu JQNNQY lub VTCPUKGPV ze stanu RGTUKUVGPVFGNGVGF, RGTUKUVGPVPGYFGNGVGF, RGTUKUVGPVENGCP lub RGTUKUVGPV FKTV[ na skutek zakończenia transakcji. Wywołanie tej metody mo e być u yte w celu wy- zerowania nietrwałych referencji innych obiektów, aby umo liwić zwolnienie zajmowanych przez nie zasobów mechanizmowi odzyskiwania nieu ytków. Inne potencjalne zastosowa- nia to wyrejestrowanie jednych obiektów z innych obiektów bądź zerowanie pól ulotnych lub nadawanie im niedozwolonych wartości dla zapobie enia przypadkowemu dostępowi do wyzerowanych instancji. 4.5. Stany opcjonalne JDO definiuje stany opcjonalne, które mogą zostać zaimplementowane przez producenta implementacji JDO. Zadaniem tych stanów jest umo liwienie posługiwania się obiektami trwałymi, które mogą nie zawierać spójnych danych na zewnątrz aktywnej transakcji. Stany te mogą być równie wykorzystane dla obiektów ulotnych, które powinny zachowywać się jak obiekty trwałe w obrębie aktywnej transakcji. Zanim jednak aplikacja rozpocznie korzy- stanie z tych opcjonalnych mo liwości, powinna najpierw sprawdzić ich dostępność za po- mocą metody 2GTUKUVGPEG/CPCIGT(CEVQT[UWRRQTVGF1RVKQPU .
  • 25. 116 Część II n Szczegóły 4.5.1. Ulotne instancje transakcyjne Ulotne instancje klas zdolnych do trwałości mogą stać się transakcyjne, ale nie trwałe na skutek wywołania metody 2GTUKUVGPEG/CPCIGTOCMG6TCPUCEVKQPCN. Obiekty takie nazywamy ulotnymi instancjami transakcyjnymi. Ich dane zapisywane są w pewien sposób podczas wywołania metody OCMG6TCPUCEVKQPCN i odtwarzane w przypadku odwołania transakcji, jed- nak nie są utrwalane w bazie danych. Mo liwość taka jest szczególnie przydatna w sytuacji, gdy skomplikowana operacja modyfikuje wiele obiektów i mo e zostać odwołana. Ulotne obiekty znajdujące się w pamięci zostają równie powiązane w sensie transakcji z obiekta- mi trwałymi będącymi pod kontrolą tej samej instancji klasy 2GTUKUVGPEG/CPCIGT. Ulotne instancje transakcyjne są dostępne w JDO jedynie opcjonalnie, jednak ju podczas pisania tej ksią ki oferowała je większość producentów implementacji JDO. Po wywołaniu metody OCMG6TCPUCEVKQPCN ulotna instancja przechodzi do stanu VTCPUKGPVENGCP. Mimo e jej dane są nowe lub zmodyfikowane, to wywołanie to stanowi jedynie informację dla instan- cji 2GTUKUVGPEG/CPCIGT, e powinna śledzić modyfikacje tego obiektu. Gdy ulotna instancja zostaje zmodyfikowana, przechodzi w stan VTCPUKGPVFKTV[ i jej pola trwałe są w celu póź- niejszego odtworzenia kopiowane. Istnieją dwa przypadki, w których metoda OCMG6TCPUCE VKQPCN mo e zostać wywołana: przed i po rozpoczęciu aktywnej transakcji. W pierwszym przypadku zapisane zostaną dane obiektu w momencie rozpoczęcia transakcji. W drugim dane obiektu, które posiadał w momencie wywołania metody OCMG6TCPUCEVKQPCN. Instancje przechodzą ze stanu VTCPUKGPVFKTV[ do stanu VTCPUKGPVENGCP w momencie za- twierdzenia lub odwołania transakcji. Jeśli transakcja została odwołana, przywracane są wcześniej zachowane wartości pól. Instancje znajdujące się w stanie VTCPUKGPVENGCP mo- gą równie przejść do stanu PQPVTCPUCEVKQPCN na skutek wywołania metody OCMG0QP6TCP UCEVKQPCN. Zarówno instancje znajdujące się w stanie VTCPUKGPVENGCP, jak i VTCPUKGPVPGY mogą przejść do stanu RGTUKUVGPVPGY na skutek wywołania metody OCMG2GTUKUVGPV. Diagram przedstawiony na rysunku 4.4 prezentuje mo liwe przejścia pomiędzy ró nymi stanami ulotnych instancji transakcyjnych. Rysunek 4.4. Cykl życia ulotnych instancji transakcyjnych
  • 26. Rozdział 4. n Cykl ycia obiektów 117 4.5.2. Zastosowania ulotnych instancji transakcyjnych Podstawowym celem stosowania ulotnych instancji transakcyjnych jest zapewnienie prze- zroczystego posługiwania się obiektami przez aplikacje. Dzięki temu nie ma ju znaczenia, czy dany obiekt jest ulotny czy trwały — w obu przypadkach jego dane zostaną przywró- cone, gdy transakcja zostanie odwołana. Przykładem zastosowanie mo e być tutaj aplikacja wykorzystująca okno dialogowe umo liwiające konfigurację ró nych parametrów. Okno takie mo e zawierać zarówno trwałe dane o konfiguracji, jak i lokalne, ulotne informacje. Posługując się ulotnymi instancjami transakcyjnymi, implementacja okna dialogowego mo e po prostu odwołać wszelkie modyfikacje, gdy u ytkownik kliknie przycisk Cancel. 4.5.3. Instancje nietransakcyjne Instancje nietransakcyjne umo liwiają obsługę rzadko zmieniających się, niespójnych da- nych oraz realizację transakcji optymistycznych. W niektórych sytuacjach aplikacja mo e chcieć jawnie wczytać dane do obiektów, ale nie interesują jej modyfikacje wykonane przez innych klientów tej samej bazy. Instancje nietransakcyjne mogą być równie wynikiem za- kończonych transakcji. JDO definiuje cztery ró ne właściwości zmieniające cykl ycia obiektów JDO: n 0QPVTCPUCEVKQPCN4GCF n 0QPVTCPUCEVKQPCN9TKVG n 4GVCKP8CNWGU n 1RVKOKUVKE Aplikacja wybiera jedną lub więcej wymienionych właściwości, aby włączyć opcje działania instancji klasy 2GTUKUVGPEG/CPCIGT przed jej pierwszym u yciem. Opcje te stosowane są przede wszystkim ze względu na bezpieczeństwo. Aplikacja mo e bowiem przypadkowo zmodyfikować obiekt poza kontekstem transakcji, ale modyfikacja taka zostanie utracona lub wczytane zostaną nieprawidłowe dane. A oto przykład sytuacji, w której modyfikacja zostaje zagubiona: Klient A pobiera instancję. Klient B pobiera tę samą instancję. Klient A modyfikuje instancję. Klient B równie modyfikuje instancję. Klient B zatwierdza transakcję. Klient A zatwierdza transakcję (zastępując modyfikacje dokonane przez klienta B). Podobna sytuacja mo e wystąpić, gdy dane zostają zmodyfikowane pomiędzy dwiema ko- lejnymi operacjami odczytu: Klient A zlicza wszystkie wypo yczone ksią ki. Klient B wypo ycza ksią kę.
  • 27. 118 Część II n Szczegóły Klient B zatwierdza transakcję. Klient A zlicza wszystkie ksią ki w bibliotece (bez jednej brakującej). 4.5.3.1. Opcja NontransactionalRead Opcja ta umo liwia aplikacji odczyt pól instancji, która nie jest transakcyjna lub znajduje się w stanie JQNNQY poza jakąkolwiek transakcją. Umo liwia równie nawigację i wykony- wanie zapytań poza aktywną transakcją. Stan umo liwiający obsługę danych pól, które nie są spójne ani transakcyjne na zewnątrz aktywnej transakcji nosi nazwę RGTUKUVGPVPQPVTC PUCEVKQPCN. Aplikacja mo e wymusić przejście obiektu znajdującego się w stanie RGTUK UVGPVENGCP do stanu RGTUKUVGPVPQPVTCPUCEVKQPCN poprzez wywołanie metody 2GTUK UVGPEG/CPCIGTOCMG0QPVTCPUCEVKQPCN. Nale y jednak zwrócić uwagę na efekty uboczne i inne problemy związane z odczytem obiektów poza transakcjami. 4.5.3.2. Opcja NontransactionalWrite Aktywacja tej opcji umo liwia modyfikacje instancji, które nie są transakcyjne na zewnątrz jakichkolwiek transakcji. Jednak modyfikacje takie nie zostają nigdy zapisane w bazie da- nych. JDO nie definiuje sposobu przejścia instancji do stanu RGTUKUVGPVPQPVTCPUCEVKQPCN na skutek modyfikacji instancji poza transakcją (gdy opcja 0QPVTCPUCEVKQPCN9TKVG ma war- tość VTWG). 4.5.3.3. Zastosowania instancji nietransakcyjnych Z punktu widzenia architektury programu zastosowanie instancji nietransakcyjnych nie jest zalecane z powodu potencjalnych problemów ze spójnością danych. Zasady projektowania związane z obsługą transakcji omówione zostaną w rozdziale 11. Istnieją jednak wyjątkowe sytuacje, w których zastosowanie obiektów nietransakcyjnych ujawnia swoje zalety: n Gdy aplikacja musi wyświetlać pewne dane statystyczne co pewien czas, ale nie jest istotne, by dane te były aktualne w ściśle określonym momencie. Motywacją takiego rozwiązania mo e być chęć uniknięcia zakłóceń procesu obliczeniowego przez proces prezentacji. W pewnych warunkach konieczne mo e okazać się nawet buforowanie wyświetlanych danych i odczytywanie jedynie ich zmian. n Gdy aplikacja wyposa ona w graficzny interfejs u ytkownika u ywa JDO do przechowywania danych o swojej konfiguracji, która zostaje załadowana w określonym momencie przez inną część systemu. Podczas edycji konfiguracji transakcyjne zachowanie danych jest zbędne. Jedynie zmiana całej konfiguracji powinna być atomowa, spójna, izolowana i trwała. 4.5.3.4. Opcja RetainValues JDO zeruje wszystkie obiekty trwałe, gdy przechodzą one do stanu JQNNQY. Umo liwia to po- zbycie się zbędnych referencji i odzyskanie zajmowanej pamięci. Jeśli opcja 4GVCKP8CNWGU posiada wartość VTWG, to podczas zatwierdzania transakcji obiekty znajdujące się w stanie
  • 28. Rozdział 4. n Cykl ycia obiektów 119 RGTUKUVGPVENGCP, RGTUKUVGPVPGY lub RGTUKUVGPVFKTV[ przechodzą do stanu RGTUKUVGPV PQPVTCPUCEVKQPCN zamiast do stanu JQNNQY. Wartości pól zostają zachowane w celu póź- niejszego wykorzystania. Ich odczyt po zakończeniu transakcji jest dozwolony. W porów- naniu do opcji 0QPVTCPUCEVKQPCN4GCF po zakończeniu transakcji nie jest mo liwa nawigacja po obiektach znajdujących się w stanie JQNNQY i odczyt ich danych. 4.5.3.5. Opcja RestoreValues Jeśli opcja 4GUVQTG8CNWGU nie ma wartości VTWG, to opisany wy ej efekt działania opcji 4G VCKP8CNWGU jest mo liwy tylko w przypadku zatwierdzenia transakcji. W przypadku odwo- łania transakcji instancje przejdą bowiem do stanu JQNNQY i tym samym odczyt ich pól nie będzie mo liwy (przestaną być dostępne dla aplikacji). Natomiast gdy opcja 4GUVQTG8CNWGU ma wartość VTWG, to JDO musi odtworzyć poprzednie wartości pól obiektów znajdujących się w stanie RGTUKUVGPVFKTV[ w momencie odwołania transakcji. Odwołanie transakcji spra- wia, e obiekty znajdujące się w stanie RGTUKUVGPVENGCP lub RGTUKUVGPVFKTV[ przechodzą do stanu RGTUKUVGPVPQPVTCPUCEVKQPCN i tym samym stają się dostępne dla aplikacji. 4.5.4. Transakcje optymistyczne JDO umo liwia tak e zarządzanie transakcjami optymistycznymi. Ich działanie przypomina działanie systemu zarządzania wersjami kodu źródłowego, który, zamiast blokować dostęp do poszczególnych dokumentów, umo liwia równoczesną pracę wielu programistów. Warto przy tym zauwa yć, e zarządzanie transakcjami optymistycznymi zmienia sposób przejść obiektów trwałych pomiędzy stanami. Rozpoczynając transakcję optymistyczną, aplikacja zakłada, e zablokowanie obiektów niepotrzebnie opóźni dostęp innych u ytkowników, dla- tego te konflikty pomiędzy ró nymi operacjami rozwiązywane są dopiero podczas zatwier- dzania transakcji. JDO osiąga to poprzez umo liwienie modyfikacji obiektów trwałych, któ- re zawierają dane transakcyjne. Gdy aplikacja ąda od JDO zatwierdzenia transakcji, to implementacja JDO sprawdza najpierw, czy dane zostały zmodyfikowane w czasie, który minął od ich załadowania (zwykle u ywając wewnętrznego mechanizmu identyfikacji wer- sji danych) i jeśli tak, to odwołuje transakcję, sygnalizując aplikacji wystąpienie problemu z wersją danych. W ten sposób mo liwy jest jednoczesny dostęp do danych dla wielu klien- tów, który gwarantuje, e adne dane nie zostaną utracone. Wadą takiego rozwiązania jest oczywiście to, e aplikacja musi ponownie za ądać zatwierdzenia transakcji, uwzględniając nową, aktualną wersję danych. Z tego powodu mechanizm zarządzania stanami obiektów dopuszcza mo liwość odświe enia danych obiektów znajdujących się w stanie JQNNQY lub PQPVTCPUCEVKQPCN, zanim aplikacja u yje ich wewnątrz transakcji. Jeśli aplikacja zdecyduje się u ywać transakcji optymistycznych, to podczas odczytu pola instancji znajdujących się w stanie JQNNQY przechodzą one do stanu RGTUKUVGPVPQPVTCPUC EVKQPCN zamiast do stanu RGTUKUVGPVENGCP (patrz rysunek 4.5). Modyfikacja wartości pola trwałego powoduje przejście instancji do stanu RGTUKUVGPVFKTV[ — tak samo jak w przy- padku transakcji pesymistycznych. Aplikacja musi jawnie za ądać odświe enia danych za- pisanych w bazie zanim wykonana zostanie ich aktualizacja na podstawie bazy danych. Zalety i wady transakcji optymistycznych zostaną wyjaśnione w rozdziale 11.
  • 29. 120 Część II n Szczegóły Rysunek 4.5. Cykl życia obiektu: dostęp poza transakcjami 4.6. Przykłady Zamieszczone poni ej przykłady kodu stanowią ilustrację sposobów sprawdzania stanu obiektów oraz zastosowania wywołań zwrotnych w celu identyfikacji typowych problemów. Przedstawiona zostanie klasa pomocnicza umo liwiająca uzyskanie informacji o stanie obiektów, licznie obiektów w pamięci, liczbie obiektów w wybranym stanie i tak dalej. Po- niewa większość producentów implementacji JDO nie udostępnia metod umo liwiających uzyskanie informacji o zawartości buforów podręcznych wykorzystywanych przez instan- cję klasy 2GTUKUVGPEG/CPCIGT, to posiadanie własnego, niezale nego rozwiązania w tym zakresie jest bardzo przydatne. Wszystkie przedstawione poni ej metody umieszczone zostały w pliku źródłowym Debug- States.java. Pierwsza z omawianych metod umo liwi uzyskanie identyfikatora obiektu w pamięci. Pro- sty sposób jego uzyskania polega na wywołaniu metody KFGPVKV[*CUJ%QFG. Chocia uzyska- ny w ten sposób identyfikator nie jest unikalny, to jednak wystarcza w przypadku większo- ści maszyn wirtualnych i umo liwia śledzenie obiektów znajdujących się w ich pamięci: RTKXCVG UVCVKE 5VTKPI IGV/GOQT[+F 1DLGEV QDL ] NQPI KF 5[UVGOKFGPVKV[*CUJ%QFG QDL TGVWTP .QPIVQ5VTKPI KF YCTVQ è Y U[UVGOKG UGUPCUVMQY[O _ Kolejna metoda będzie zwracać łańcuch, który zawiera zarówno identyfikator obiektu trwałe- go w pamięci, jak i jego skrót będący wynikiem zastosowania metody mieszającej. Jeśli obiekt nie jest jeszcze trwały, to metoda zwróci jedynie jego identyfikator: RTKXCVG UVCVKE 5VTKPI IGV+F 1DLGEV QDL ] KH QDL KPUVCPEG1H 2GTUKUVGPV%CRCDNG ] 2GTUKUVGPEG/CPCIGT RO ,1*GNRGTIGV2GTUKUVGPEG/CPCIGT QDL KH RO PWNN ] TGVWTP IGV/GOQT[+F QDL 1+ ROIGV1DLGEV+F QDL _ _ TGVWTP IGV/GOQT[+F QDL DTCM 1+ _
  • 30. Rozdział 4. n Cykl ycia obiektów 121 Aby uzyskać więcej informacji o cyklu ycia obiektów, posłu ymy się tablicą liczników śle- dzących liczbę ró nych instancji trwałych. Liczniki te będą zwiększane przez metody nale- ące do interfejsu +PUVCPEG%CNNDCEMU oraz konstruktory nie posiadające argumentów, któ- rych implementacja JDO u ywa do tworzenia nowych obiektów w stanie pustym. Poniewa tablica ta posługuje się słabymi referencjami obiektów, umo liwia równie zliczenie obiek- tów, których zasoby zostały zwolnione przez mechanizm odzyskiwania nieu ytków. Poni ej przedstawiamy przykład klasy, która posługuje się klasą GDWI5VCVGU do zliczania wywołań zwrotnych swoich metod: RWDNKE ENCUU #WVJQT KORNGOGPVU +PUVCPEG%CNNDCEMU ] RTQVGEVGF 5VTKPI PCOG RWDNKE #WVJQT 5VTKPI PCOG ] VJKUPCOG PCOG _ RWDNKE 5VTKPI VQ5VTKPI ] TGVWTP #WVQT PCOG _
  • 31.
  • 32. 2QPK U[ MQPUVTWMVQT Y[YQ [YCP[ LGUV Y EGNW
  • 33. VYQTGPKC PQY[EJ QDKGMVÎY Y UVCPKG RWUV[O
  • 34. -QPUVTWMVQT VGP TGLGUVTWLG QYG QDKGMV[ Y MNCUKG GDWI5VCVGU
  • 35. RTKXCVG #WVJQT ] GDWI5VCVGUEQPUVTWEVQT VJKU _ /GVQF[ Y[YQ [YCPG YTQVPKG RTG ,1 QFFGNGIQYCPG FQ MNCU[ GDWI5VCVGU RWDNKE XQKF LFQ2QUV.QCF ] GDWI5VCVGURQUV.QCF VJKU _ RWDNKE XQKF LFQ2TG5VQTG ] GDWI5VCVGURTG5VQTG VJKU _ RWDNKE XQKF LFQ2TG%NGCT ] GDWI5VCVGURTG%NGCT VJKU _ RWDNKE XQKF LFQ2TGGNGVG ] GDWI5VCVGURTGGNGVG VJKU _ _ Metody klasy GDWI5VCVGU, do których klasa #WVJQT oddelegowała metody wywoływane zwrotnie, aktualizują odpowiedni element tablicy w oparciu o identyfikator obiektu. Jeśli element tablicy dla takiego obiektu jeszcze nie istnieje, to zostaje dodany:
  • 36. 122 Część II n Szczegóły RTKXCVG UVCVKE 1DLGEV6CDNG QDLGEV6CDNG PGY 1DLGEV6CDNG RTKXCVG UVCVKE 1DLGEV6CDNG'PVT[ VCDNG'PVT[ 1DLGEV QDL ] TGVWTP QDLGEV6CDNGTGIKUVGT QDL _
  • 37.
  • 38. 2QPK UC OGVQFC RQYKPPC D[è Y[YQ [YCPC RTG MQPUVTWMVQT
  • 39. MNCU[ FQNPGL FQ VTYC Q EK MVÎT[ PKG RQUKCFC CTIWOGPVÎY
  • 40. RWDNKE UVCVKE XQKF EQPUVTWEVQT 1DLGEV QDL ] VCDNG'PVT[ QDLEQPUVTWEVQT _ QFRQYKGFPKMK OGVQF KPVGTHGLUW +PUVCPEG%CNNDCEMU RWDNKE 1DLGEV6CDNG'PVT[ TGIKUVGT 1DLGEV QDL ] .QPI KF PGY .QPI 5[UVGOKFGPVKV[*CUJ%QFG QDL 1DLGEV6CDNG'PVT[ GPVT[ 1DLGEV6CDNG'PVT[ VCDNGIGV KF KH GPVT[ PWNN ] GPVT[ PGY 1DLGEV6CDNG'PVT[ KF QDL VCDNGRWV KF GPVT[ _ TGVWTP GPVT[ _ Gdy ka dy obiekt reprezentowany jest w tablicy, to łatwo mo emy policzyć wszystkie obie- kty lub obiekty pewnego rodzaju. Poni sza metoda pozwala uzyskać informacje o zu yciu pamięci przez obiekty trwałe: RWDNKE 5VTKPI IGV5VCVKUVKEU ] KPV EQPUVTWEVQTU KPV RQUV.QCF KPV RTG5VQTG KPV RTG%NGCT KPV RTGGNGVG KPV QDLGEVU KPV IEGF HQT +VGT K PGY +VGT KJCU0GZV ] 1DLGEV6CDNG'PVT[ G KPGZV QDLGEVU KH GIGV PWNN IEGF EQPUVTWEVQTU GEQPUVTWEVQT RQUV.QCF GRQUV.QCF RTG5VQTG GRTG5VQTG RTG%NGCT GRTG%NGCT RTGGNGVG GRTGGNGVG _ 5VTKPI 0. 5[UVGOIGV2TQRGTV[ NKPGUGRCTCVQT 5VTKPI TGUWNV NKEDC QDKGMVÎY QDLGEVU 0. YQNPKQP[EJ LCMQ PKGW [VMK IEGF 0.
  • 41. Rozdział 4. n Cykl ycia obiektów 123 Y[YQ C MQPUVTWMVQTÎY EQPUVTWEVQTU 0. Y[YQ C RQUV.QCF RQUV.QCF 0. Y[YQ C RTG5VQTG RTG5VQTG 0. Y[YQ C RTG%NGCT RTG%NGCT 0. Y[YQ C RTGGNGVG RTGGNGVG 0. TGVWTP TGUWNV _ Wynik działania tej metody mo e być interesujący ju w przypadku utworzenia dwóch obie- któw przez następujący fragment kodu: ROEWTTGPV6TCPUCEVKQP DGIKP #WVJQT C PGY #WVJQT *GKMQ $QDKP $QQM D PGY $QQM %QTG ,1 C Wywołanie metody IGV5VCVKUVKEU spowoduje w tym przypadku wyświetlenie następujących informacji: NKEDC QDKGMVÎY YQNPKQP[EJ LCMQ PKGW [VMK Y[YQ C MQPUVTWMVQTÎY Y[YQ C RQUV.QCF Y[YQ C RTG5VQTG Y[YQ C RTG%NGCT Y[YQ C RTGGNGVG Chocia konstruktor bez argumentów nie został jawnie wywołany przez przedstawiony wy- ej fragment kodu, to jednak klasa GDWI5VCVGU wyśledziła utworzenie dwóch obiektów. Obiekty te u ywane są przez implementację JDO jako obiekty fabryki słu ące do tworzenia instancji klas #WVJQT i $QQM. Wywołanie konstruktora bez argumentów zostało dodane pod- czas rozszerzania kodu bajtowego z powodów związanych z bezpieczeństwem, które omó- wione zostaną w rozdziale 10. Podczas utrwalania obu obiektów (w tym obiektu klasy #WVJQT poprzez osiągalność z obiektu klasy $QQM): ROOCMG2GTUKUVGPV D ROEWTTGPV6TCPUCEVKQP EQOOKV wywołane zostaną zwrotnie dla ka dego z nich metody RTG5VQTG i RTG%NGCT: NKEDC QDKGMVÎY YQNPKQP[EJ LCMQ PKGW [VMK Y[YQ C MQPUVTWMVQTÎY Y[YQ C RQUV.QCF Y[YQ C RTG5VQTG Y[YQ C RTG%NGCT Y[YQ C RTGGNGVG Kolejny test spowoduje wyświetlenie liczby obiektów zawartych w ekstensji klasy $QQM: ROEWTTGPV6TCPUCEVKQP DGIKP 'ZVGPV G ROIGV'ZVGPV $QQMENCUU VTWG +VGTCVQT KVGT GKVGTCVQT YJKNG KVGTJCU0GZV ] $QQM C $QQMKVGTPGZV 5VTKPI VKVNG CVKVNG VYQT[ RWUV[ QDKGMV MNCU[ #WVJQT _
  • 42. 124 Część II n Szczegóły Jeśli baza zawierała po 20 instancji ka dej z klas $QQM i #WVJQT, to utworzone zostały 42 obiekty (w tym dwa jako fabryki). Metody RQUV.QCF i RTG%NGCT wywołane zostały jedynie dla instancji klasy $QQM, poniewa pozostałe obiekty znajdowały się w stanie pustym: NKEDC QDKGMVÎY YQNPKQP[EJ LCMQ PKGW [VMK Y[YQ C MQPUVTWMVQTÎY Y[YQ C RQUV.QCF Y[YQ C RTG5VQTG Y[YQ C RTG%NGCT Y[YQ C RTGGNGVG 4.7. Podsumowanie W rozdziale tym omówiliśmy cykl ycia obiektów JDO niezbędny do zrozumienia dynami- cznego aspektu instancji trwałych i transakcyjnych. Przedstawiliśmy równie sposoby uzy- skania informacji o stanie obiektów oraz zastosowania metod wywoływanych zwrotnie. Omówione zostały równie opcjonalne stany obiektów JDO oraz przedstawiona została przy- datna klasa umo liwiająca śledzenie stanu obiektów JDO. Znajomość cyklu ycia obiektów JDO jest konieczna do zrozumienia bardziej zaawansowa- nych problemów związanych z zastosowaniami JDO. Dodatek A zawiera kompletną tabelę przejść pomiędzy stanami obiektów JDO.