2013 m. rugsėjo 18 d., trečiadienis

PIM modelio transformavimo į sukurtus PSM modelius procesas



Š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:
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.
b.    Antrinė transformavimo stadija. Antrinės stadijos metu sukuriami ryšiai tarp tikslo
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ą