Šitame skyriuje analizuojamas PIM modelio transformavimo į sukurtus PSM
modelius procesas. Aprašoma pasirinkta transformacijų realizavimo architektūra.
Turėdami PIM ir
PSM metamodelius, mes galime nusistatyti sąryšius tarp transformuojamų modelių
metaklasių. Kadangi 2.2 skyriuje mes pasirinkome modelių tipų susiejimą - tai
mes galime aprašyti modelių elementų sąryšius metamodelio lygyje. Tokiu būdu
mes galime aprašyti atskirų PSM modelio elementų transformavimo į PIM modelio
elementus taisykles, tačiau aprašydami manipuliuosime metamodelio terminais .
16 pav. pateikta diagrama parodanti kaip modelių sąryšis aprašomas modelio ir
metamodelio lygmenyje.
Kita modelių
transformavimo problema - tai transformacijos dekompozicija. Kad transformacija
būtų lengva realizuoti ir modifikuoti atskiri transformavimo etapai, taip pat
skirtingo tipo modelio elementų transformavimas turi būti atskirti.
MetamodeNų sąryšis
«metaclass» PersistentEntity
<<mapped
to>>
«metaclass» Table
«metaclass» Package
<<mapped
to>>
«metaclass» Database
/A fr
<<instance of>>
<<instance
of>>
<<instance of>>
«Package» banking
<<ins1ance of>>
«Database» Banking
_ t
<<instance of>>
<<instance of>>
<<Package>>
crm
<<PersistentEntity» Customer
«Table» CUSTOMER
Modelių sąryšis
<<mapped to>>
16 pav. -- Modelių sąryšiai aprašyti modelio ir
metamodelio lygmenyje
Tyrimo metu nustatyti keli transformavimo proceso dekompozicijos
variantai:
1. Modelio apėjimas pagal
kompozicijos ryšius su „atidėjimu". Modelio elementų medis
apeinamas „į plotį" pagal kompozicijos ryšius apibrėžtus metamodelyje. Kiekvienas
modelio elementas apdorojamas atskirai. Jeigu modelio elementas dar negali būti
apdorotas - jis talpinamas į laukimo eilę ir tokiu būdu atidedamas jo apdorojimas. Po
apdorojimo elementai išimami iš apdorojimo eilės. Pastebėta, kad algoritmui su atidėjimu
reikalingos dvi transformavimo stadijos:
apeinamas „į plotį" pagal kompozicijos ryšius apibrėžtus metamodelyje. Kiekvienas
modelio elementas apdorojamas atskirai. Jeigu modelio elementas dar negali būti
apdorotas - jis talpinamas į laukimo eilę ir tokiu būdu atidedamas jo apdorojimas. Po
apdorojimo elementai išimami iš apdorojimo eilės. Pastebėta, kad algoritmui su atidėjimu
reikalingos dvi transformavimo stadijos:
a. Pagrindinė transformavimo stadija - jos metu kiekvienas modelio
elementas
transformuojamas į atitinkamą kito modelio elementą. Stadijos trukmė - vienas
pilnas modelio apėjimas. Jos metu registruojami išeities ir tikslo modelių elementų
transformavimo sąryšiai, taip pat išeities modelio elementų ryšiai talpinami į
antrinio apdorojimo eilę ir bus apdoroti antrinėje stadijoje.
transformuojamas į atitinkamą kito modelio elementą. Stadijos trukmė - vienas
pilnas modelio apėjimas. Jos metu registruojami išeities ir tikslo modelių elementų
transformavimo sąryšiai, taip pat išeities modelio elementų ryšiai talpinami į
antrinio apdorojimo eilę ir bus apdoroti antrinėje stadijoje.
b. Antrinė transformavimo stadija. Antrinės stadijos metu sukuriami ryšiai
tarp tikslo
modelio elementų iš ryšių patalpintų į antrinio apdorojimo eilę.
modelio elementų iš ryšių patalpintų į antrinio apdorojimo eilę.
2.
Modelio apėjimas
pagal kompozijos ryšius su apdorojimu pagal poreikį (on demand). Modelyje kiekvienas elementas apdorojamas atskirai. Jeigu modelio
elementui apdorojimas priklauso nuo kito elemento apdorojimo - tai iškviečiamas
reikiamo elemento apdorojimas. Apdoroti elementai registruojami ir apėjimo metu
jie praleidžiami - nes jau buvo apdoroti. Apdorojimo ciklo trukmė - vienas
modelio apėjimas.
3.
Laisvas modelio
elementų apėjimas panaudojant filtrų architektūrinį šabloną (Pipes and Filters Architecture) [12, 427p.]. Realizuojant transformaciją taikant filtrų architektūrą
transformacijos stadijos buvo dekomponuotos į komponentus vadinamus filtrais.
Kiekvienas toks filtras realizuoja vieno tipo elementų transformaciją.
Kiekvienas filtras atitinka tam tikrą transformavimo stadiją. Apdorojimo metu
registruojami tiesioginiai ir atvirkštiniai transformavimo ryšiai tarp išeities
ir tikslo modelių. Vieno transformavimo ciklo trukmė: T = N ■ S, kur N - modelio elementų
skaičius, S - transformavimo stadijų skaičius.
Transformacijų
realizavimui buvo pasirinkta filtrų architektūra, kuri leido žymiai paprasčiau
atskirti modelio transformavimo stadijas. Kiekvienas filtras realizuoja modelio
elementui taikomą sąlygą, jeigu ta sąlyga tenkinama - tai vykdomas elemento
transformavimas. Reliacinio modelio transformavimo taisyklės pateiktos 5.1 šio
darbo skyriuje. 5.2 skyriuje
5.1 „Esybė - procesas" modelio transformavimas į
reliacinį modelį
Realizuojant „esybė - procesas" PIM modelio
transformavimą į PSM reliacinį modelį buvo apsibrėžtos ir realizuotos 10 lent.
pateiktos transformavimo taisyklės. Transformacijų taisyklės programiškai
realizuojamos filtruose.
10 lent. -- PIM
transformavimo į reliacinį modelį taisyklės (pavyzdys pateiktas 17 pav.)
Transformacijos sąlyga
|
Transformacijos
taisyklė
|
Tipas Domain
|
Sukurti Database tipo elementą.
|
Tipas Package
|
Susieti su Database tipo elementu
|
Tipas
PersistentEntity
|
Sukurti Table tipo elementą ir
susieti su Database tipo elementu.
|
Tipas
PersistentProperty
|
Sukurti Column tipo elementą ir
susieti su atitinkamu Table elementu
|
Tipas Identifier ir savininkas nėra paveldėtas
|
Sukurti Key elementą ir susieti su Column elementais, kurie buvo
transformuoti iš PersistentProperty elementų, kurie yra susieti su Indentifier elementu.
|
Tipas PersistentEntity ir yra paveldėjimo ryšys su
kitu
PersistentEntity
|
Sukurti ForeignKey
elementą Table elemente gautame iš dabar apdorojamo PersistentEntity. Tėvą
atitinkančio Table elemento raktas susiejamas su išoriniu raktu vaiko
klasę atitinkančiame Table elemente.
|
Tipas Reference ir kardinalumas 1:1
|
Sukurti ForeignKey elementą Table elemente gautame iš
dabar apdorojamo PersistentEntity. Kaimyną atitinkančio Table elemento raktas
susiejamas su išoriniu raktu vaiko klasę atitinkančiame Table elemente.
|
Tipas Reference ir kardinalumas 1:N
|
Sukurti ForeignKey elementą Table
elemente atitinkančiame dabar apdorojamo PersistentEntity kaimyną. Dabar
apdorojamo PersistentEntity atitinkančio Table elemento raktas
susiejamas su išoriniu raktu kaimyno klasę atitinkančiame Table elemente.
|
Vykdant PIM modelio
transformavimą į reliacinį PSM modelį - būseną išsaugančios esybės transformuojamos
į atitinkamas lenteles, o jų sąryšiai realizuojami per išorinius raktus.
PIM modelis
Reliacinis PSM modelis
«Domain» Banking
«Database» ~>J BAIN<ING_DB
«Package» crm
«Table» CUSTOMER
«PersistentEntity» Customer
<<Column>> CUSTOMERNAME
«PersistentProperty» CustomerName
<<Sql
DataType>> VARCHAR
«PrimitiveType» String
17 pav. -- PIM modelio susiejimas su reliaciniu PSM
modeliu
Gautame po transformacijos reliaciniame modelyje, PIM modelio būseną neišsaugančios esybės Transformuojant PIM į reliacinį PSM panaudota filtrų architektūra. Filtrų sujungimo grandinė pavaizduota 18 pav.. Žemiau pateikiama lentelė su filtrų aprašymais.
18 pav. -- PIM į reliacinį PSM transformuojančių filtrų struktūra (duomenys pereina nuo viršaus į apačią) Matome, kad transformacijos į reliacinį modelį atveju, filtrų grandinėje nėra išsišakojimų. Kiekviena sekanti stadija vykdoma po to kai baigta ankstesnė.
Eksperimentiniai transformacijos vykdymai pateikiami 6 skyriuje.
5.2 „Esybė - procesas" modelio transformavimas į
Java kalbos modelį
Esybė - procesas PIM transformacijos į Java PSM realizavimui taip pat buvo taikoma filtrų architektūrinis šablonas, tačiau filtrų išsidėstymas ir jų realizacijos skiriasi. Tyrimo tikslais nuspręsta padidinti transformacijos detalumą ir pritaikyti Proxy šabloną [13, 207p.] visiems Entity ir Process tipo elementams. Transformavimo taisyklės pateikiamos 12 lent..
Tipas Process
Transformuojamas į JavaClass elementų rinkinį pagal Proxy šabloną (pvz. 21 pav.).
Kadangi Domain
tipo elementas yra tik
išorinis modelio elementų konteineris, tai jis transformuojamas
į Java kalbos modelio
analogišką modelių elementų konteinerį
JavaApplication.
PIM modelis
|
Java PSM
modelis
|
||
«Domain» Banking
|
_________________________________________
|
«JavaApplication» Banking
|
|
-------------------------------------------------------------- ^
|
|||
|
|
||
|
|
19 pav. -- PIM modelio Domain tipo elemento transformavimas į JavaApplication
tipo elementą PIM esybės transformavimas į Java modelio elementus daug sudėtingesnis. PIM esybės atitikmuo Java modelyje
bus klasių ir sąsajų kompleksas atitinkantis Proxy šabloną. Kiekviena esybė transformuojama į sąsajos klasė, realizacijos klasę atstovaujanti klasė (proxy class) ir gamyklos klasė (factory class). Dalinis transformacijos rezultatas schematiškai atvaizduotas 20 pav..
PIM modelis
Java PSM modelis
«Package» crm
<<JavaPackage>> crm
<<PersistentEntity» Customer
---
<<JavaClass>> ~>J CustomerProxy
«JavalMethod» getCustomerName
<<JavaClass>>
CustomerImp
«PersistentProperty» CustomerName
<<JavaField>> '"H customerName
<<JavaMethod>>
setCustomerName
20 pav. -- PIM esybės transformavimas į Java PSM
klases pritaikant Proxy šabloną
PIM modelio proceso
elementui transformuojant taip pat pritaikomas Proxy šablonas. Taigi procesas išskaidomas Java modelyje į sąsajos,
realizacijos atstovavimo ir gamyklos klasę.
PIM modelis
Java PSM modelis
«Package» crm
«JavaPackage»
|
JavaField elementą.
|
PrimitiveTypeFilter
|
Transformuoja PrimitieType elementus į atitinkamus JavaClass elementus,
atitinkančius standartinius Java kalbos duomenų tipus.
|
ProcessFilter
|
Process tipo elementų filtras.
|
ReferenceFilter
|
Sudaro ryšius tikslo
modelyje pagal išeities modelio elementų ryšius.
|
S impleEntityFilter
|
Transformuoja SimpeEntity elementus į JavaClass elementų rinkinį.
|
S implePropertyFilter
|
Transformuoja SimpeProperty elementus į JavaField elementus.
|
PIM transformavimo į Java modelį filtrų struktūra sudėtingesnė negu
transformacijos į reliacinį modelį. Pradiniai filtrai gali būti vykdomi tik tam
tikra eilės tvarka, nes toliau grandinėje veikiantys filtras naudoja prieš tai
einančių filtrų rezultatus.
DomainRiter
PrimitiveTvpeRiter
PackageRlter
ListRIter
PersistentPropertvRiter
SimpiePropertvRiter
PersistentEntitvRiiter
SimpieEntitvRiiter
ProcessRiter
PackageAssembivRiter
ReferenceRiter
22 pav. -- PIM modelio
filtravimo stadijos transformuojant į Java PSM (duomenys
pereina nuo viršaus į apačią) Kiekvienas filtras
savo veikimo rezultatą užregistruoja registre. Registras - tai sąrašas kuriame
surenkami visų PIM elementų atvaizdavimai į PSM elementus. Naudojant tokį
registrą, kiekvienas filtras gali gauti prieš tai buvusių filtrų rezultatus.
Transformacijų realizacijos eksperimentinio vykdymo rezultatai
pateikiami 6 skyriuje.
6
EKSPERIMENTINIS TRANSFORMACIJŲ VYKDYMAS
Šeštame skyriuje pateikiami eksperimentinių transformacijų pradinių
duomenų ir rezultatų grafiniai atvaizdavimai. Dėl didelių gaunamų PSM modelių
apimčių, modelių medžiai suskleisti, išskleistos tik eksperimento esmę ir naują
rezultatą parodančios dalys.
6.1 Būsenos neišsaugančių esybių transformavimas
Pirmasis eksperimentas demonstruoja, kaip realizuotoji transformacija
detalizuoja būsenos neišsaugančią esybę. Kadangi būsenos neišsaugančios esybės
neturi prasmės reliaciniam modeliui - atitinkamą metaklasę (SimleEntity)
turinčių elementų filtras
nebuvo realizuotas.
23 pav. -- Išeities PIM modelio egzempliorius
Matome, kad iš PIM modelio pavaizduoto 23 pav. Į reliacinį modelį buvo
atvaizduoti tik primityvūs duomenų tipai (žr. 24 pav.).
24 pav. -- Gautas reliacinis PSM modelio egzempliorius
Visiškai kitokį rezultatą matome Java PSM modelyje:
eksperimentinės transformacijos metu transformuojamiems objektams pritaikoma Proxy šablonas. Taikant Proxy šabloną kiekvienai
esybei sukuriamos sąsajos, realizacijos, realizacijos atstovavimo ir gamyklos
klasės (žr. ). Gaunamo Java PSM apimtis žymiai didesnė negu išeities modelio.
platform:/resource/pe2sql_exp/expl/Banking,
javamodel
- gj Java Application
Banking □"O Java Package default ■3 Java Class Integer 0 Java Class String 0 Java Class Float - 0 Java Package com
- £0 Java Package banking E3"9J Java Package common □ ■0 Java Class AddressForm
Java
Method getAddressID Java Method setAddressID
■■+ Java Parameter setAddressID Java Method
getAddressLinel Java Method setAddressLinel
■* Java Parameter setAddressLinel Java Method
getAddressLine2 Java Method setAddressLine2
■ * Java Parameter setAddressLine2 • Java
Method getAddressCity
□ • Java
Method setAddressCity
■* Java Parameter setAddressCity Java Method
getAddressZIP Java Method setAddressZIP
■* Java Parameter setAddressZIP Java Method
getAddressCountry Java Method setAddressCountry
■ ■+ Java Parameter setAddressCountry - 0 Java Package impl
El 0 Java Class AddressFormlrmpI ED-0 Java Class AddressFormProxy + 0 Java Class CommonEntityFactory
25 pav. -- Esybę atitinkančios
sąsajos klasės sandara
Resource Set
platform : /resource/pe2sql_exp/exp 1
/Banking. javamodel
|
É-0
|
- Java Application Banking EH{0 Java Package default 0 Java Class Integer ■0 Java Class String 0 Java Class Float Java Package com
Java Package banking É~Si Java Package common
+ 0 Java Class AddressForm - £0 Java Package impl
□ ■0
Java Class
AddressFormlmpi Java Field addressID
+
|
Java
Method getAddressID Java Method setAddressID + Java Parameter setAddressID Java
Field addressLinel Java Method getAddressLinel Java Method setAddressLinel +
Java Parameter setAddressLinel Java Field addressLine2 Java Method
getAddressLine2 Java Method setAddressLine2 + Java Parameter setAddressLine2
Java Field addressCity Java Method getAddressCity Java Method setAddressCity *
Java Parameter setAddressCity Java Field addressZIP Java Method getAddressZIP
Java Method setAddressZIP + Java Parameter setAddressZIP Java Field
addressCountry Java Method getAddressCountry Java Method setAddressCountry El -
0 Java Class AddressFormProxy + 0 Java Class CommonEntityFactory
26 pav. -- Esybę atitinkančios
realizacijos klasės sandara
Kaip matome iš išskleistos sąsajos grafinio
atvaizdavimo, kiekvienam esybės atributui buvo sukurti priėjimo metodai, kurių
realizacijos kontroliuos esybės atributų reikšmių gavima ir keitimą. Esybės
atributai transformuoti į atitinkamo pavadinimo laukus realizacijos klasę
atitinkančiame elemente (žr. 26 pav.).
Realizaciją atstovaujančios klasės medis išskleistas 27 pav.. Kadangi
atstovaujančios klasės pagrindinis tikslas perdavinėti iškvietimus realizacijos
metodams, tai ji turi vieną privalomą lauką - nurodą į realizaciją. Taip pat
atstovaujanti klasė turi konstruktoriaus funkciją, kurios argumentas -
atstovaujama realizacija.
28 pav. pavaizduota gamyklos klasė sugeneruota transformacijos metu.
Šitos klasės pagrindinė funkcija - atstovaujančių ir realizacijos klasių
kūrimas ir gražinimas kaip nuoroda į sąsaja.
platform : /resource/pe2sql_exp/exp 1 /Banking. javamodel
- Java Application Banking ÉH0 Java Package default O Java Class Integer ■3 Java Class String 3 Java Class Float - 0 Java Package com
S-0 Java
Package banking É-0 Java Package common
+ 3
Java
Class AddressForm - 0 Java
Package impl
El-3 Java Class AddressFormlrnpl - 3 Java Class AddressFormProxy
□ O Java Method AddressFormProxy
+ Java
Parameter addressFormlrnpl Java Method getAddressID Java Method setAddressID +
Java Parameter setAddressID Java Method getAddressLinel Java Method setAddressLinel
+ Java Parameter setAddressLinel Java Method getAddressLine2 Java Method
setAddressLine2 + Java Parameter setAddressLine2 Java Method getAddressCity
Java Method setAddressCity
-
|
* Java Parameter setAddressCity Java Method
getAddressZIP Java Method setAddressZIP + Java Parameter setAddressZIP Java
Method getAddressCountry Java Method setAddressCountry + Java Parameter
setAddressCountry Java Field addressFormlrnpl Java Method getAddressForm Java
Method setAddressForm
* Java Parameter setAddressForm + 3 Java Class CommonEntityFactory
platform : /resource/pe2sql_exp/exp 1 /Banking. javamodel
|
Resource Set □■■■£) 1
- ^ Java Application
Banking 3 -0 Java
Package default ■3 Java Class Integer ■3 Java Class String 3 Java Class Float - 0 Java Package com
Java
Package banking 0 Java
Package common É1--3 Java Class AddressForm - 0 Java Package impl
El-3 Java Class AddressFormlrnpl E|-3 Java Class AddressFormProxy - 3 Java Class CommonEntityFactory
• Java Method createAddressForm
28 pav. -- Gamyklos klasės
atvaizdavimas
27 pav. -- Sąsajos realizaciją
atstovaujanti klasė
Komentarų nėra:
Rašyti komentarą