nyílt fejlesztőrendszerek domain specifikus nyelvek eclipse modeling framework

47
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework Technológia részletesen

Upload: nikita

Post on 25-Jan-2016

28 views

Category:

Documents


2 download

DESCRIPTION

Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework. Technológia részletesen. EMF - kódgenerálás. A generálás alapja a genmodel Platform specifikus Az ecore modell alapján készül részletes Létrejön Alapértelmezett editor Perzisztencia kezelés - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Nyílt FejlesztőrendszerekDomain specifikus nyelvek

Eclipse Modeling Framework

Technológia részletesen

Page 2: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

2Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF - kódgenerálás

A generálás alapja a genmodel− Platform specifikus− Az ecore modell alapján készül− részletes

Létrejön− Alapértelmezett editor− Perzisztencia kezelés− Modell manipuláció

Page 3: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

3Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF - kódgenerálás

Mi jön létre?− Néhány Eclipse plug-in

Minden esetre megoldás?− NEM!− Nem feltétlenül kényelmes editor− Nem feltétlenül elégséges „üzleti logika”

Page 4: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

4Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF – a generált komponensek

Tree editor

Modell manipuláció

Modell tárolás

Page 5: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

5Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model

A modell kód a PIM 100%-os implementációjaHatékony perzisztencia kezelés XML fájlok

támogatásával100% folytonosság a modell és a kód között

− Előre tudjuk mit kapunk− Általában nem akarjuk módosítani

Page 6: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

6Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model

Lehetséges kiegészítések− Saját fájlformátum támogatás

● Parser● Okos szerkesztő

− Extra információk beszúrása a fájlokba● Kerülendő● Inkább legyen a PIM része

Page 7: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

7Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model – EClass implementáció

A generált implementáció egy előre definiált keretrendszert terjeszt ki

Page 8: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

8Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model – EClass implementáció

EAttribute -> get és set metódusokEReference

− „many” -> get metódus− „one” -> get és set metódus

Page 9: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

9Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model – EClass implementáció

Minden osztály tartalmaz framework-specifikus elemeket− Reflektiv set/get− Kezőértékek tárolása és inicializálása

Page 10: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

10Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Az ecore keretrendszer

Igen összetett− Csak néhány elemét nézzük át

Általában csak egy kis részét kell megérteni a használathoz− Az EObject interfészt− A reflexiót− Az értesítési mechanizmust

A keretrendszer viselkedést az EObjectImpl és gyerekei valósítják meg

Page 11: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

11Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EObject interfész

Minden interfész ezt terjeszti ki

Page 12: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

12Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

eClass()

Gyakran használt metódusMinden üzleti objektum megkaphatja a saját

EClass reprezentációjátHasonló a Java getClass() hívásához

− reflexió

Page 13: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

13Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

eResource()

Egy objektumhoz rendelhetünk egy Resource példány− Resource eResource()

Az erőforrás a perzisztens tárat reprezentálja

Page 14: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

14Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EAttribute implementáció

Az attribútum get, set metódussá alakulÁltalában nem akarjuk módosítani az

implementációt

Page 15: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

15Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EReference implementáció

Hasonló az EAttribute-hozA típus itt egy másik objektum leszNéhány kiegészítés szükséges, ha nem

tartalmazás jellegű reláció van− Az objektum más tárban is lehet

● Referencia-feloldás− Ellenőrizni kell a kétirányú referenciák integritását

● „opposite”

Page 16: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

16Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EOperation implementáció

Az ecore modellben metódusokat is megadhatunk Nincs támogatás a szemantika definiálására Ötlet:

− Az ecore modellben definiáljuk a metódus● Nevét● Paramétereit, típusukat● Visszatérési típust

− Implementáljuk Java-ban A kódgenerátor csak vázat generál, amit kitöltünk

Page 17: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

17Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EOperation implementáció

Első generálásnál az EMF egy Exception-t dobó implementációt készít

Át kell venni a felügyeletet− Beállítjuk a @generated taget NOT-ra− Implementáljuk a metódust

Page 18: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

18Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EOperation implementáció

Ha definiáltunk egy metódust− Hozzáadja az interfészhez− Egy dummy implementációt készít az implementáló

osztályban

Page 19: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

19Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Értesítés implementáció

Minden modell objektum támogatja az értesítés-küldést− Observer minta− Event objektumok az értesítésben− A genmodel-ben beállíthatjuk, hogy mi váltson ki

értesítést

Page 20: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

20Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Értesítés implementáció

A megvalósítás részletei nem fontosak− Tipikusan sose akarjuk módosítani…

Page 21: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

21Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.EDIT

Szerepe− A GUI és a modell szétválasztása− GUI független akciók implementálása

Nagyobb eséllyel módosítjuk− Módosítjuk az elem provider-t− Új parancsokat adunk hozzá

Page 22: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

22Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Generator minta

Minden modell objektumhoz egy adapter jön létre az EMF.Edit-ben− Neve: ItemProvider− Pl. ArtistItemProvider

Az item provider az org.eclipse.emf.edit.provider.ItemProviderAdapter− Alapértelmezett implementáció az alap

funkcionalitáshoz− Általában felüldefiniáljuk bizonyos részét

Page 23: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

23Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Generator struktúra

Page 24: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

24Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Edit és a minták

Page 25: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

25Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Címkék változtatása

Tipikus példa a testre szabásra a címkék változtatása− A genmodel-ben megadhatjuk, hogy egy objektum

mely attribútuma jelenjen meg címkeként− Mi van, ha többől akarjuk összerakni?

Változtatni kell a ItemProvider.getText-en− Megváltoztatjuk a @generated tag-et− Saját implementációt írunk

Page 26: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

26Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Ikon változtatása

Másik tipikus példa az ikonok megváltoztatásaA genmodel egy egyszerű ikont rendel minden

elemhez− Az elemek az emf.edit/icons/obj16 és ctool16

könyvtárban találhatóak● Minden elemhez, illetve minden elem létrehozási

lehetőséghez

A legegyszerűbb a fájlok lecserélése saját ikonra

Page 27: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

27Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Parancsok használata EMF.Edit-ben

Minden módosítás parancsokon (command) keresztül történik− Menü akció− Attribútum változtatás− Drag-n-drop

A keretrendszer generált és általános kód keverékét hsaználja− Common Command Framework (CCF)− EMF.Edit Generated Commands

Page 28: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

28Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Parancsok használata EMF.Edit-ben

A parancsok használata a template method mintára épül

Az ItemProvider implementálja a createCommand() metódust, a kéréseket továbbítja protected metódusaiknak− createAddCommand()− createRemoveCommand()− …

A módosítás során a protected metódusok egyikét módosítjuk általában

Page 29: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

29Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Parancsok használata EMF.Edit-ben : Példa

Egyszerű példa: loggolás hozzáadásaBonyolultabb példák esetén az összetett

parancsok módosítása is szükséges lehet

Page 30: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

30Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Editor

Az EMF.Editor generálja az SWT/JFace kódot a grafikus editorhoz

Két fő opció− Hagyjuk ahogy van− Újraimplementáljuk, mivel köze sincs ahhoz, amit akarunk

Page 31: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

31Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Mi generálódik?

Editor− Fastruktúra− Események – akciók összekötése− Workbench elemek beállítása

MenükVarázsló (új modell…)Plugin osztály

Page 32: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

32Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Konklúzió – EMF.Edit

Az editor a leggyengébb láncszemTöbb próbálkozás van a javításraEgyik: GEF – Graphical Editing

Framework− Eclipse túránk következő állomása

Page 33: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

33Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Kódgenerálás a gyakorlatban - keretrendszerek

• Eclipse

• Eclipse Modeling Framework

• Java Emitting Templates

• J2EE

• Velocity (Jakarta)

• JSP (XML/HTML)

• .NET

• CodeDOM

Page 34: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

34Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

CodeDOM

• .NET alapú nyelvek kezelése

• Forráskód – DOM – forráskód transzformációk

• parser

• code generator

• nyelvek közötti fordítás

• dinamikus forráskód-generálás és fordítás

Page 35: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

35Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Velocity/JSP

• Velocity

• Általános template nyelv

• Java objektumok használata

• Könnyen integrálható modellező eszközökbe

• Szöveges kimenet

• JSP

• Elsősorban XML alapú dokumentumokhoz (Web)

• J2EE-be integrált

Page 36: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

36Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Java Emitting Templates

• Java Emitting Temlates (JET)• JSP alapú template nyelv• Szabad kimeneti formátum (Szöveges)• Java objektumok átadhatóak

Page 37: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

37Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Page 38: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

38Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

JET fejléc

Page 39: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

39Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Bemenő paraméter definició

Page 40: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

40Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Céldokumentum kezdete

Page 41: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

41Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Ciklus a bemenő paraméter alapján

Page 42: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

42Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Ciklusmag

Page 43: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

43Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Kódgenerálás - összefoglaló

• A program-generálásból indult• UML -> Java, C++, ….

• ma már széles körben használt• dokumentum generálás (web)• report generálás (XML, XLS, CSV, nyomtatás)

• Széles körű támogatottság• EMF – JET• Velocity• CodeDOM

• NEM CSAK az MDA környékén használható!

Page 44: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

44Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF extrák – UML

Org.eclipse.uml2 – UML2 plugin− Modell perzisztencia− Modell manipuláció− Default (tree) editor− Több ipari tool is használja

● Egyszerű eyüttműködés!

Page 45: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

45Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Emf extrák - OCL

OCL kényszerek kezeléseTetszőleges EMF modell felettMeta- és példány szintenInteraktív OCL editor…

Page 46: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

46Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF extrák - query

Egyszerű, SQL szerű query apiModellek elemek kinyeréséreKönnyen programozhatóRugalmasBővíthető

Page 47: Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

47Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF extrák - reldb

Modell sorosítás/betöltés relációs adatbázisbaHibernate alapúHQL alapú lekérdezésekProjekt: Teneo (EMFT sub)