Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O Autorach...................................................................................................................................................13
Przedmowa .................................................................................................................................................15
Wstp.......................................................................................................................................................... 23
Cz I Wprowadzenie
25
Cz II Szczegy
63
Spis treci
Spis treci
Cz III J2EE
223
Cz IV Wnioski
315
Spis treci
10
Dodatki
403
104
Cz II n Szczegy
s obowizkowe. Stany
,
i
s opcjonalne i zostan omwione w dalszej czci rozdziau.
Niektre ze zmian stanu obiektu s bezporednio wywoywane przez aplikacj na przykad na skutek utrwalenia obiektu. Rwnie rozpoczcie lub zakoczenie transakcji moe
wywoa zmian stanu obiektu, czyli zachodzi ona na skutek wywoania przez aplikacj jednej z metod , lub
klasy
. Zauwamy, e w rodowiskach zarzdzanych zmiany stanu mog by rwnie wywoywane przez zewntrzny kontroler transakcji. Instancja jzyka Java rozpoczyna cykl ycia JDO na skutek wywoania metody
lub zaadowania istniejcego obiektu trwaego z bazy danych.
Rozdzia rozpoczniemy od omwienia dwch typowych sekwencji utrwalania obiektw
i odtwarzania ich na podstawie informacji zapisanych w bazie danych. Zilustrujemy je krtkim przykadem kodu oraz pokaemy sposb uycia klasy
w celu uzyskania informacji o zmianach stanw zachodzcych podczas wykonywania wspomnianych sekwencji.
105
106
Cz II n Szczegy
Rysunek 4.2.
Odtwarzanie
instancji z bazy
danych
107
108
Cz II n Szczegy
Nie istnieje natomiast metoda, ktra pozwalaaby ustali, czy obiekt znajduje si w stanie
pustym. Sposb adowania zawartoci takiego obiektu zaley bowiem od konkretnej implementacji. W dalszej czci rozdziau przedstawimy jednak inny sposb, ktry pozwala uzyska informacj o tym, czy obiekt znajduje si w stanie pustym. Przedstawiona poniej klasa wywietla znaczniki instancji, posugujc si klas
:
!"
#$ $%
#$&"""'#$&""
$(
"
)
*+
"+
, ,(
"
)
*+
"+
,,(
"
)
*+
"+
,,(
"
)
*+
"+
,,(
"
)
*+
"+
, ,(
# ++
"+#$
(
-
109
110
Cz II n Szczegy
4.3.1. PersistenceManager.makePersistent
Metoda
klasy
powoduje przejcie ulotnych obiektw do
stanu
. Podczas wykonania tej metody przegldany jest graf obiektu w celu
znalezienia innych obiektw znajdujcych si jeszcze w stanie
. Rwnie te obiekty
mog niejawnie przej do stanu
.
4.3.2. PersistenceManager.deletePersistent
Wywoanie metody
powoduje przejcie obiektu ze stanu
,
lub do stanu
, natomiast obiekty znajdujce
si dotychczas w stanie
przechodz do stanu
. Operacja ta nie ma wpywu na inne osigalne obiekty.
4.3.3. PersistenceManager.makeTransient
Obiekt moe przej do stanu
pod warunkiem, e jego obecnym stanem jest
lub . Na skutek wywoania metody
obiekt taki zostaje
wyjty spod kontroli instancji klasy
i traci swoj tosamo. Metoda ta
nie wywiera wpywu na inne obiekty osigalne za porednictwem obiektu, ktry by jej parametrem wywoania.
4.3.4. Transaction.commit
Instancje nalece do biecej transakcji s przetwarzane przez JDO podczas jej zatwierdzania, instancje znajdujce si w stanie nie zmieniaj swojego stanu, natomiast instancje znajdujce si w stanie , lub
przechodz do stanu . Wszystkie inne instancje staj si ulotne. Po zatwierdzeniu instancji obiekty znajdujce si w stanie pustym
oraz zwyke, ulotne obiekty jzyka Java pozostaj pod kontrol instancji klasy
.
4.3.5. Transaction.rollback
Na skutek odwoania transakcji obiekty znajdujce si w stanie ,
lub
przechodz do stanu . Pozostae obiekty staj si ulotne. Obiekty, ktre znajdoway
si w stanie lub
powracaj do swojego poprzedniego stanu.
4.3.6. PersistenceManager.refresh
Wywoanie metody
powoduje ponowne zaadowanie danych obiektu z bazy na skutek czego wszelkie modyfikacje obiektu zostaj utracone. Metoda ta przeprowadza obiekty
ze stanu
do stanu
.
111
4.3.7. PersistenceManager.evict
Metoda ta umoliwia zaoszczdzenie pamici przez implementacj buforowania stosowan
w klasie
. Na skutek jej uycia obiekty przechodz ze stanu
do stanu . Wartoci pl obiektw s przy tym usuwane, aby umoliwi mechanizmowi odzysku nieuytkw zwolnienie podobiektw.
4.3.10. PersistenceManager.retrieve
Wywoanie metody
( ma ten sam skutek, co odczyt pola obiektu podczas biecej transakcji.
odczyt lub zapis wartoci pl, ktre nie s trwae lub nie powinny by przetwarzane
przez domylny algorytm JDO,
112
Cz II n Szczegy
Metody wywoywane zwrotnie umieszczone zostay w osobnym interfejsie, ktrego obsuga przypomina sposb obsugi interfejsu etykietowego $( )
. Jeli klasa
zdolna do trwaoci implementuje interfejs & *, to jest to sygnaem dla implementacji JDO, e naley uy wywoa zwrotnych. W przeciwnym razie nie s one wykorzystywane.
Implementujc metod $ +, moemy zaoszczdzi na kodzie sprawdzajcym pocztkowe przypisanie wartoci ulotnych, poniewa JDO definiuje, e metoda ta wywoywana jest dokadnie raz. Klasa moe wic zaimplementowa metod $ +, aby
przypisa wartoci pocztkowe polom ulotnym, zwaszcza gdy zale one od wartoci pl
trwaych. Moliwo taka jest szczeglnie przydatna, gdy ustalenie tych wartoci wymaga
skomplikowanych oblicze, ktre nie powinny by wykonywane wielokrotnie.
Inne zastosowanie moe polega na rejestrowaniu przez obiekty aplikacji zaadowania
obiektw trwaych z bazy danych. Na przykad w celu odroczenia inicjacji kolekcji do
momentu rzeczywistego jej uycia, co pozwala zaoszczdzi pami i zwikszy efektywno dziaania programu:
&1
++! 71
00(884 4
&1
#$8894413
+++
&1
88944)
:
0'* ;0
(884 2
-
113
114
Cz II n Szczegy
Spoeczno zwizana z JDO toczya dugie dyskusje dotyczce tego, czy obsuga obiektw
zalenych powinna odbywa si w kodzie rdowym w jzyku Java czy raczej by zadeklarowana w pliku metadanych JDO. Kolejny przykad zastosowania metody $
pokazuje sposb wyrejestrowania obiektu z innego obiektu, ktry posiada jego referencj.
Implementacja tej operacji moe by cakiem skomplikowana, gdy model obiektowy danej
aplikacji rozronie si. A oto prosty przykad:
>
! 71
88 1 > 4113 1 &1#;"
7 ; (
&1#;"
! 71
"> (8829A21
88$?=446
&1#;"
>
; + '(
+ ; +
; (
-
115
Uywajc JDO mamy zawsze moliwo wyboru modelowania zwizku pomidzy obiektami za pomoc referencji wprzd (instancja , posiada instancje %)) lub referencji wstecz (instancje %) nale do instancji ,). Nawigacja od obiektu nadrzdnego do podrzdnego wymaga zapytania (odnalezienia instancji %) posiadajcej
referencj wskazanej instancji ,). Wybr sposobu modelowania zwizkw pomidzy
obiektami naley do aplikacji. Gdy do wyrejestrowania obiektw uywane s zwrotne wywoania metod, to konieczne jest zastosowanie referencji wstecz (%) ).
116
Cz II n Szczegy
117
Aplikacja wybiera jedn lub wicej wymienionych waciwoci, aby wczy opcje dziaania
instancji klasy
przed jej pierwszym uyciem. Opcje te stosowane s
przede wszystkim ze wzgldu na bezpieczestwo. Aplikacja moe bowiem przypadkowo
zmodyfikowa obiekt poza kontekstem transakcji, ale modyfikacja taka zostanie utracona
lub wczytane zostan nieprawidowe dane. A oto przykad sytuacji, w ktrej modyfikacja
zostaje zagubiona:
Klient A pobiera instancj.
Klient B pobiera t sam instancj.
Klient A modyfikuje instancj.
Klient B rwnie modyfikuje instancj.
Klient B zatwierdza transakcj.
Klient A zatwierdza transakcj (zastpujc modyfikacje dokonane przez klienta B).
Podobna sytuacja moe wystpi, gdy dane zostaj zmodyfikowane pomidzy dwiema kolejnymi operacjami odczytu:
Klient A zlicza wszystkie wypoyczone ksiki.
Klient B wypoycza ksik.
118
Cz II n Szczegy
Klient B zatwierdza transakcj.
Klient A zlicza wszystkie ksiki w bibliotece (bez jednej brakujcej).
Gdy aplikacja musi wywietla pewne dane statystyczne co pewien czas, ale nie
jest istotne, by dane te byy aktualne w cile okrelonym momencie. Motywacj
takiego rozwizania moe by ch uniknicia zakce procesu obliczeniowego
przez proces prezentacji. W pewnych warunkach konieczne moe okaza si nawet
buforowanie wywietlanych danych i odczytywanie jedynie ich zmian.
119
,
lub
przechodz do stanu
zamiast do stanu . Wartoci pl zostaj zachowane w celu p-
niejszego wykorzystania. Ich odczyt po zakoczeniu transakcji jest dozwolony. W porwnaniu do opcji .
/ po zakoczeniu transakcji nie jest moliwa nawigacja
po obiektach znajdujcych si w stanie i odczyt ich danych.
120
Cz II n Szczegy
Rysunek 4.5.
Cykl ycia
obiektu:
dostp poza
transakcjami
4.6. Przykady
Zamieszczone poniej przykady kodu stanowi ilustracj sposobw sprawdzania stanu
obiektw oraz zastosowania wywoa zwrotnych w celu identyfikacji typowych problemw.
Przedstawiona zostanie klasa pomocnicza umoliwiajca uzyskanie informacji o stanie
obiektw, licznie obiektw w pamici, liczbie obiektw w wybranym stanie i tak dalej. Poniewa wikszo producentw implementacji JDO nie udostpnia metod umoliwiajcych
uzyskanie informacji o zawartoci buforw podrcznych wykorzystywanych przez instancj klasy
, to posiadanie wasnego, niezalenego rozwizania w tym
zakresie jest bardzo przydatne.
Wszystkie przedstawione poniej metody umieszczone zostay w pliku rdowym DebugStates.java.
Pierwsza z omawianych metod umoliwi uzyskanie identyfikatora obiektu w pamici. Prosty sposb jego uzyskania polega na wywoaniu metody *. Chocia uzyskany w ten sposb identyfikator nie jest unikalny, to jednak wystarcza w przypadku wikszoci maszyn wirtualnych i umoliwia ledzenie obiektw znajdujcych si w ich pamici:
#$$0!
$'# +* ;7
(
:$+#$
%C(88<= 4 1
-
Kolejna metoda bdzie zwraca acuch, ktry zawiera zarwno identyfikator obiektu trwaego w pamici, jak i jego skrt bdcy wynikiem zastosowania metody mieszajcej. Jeli
obiekt nie jest jeszcze trway, to metoda zwrci jedynie jego identyfikator:
#$$!
"
" 7
0$'
)
*+$ 0$
(
"
@'
,D,5$0!
5
,!
6,5+$!
(
,D,5$0!
5,1!
,(
-
121
Aby uzyska wicej informacji o cyklu ycia obiektw, posuymy si tablic licznikw ledzcych liczb rnych instancji trwaych. Liczniki te bd zwikszane przez metody nalece do interfejsu & * oraz konstruktory nie posiadajce argumentw, ktrych implementacja JDO uywa do tworzenia nowych obiektw w stanie pustym. Poniewa
tablica ta posuguje si sabymi referencjami obiektw, umoliwia rwnie zliczenie obiektw, ktrych zasoby zostay zwolnione przez mechanizm odzyskiwania nieuytkw.
Poniej przedstawiamy przykad klasy, ktra posuguje si klas ') do zliczania
wywoa zwrotnych swoich metod:
>;
! 71
#$(
>;
#$
; +'(
#$#$
,>6,5(
8B
B9 41 12
B4;1A +
BE 1 11
$# +
B8
>;
$# +
; (
8802444)
88$1
$# 6
:
$# + :
; (
#
$# +#
; (
7
$# +7
; (
$# +
; (
-
122
Cz II n Szczegy
'
(
+$
(
8B
B9 4=2441 1
B1 42<%1A $A+
B8
+ 55(
88+++1" ! 71 +++
$
:$':$
# +* ;7
(
'
+$
(
"
''
'
%(
+
%(
(
-
Gdy kady obiekt reprezentowany jest w tablicy, to atwo moemy policzy wszystkie obiekty lub obiekty pewnego rodzaju. Ponisza metoda pozwala uzyska informacje o zuyciu
pamici przez obiekty trwae:
#$$#
'(
:'(
#'(
7'(
'(
'(
$'(
"
!'!
(+;
(
'+
(
55(
"
+$
''$55(
5'+ (
:5'+ :(
#5'+#(
75'+7(
5'+
(
#$:'# +$
,+ ,(
#$ '
,41A6,5 5:5
,4;1916,5$5:5
123
Wynik dziaania tej metody moe by interesujcy ju w przypadku utworzenia dwch obiektw przez nastpujcy fragment kodu:
+
+$
(
>;'>;
,*1&4,(
&1'&1
,7)
,%(
Chocia konstruktor bez argumentw nie zosta jawnie wywoany przez przedstawiony wyej fragment kodu, to jednak klasa ') wyledzia utworzenie dwch obiektw.
Obiekty te uywane s przez implementacj JDO jako obiekty fabryki suce do tworzenia
instancji klas ,'
i %. Wywoanie konstruktora bez argumentw zostao dodane podczas rozszerzania kodu bajtowego z powodw zwizanych z bezpieczestwem, ktre omwione zostan w rozdziale 10.
Podczas utrwalania obu obiektw (w tym obiektu klasy ,'
poprzez osigalno z obiektu
klasy %):
+1
(
+
+
(
Kolejny test spowoduje wywietlenie liczby obiektw zawartych w ekstensji klasy %:
+
+$
(
'+$
&1+ %(
!'+
(
;
+;
&1'
&1+
(
#$'+(884 11 >;@
-
124
Cz II n Szczegy
Jeli baza zawieraa po 20 instancji kadej z klas % i ,'
, to utworzone zostay 42
obiekty (w tym dwa jako fabryki). Metody + i
*
wywoane zostay jedynie
dla instancji klasy %, poniewa pozostae obiekty znajdoway si w stanie pustym:
41A6HG
4;1916
2F1 1A6HG
2F :6G
2F#6
2F76G
2F
6
4.7. Podsumowanie
W rozdziale tym omwilimy cykl ycia obiektw JDO niezbdny do zrozumienia dynamicznego aspektu instancji trwaych i transakcyjnych. Przedstawilimy rwnie sposoby uzyskania informacji o stanie obiektw oraz zastosowania metod wywoywanych zwrotnie.
Omwione zostay rwnie opcjonalne stany obiektw JDO oraz przedstawiona zostaa przydatna klasa umoliwiajca ledzenie stanu obiektw JDO.
Znajomo cyklu ycia obiektw JDO jest konieczna do zrozumienia bardziej zaawansowanych problemw zwizanych z zastosowaniami JDO. Dodatek A zawiera kompletn tabel
przej pomidzy stanami obiektw JDO.