Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés.

Hasonló előadás


Az előadások a következő témára: "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés."— Előadás másolata:

1 Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés

2 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 2 Extension point-ok  Safe platform rule −„As the provider of an extension point, you must protect yourself against misbehavior on the part of extenders”  A felkínált kiegészítési pontnak biztonságosnak kell lenni, még a kiegészítés hibája esetén is!  Invitation rule −„Whenever possible, let others contribute to your contributions”

3 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 3 Extension point-ok  Fair play rule −„All clients play by the same rules, even me.” −Ne legyen saját „hátsó bejárat”, rejtett interfész  Explicit Extension Rule −„Declare explicitly where a platform can be extended” −A deklaráció a plugin.xml-ben  Diversity Rule −„Extension points accept multiple extensions”

4 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 4 Extension point-ok  Hogyan kérdezhetjük le a ponthoz tartozó kiegészítéseket? −Platform.getExtensionRegistry() −IExtensionRegistry.getExtensionPoint(String) −IExtension[] IExtensionPoint.getExtensions() −IExtension.getConfigurationElements() ●Az adott elem attribútumait, gyerekeit tartalmazza ●Validáció kérhető

5 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 5 Extension point-ok  Hogyan példányosítjuk a megadott osztályt? −Csak egy osztálynév van −A mi classloader-ünk nem találhatja meg, mert nincs a függő plugin-ok listáján −Nem is biztos, hogy kívülről látszik az osztály −Megoldás: kérjük meg az extension plug-in saját classloader-ét, hogy végezze el a piszkos munkát! ●IConfigurationElement.createExecutableExtension( String)

6 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 6 Extension-ök értesítése/hívása  Hogyan értesítjük az extension-t? −Adott hívási felület (interface) −Fel kell készülni a hibákra, exception-ökre ●Kivételkezelés! ●Minden extension hívást külön try-catch blokkban  Fault containment region… −Good fences rule: „When passing control outside your code, protectyourself.” −Intézményesített gyanakvás: ISafeRunnable

7 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 7 Extension-ök értesítése/hívása  ISafeRunnable −public void run() – ebbe tegyük a futtatandó kódot −public void handleException(Throwable) ●Kezeli a kivételeket, amik futtatás közben keletkeztek ●Például kidobhatjuk az extension-t, ha bajt okozott

8 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 8 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); }

9 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 9 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Végigmegyünk az extension-ökön

10 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 10 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Kivesszük a következőt

11 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 11 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Csinálunk egy új burkoló-osztályt

12 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 12 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Aki hibázik, azt eldobjuk

13 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Meghívjuk az extension egyik metódusát

14 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 14 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Végrehajtjuk a runnable- t.

15 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 15 Csomagolás, publikálás  Ha készen áll a plugin-ünk a felhasználásra −Be kell csomagolni −Hangolni kell a plugin.xml opcióit  Telepítési cél −Saját gépünk −Más gépek −Automatikus telepítés/frissítés

16 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 16 Csomagolás, publikálás  Könyvtárak – library −A csomagolás első lépése −Osztályainkat jar fájlokba csomagtatjuk ●Lehet bináris vagy forrás csomag ●Megmondhatjuk, mely osztályok látszódhatnak kívülről −A kész libeket és egyéb fájlokat csomagolhatjuk össze az exporthoz ●Lehet bináris és forrás bundle

17 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 17 Csomagolás, publikálás  Finomhangolás −Nem használt függőségek kiirtása ●Automatikus ellenőrző eszközökkel −Plugin neve, készítő, … −Verziószám beállítása  Export −File -> Export -> Deployable plug-ins and fragments ●Az eredmény egy könyvtár, ami tartalmazza a plugint.

18 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 18 Feature  Egy témához kapcsolódó plug-inek gyűjteménye  Könnyebb menedzselhetőség érdekében jött létre  Az automatikus letöltés és telepítés atomi egysége

19 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 19 Feature  Kiegészítő információk −License aggreement −License rule „always supply a license with every contribution” −Upgrade site-ok listája −Feature saját verziója −Szükséges pluginok verziója

20 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 Update site  Automatikusan létrehozott weblap  Feature-ök elhelyezésére −Publikálás −Letöltés −Upgrade  Lista az elérhető feature-ökről és verziókról  Megkönnyíti a szoftver elosztást

21 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 21 Eddig  Egyszerű plugin létrehozása  Kiterjesztések létrehozása  Kiterjesztési pontok létrehozása  Plugin csomagolás  Feature létrehozás  Update site

22 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 22 Plugin fejlesztés teszteléssel

23 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 23 JUnit  Regressziós teszt keretrendszer  Erich Gamma és Kent Beck írta  Unit tesztelésre használatos Java-ban  Nyílt forráskódú  IBM CPL licensz alatt elérhető

24 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 24 JUnit  Web: http://junit.org/index.htm  Az Eclipse tartalmazza a JUnit-ot −GUI-t is kínál a tesztek futtatásához  Eclipse-n kívül is futtathatóak a tesztek

25 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 25 Eclipse - JUnit  A JUnit beállítása a Preferences ablakban lehetséges  Általában jók az alapbeállítások  Szűrőket lehet megadni, hogy mely csomagok és osztályok jelenjenek meg a stack trace-ben

26 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 26 TestCase - teszteset  Több tesztet is futtathat  A TestCase osztályból származik  Definiálja, hogy mely tagváltozók tartalmazzák a teszt állapotát az osztályon belül  Inicializálás a setUp metódussal  Takarítás a tearDown metódussal

27 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 27 TestCase készítése  Csináljunk egy új osztályt a project-ben  Adjuk hozzá a junit.jar-t a függőségekhez

28 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 28 TestCase létrehozása  Kiválasztjuk a csomagot, ahova a tesztet rakni szeretnénk  A new menüből válasszuk a JUnit Test Case-t.  Elnevezzük, stb.  Egy megfelelő osztály létrejön

29 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 29 Példa: TestCase package com.espirity.course.testing; import junit.framework.TestCase; public class FirstTestCase extends TestCase { public FirstTestCase(String arg0) { super(arg0); } public static void main(String[] args) { } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); }

30 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 30 TestCase létrehozása  Minden „test”-tel kezdődő metódus tesztként lesz kezelve az osztályban −Sok teszt metódusunk lehet  Minden teszt metódus többféle „assert” metódust használhat, hogy a tesztelés alatt álló osztályok állapotát vizsgálja −Az assert metódusok öröklöttek

31 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 31 TestCase létrehozása  Assert −assertEqual(x,y) −assertFalse(boolean) −assertTrue(boolean) −assertNull(Object) −assertNotNull(Object) −asserSame(Object,Object) −assertNotSame(Object,Object)

32 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 32 Példa: TestCase package testing; import junit.framework.TestCase; public class FirstTestCase extends TestCase { public FirstTestCase(String arg0) { super(arg0); } public static void main(String[] args) {} protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } public void testCompareSucceed() { assertEquals(0, 0); //this assertion will succeed } public void testCompareFail() { assertEquals(0, 1); //this assertion will fail }}

33 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 33 TestCase futtatása  Válasszuk ki az osztályt  Run -> Run as - > JUnit Test  Lefutnak a tesztek  Az eredmény a JUnit view-ban jelenik meg.

34 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 JUnit view  Információk −Piros/zöld a teszt eredménye hiba/ok −Látható a meghiúsult tesztek neve −Látható a hiba trace −Látható a lefutott tesztek száma −Látható a hibák száma

35 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 35 TestSuite  Több TestCase vagy Suite futtatása  A TestSuite osztályból örököltetjük  Létrehozás varázslóval… −File->New->Other…->Java->JUnit −A varázslóban válasszuk a JUnit Test Suite opciót −Megadhatjuk a résztevő Case-eket

36 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 36 Példa: TestSuite package com.espirity.course.testing; import junit.framework.Test; public class AllInclusiveTestSuite { public static Test suite() { TestSuite suite = new TestSuite("Test for com.espirity.course.testing"); //$JUnit-BEGIN$ suite.addTestSuite(FirstTestCase.class)); suite.addTestSuite(SecondTestCase.class)); //$JUnit-END$ return suite; }

37 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 37 TestSuite futtatás  Hasonló a TestCase-éhez  Minden megadott TestCase lefut  A JUnit ablak tartalmazza az eredményeket  Fontos: TestSuite is adható TestSuite-hoz!

38 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 38 PDE JUnit  JUnit támogatás plug-in fejlesztéshez  A sima JUnit nem használható −Nem Workbench-ben fut −Az Eclipse plug-inok nem leérhetőek  PDE JUnit −Külön futtatási mód

39 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 39 Plugin futtatás Alap Eclipse, ezen dolgozunk

40 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 40 Plugin futtatás Projectek a workbench- ben

41 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 41 Plugin futtatás Ha plugint futtatunk egyúj Eclipse példány indul

42 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 42 Plugin futtatás Betöltődik a plugin-unk

43 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 43 Plugin futtatás Külön workspace látszik

44 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 44 Plugin teszt futtatás Teszt projekt a workspace-ben

45 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 Plugin teszt futtatás A teszt is betöltődik, valamint a teszt futtató

46 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 PDE JUnit működés  Írunk egy tesztet (ugyanúgy, mint alapesetben)  Futtatjuk JUnit Plug-in Test-ként  Egy Eclipse ablak nyílik, majd a tesztek lefutása után bezáródik  A teszteredményt a szokásos ablakban találhatjuk meg

47 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 PDE JUnit működés  Hol legyenek a tesztek? −Lehet a tesztelendő plug-inban is −De! ●A JUnit függőségeket be kell építeni ●Keveredik a kód és a teszt −Tegyük külön plug-inba, ami könnyen leválasztható ●Ez függ az eredeti plug-in-től

48 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 Mit teszteljünk?  Nyilván csak a meghajtható részek (API) tesztelhető  Nincs lehetőség közvetlen GUI tesztre −Rational Robot  Amit tesztelni szeretnénk, látható kell legyen  Erősen függ a konkrét plug-intól

49 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Gyakori kiterjesztések

50 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 View  Általános információ-megjelenítő elem  Extension point: −org.eclipse.ui.views −If: IViewPart  Sokféle lehetőség van információ megjelenítésére −Tartalmazhat SWT és JFace elemeket is

51 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 Példa: View public class View extends ViewPart { public static final String ID = "raktarAppFrontend.view"; private TreeViewer viewer; public void createPartControl(Composite parent) { //View controls initialization } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); }

52 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 52 View  setFocus metódus −Hova kerüljön a fókusz? −Nekünk kell megmondani… −Program to API contract rule: „Check and program to the Eclipse API contract.” −Ezt a metódust nekünk nem szabad hívni! −Helyette: IWorkbenchPage.showView(String) −És: IWorkbenchPage.activate(IViewPart)

53 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 53 View  Általános információ-megjelenítő elem  Extension point: −org.eclipse.ui.views −If: IViewPart  Sokféle lehetőség van információ megjelenítésére −Tartalmazhat SWT és JFace elemeket is

54 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 54 Menü elemek  Pop-up menü: ActionSet-ek (már volt)  Context Menü −Jobbgombra előugró menü egy adott elemen −Invitation rule-> általában mindegyik context menü fogad új elemeket −Elemek: Action-ök, separator-ok −Két speciális elem, amik közé mások menü elemei kerülhetnek (MB_ADDITIONS) −Hozzáadás: org.eclipse.ui.popupMenus ●A View megadásával

55 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 55 Perspektívák  Layot-ot definiál a megjelenítendő view-k és editorok számára  Pl. Java/Debug/Resource perspektívák  Perspektíva kiegészítése −Megadható hol jelenjen meg a view, ha megnyitják −Kezdetben látható legyen a view?  RCP alkalmazásoknál teljesen új perspektívát készítünk! (programozottan)

56 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 56 Help  Minden plugin tartalmazhat help-et  Alapelem: TOC – Table of contents −Fa −Más toc-okat és topic-okat tartalmaz  Topic −Egy html fájl  Extension point: org.eclipse.help.toc  Lehet különálló plugin (nem keveredik a kóddal)

57 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 57 Help készítése  A fő toc: toc.xml-ben (konvenció) …

58 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 58 Help  Topic elemek −Van címkéjük −Van egy fájl hivatkozás a tartalmukra −Ha a címkét kiválasztjuk, betöltődik a megadott fájl −A HTML minden elemet tartalmazhat, amit általában (képek, linkek, …)

59 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 59 Help – plugin.xml …

60 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 60 Integrált Help  Topic hozzáadása létező help-hez  Pl. határtalan tudásunkkal gyarapítni szeretnénk a beépített PDE súgót  Anchorok helyezhetőek el a toc-ban (invitation rule)  Toc link_to attribútum -> útvonal a toc gyökeréhez (az anchorhoz)  Példa:

61 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 61 Context sensitive help  „F1” szindróma  Hozzárendelés: −WorkbenchHelp.setHelp(Control,String)  Help context extension: −Egy xml fájl, ami leírja a context-eket (mely topicok jelennek meg, …) + egy description (általános szöveg) −Ezt az xml-t mint org.eclipse.help.context extension-t kell bejegyezni

62 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 62 Internationalization  A plug-inok nemzetközivé tétele, többnyelvűsítése  Első lépésben eltávolítjuk a string konstansokat a kódból és egyéb fájlokból, hogy könnyen cserélhető legyen a felület szövege

63 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 63 I18N – plugin.xml  A plugin.xml egyes szövegei csak a rendszer számára láthatóak (extension id, …) ezeket nem kell lefordítani  Másokat viszont a felhasználó is lát (action label) – ezeket ki kell szedni, hogy könnyen le lehessen fordítani −plugin.properties – név érték párok −%név – az adott helyre behelyettesíti a talált értéket  feature.xml-nél hasonló módszer (feature.properties)

64 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 64 I18N – forráskód  A Java forráskód egy része felhasználó számára látható szöveget tartalmaz (gombfelirat, üzenetek…) – ezeket ki kellene szedni…  Más stringek viszont fontos rendszer- konstansokat tartalmaznak (id, …) – ezekenek maradni kell  Megoldás: megjelöljük a maradókat: //$NON-NLS-1$

65 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 65 I18N – forráskód  Előkészületek: −Resource bundle létrehozása a plug-in-hoz (akrá több is) −Minden bundle-be rakjunk egy properties fájlt (pl. messages.properties), és egy helper osztályt, mely ezt betölti −A kulcsok legyenek kvalifikáltak, hogy ne legyen ütközés (pl. Osztaly.elem.attributum)

66 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 66 Eclipse támogatás  Source -> Externalize strings −Megkeresi a stringeket, létrehozza a bundle-t és a beolvasó segédosztályt. −Mindent elrendez nekünk

67 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 67 Probléma - publikálás  Mit tegyünk a plugin publikálásakor?  Várjuk meg az összes fordítást? – időveszteség  Adjunk ki új verziót minden fordításkor? – bonyolult  Megoldás: fragment-ek − Külön elemek, melyek a plugin egy részét tartalmazzák – nyelv vagy platform specifikus elemekhez találták ki

68 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 68 Accessibility  A plugin legyen elérhető hátrányos helyzetűek számára is −Minden funkció legyen elérhető billentyűzetről −Az elemekhez rendeljünk cimkéket, hogy a felolvasó programok számára legyen elégéséges információ −A színeket csak mint kiterjesztést használjuk −Tegyük lehetővé erős kontrasztos üzemmód használatát −A hangjelzések és kép legyen kiváltható

69 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 69 A plugin megnyitása más programozók számára  API definiálása −Meg kell határrozni, mely interfészek, osztályok látszanak, melyeket kell másoknak használni −Csak a szükségeseket exportáljuk −Az exportán megadhatunk egy prefixet is az osztálynevekre -> teljesítmény!

70 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 70 Belső és nyilvános csomagok  Explicit API rule: „Separate the API from internals” −Lehetőleg világosan el legyen választva a nyilvános API és a belső osztályok (pl. külön csomag)  Stability rule: „Once you invite others to contribute, don’t change the rules” −Lehetőleg tartsuk stabilan az API-t  Defensive API rule: „Reveal only the API in which you have confidence, but be prepared to reveal more API as clients ask for it.” −Csak a stabil részeket mutassuk meg

71 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 71 Core és UI  A nagy komponensek általában külön plug-inbe helyezik a belső működést és az UI-t  Ez praktikus, és kikényszeríti a kettő közötti interfész definiálását −Könnyen cserélhető, kiegészíthető GUI −Külön-külön fejleszthető elemek

72 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 72 Extension point  A hivatalos kiegészítési mechanizmus alapeleme  Fontos, hogy definiáljunk hozzá megfelelő sémát! −Ez adja meg a használható elemeket


Letölteni ppt "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés."

Hasonló előadás


Google Hirdetések