Következő
Előző
Tartalomjegyzék
5. Perzisztencia
A perzisztencia lényege az objektum hierarchia egy részének
adatbázisba kimentése, illetve onnan visszatöltése az objektumok számára
transzparens módon, vagyis az objektumok ne "vegyék észre", hogy őket
kimentették, kiléptek a programból, kikapcsolták a gépet, és csak másnapi
visszatöltés után folytatták a futtatásukat.
A flexibilitás megköveteli, hogy többféle modellhez kapcsolható legyen
az aspektusunk. Az kétféle modell, amit megkülönböztetünk:
- Az összes perzisztens objektum egy "projekt" része, központi projekt
objektum nem feltétlenül létezik. Szerencsés, ha a kiírás (comit)
lehetőleg csak a változott objektumokat érinti. Erre az esetre példa
egy kórház betegnyilvántartó információs rendszere.
- Az objektumok egy, vagy több központi objektum köré szerveződnek.
A központi objektumot dokumentumnak nevezzük. A többi perzisztens
objektumnak van egy "birtokosa", és mind egy dokumentumhoz tartozik
közvetlenül vagy közvetve. Perzisztens objektum csak akkor mentődik
ki, amikor az dokumentum mentődik ki, amelyiknek része. Erre a
modellre példa egy többdokumentumos szövegszerkesztő.
A két módszer kombinálható is. A mentés típusa is többféle lehet,
az adatok tárolására szolgálhat adatbázis, vagy flat file, ez a használt
weavertől függ.
A perzisztencia leírásához a következő tagekkel egészítjük ki a
domain modell leírását:
|
| CLASS |
- PERSISTENCE=PersTipus
(A PersTipus lehet "TOPLEVEL", "DOCUMENT", vagy "PART", attól függően,
hogy az objektum a globális objektumhalmaz része, egy dokumentum,
vagy a dokumentum egy eleme.)
- OWNER=AttrNev
(Meghatározza, hogy melyik attribútum tartalmazza az objektum
birtokosát PART típusú osztály esetén.)
- AUTOADD
(Megadhatjuk, hogy az adott osztályba tartozó objektumok mikor válnak
a projekt részéve, vagyis perzisztenssé. Azok az objektumok, amik
nem részei a projektnek, tranziens objektumok, és nem kerülnek
mentésre. Ha az AUTOADD attribútum szerepel a CLASS tagben, akkor
az objektumok mindig (a konstruktor futása előtt) a projekt részévé
válnak, egyébként a METHOD tagoknál lehet a bekerülésüket meghatározni.)
- REMOVE=RmTipus
(Az határozza meg, hogy mikor kerül ki az objektum a projektből. Az
RmTipus lehetséges értékei: "ALWAYS", "AUTO", "MANUAL" (default).
ALWAYS esetén az objektum destruktora kiszedi a projektből, AUTO
esetén akkor kerül ki, ha nincs egyik TOPLEVEL objektumban sem benne.
A MANUAL érték esetén szintén a METHOD tagoknál definiált a
viselkedés.)
- <DBNAME> .. </DBNAME>
(DOCUMENT típusú objektumhoz kell. Egy Java nyelvű kódrészletet
tartalmaz. A kód értéke meghatározza, hogy az objektum hova
mentődjön ki. Flat weaver esetén ez egy filenév, adatbázisos
weavernél a tábla neve.)
|
|
| ATTRIBUTE |
- PERSISTENT (Az objektumnak csak azon változói kerülnek
kimentésre, amiknek ez szerepel az tagjükben).
|
|
| METHOD |
- SAVE=MethodPart
(Ezzel az attribútummal kell jelezni, hogy az objektumot/objektumokat
menteni kell ezen metódusuk előtt, ill. után. A MethodPart értékei
lehetnek "BEFORE" vagy "AFTER".)
- LOAD=MethodPart
(Az objektumot vissza kell tölteni a metódus előtt/után)
- ADD=MethodPart
(Ha az objektumosztálynál nincs AUTOADD, akkor ez a tag deklarálja,
hogy az objektum a projekt része lesz a metódus előtt/után)
- REMOVE=MethodPart
(REMOVE="MANUAL" esetén kell)
|
|
A perzisztencia leírása meglehetősen egyszerű, kivitelezése viszont
munkaigényes. Az összes objektum referenciát le kell cserélni egy
objektum azonosítóra, ami perzisztenssé tehető. A perzisztens
attribútumok megváltozását követni kell, hogy tudjuk, melyik objektum
változott meg. Az objektum azonosítók feloldására szükséges egy
objektum manager implementálása is.
Következő
Előző
Tartalomjegyzék