Hangolása interakció kötegek

A moduláris rendszer, amely támogatja csak statikus függőség törékeny és nem tudja támogatni a bővíthetőség. A törékenység azt jelenti, hogy nem lehet eltávolítani a modul veszélyeztetése nélkül szolgálat (válogatás, összeállítás) a kérelem egészére. Hiánya skálázhatóság azt jelenti, hogy nem lehet hozzáadni a rendszerhez egy új funkcionális modul újrafordítás nélkül meglévő rendszert.

Az egyik legfontosabb feladat az objektumorientált programozás kapcsolódik növekedése a rugalmasság és a kód újrafelhasználásának csökkentésével a kommunikációs szolgáltatók és fogyasztók közötti bizonyos funkciók ezt a funkciót. A Java, ezt úgy érjük segítségével a felületeket. amelyek pusztán absztrakt osztályok, amelyek leírják a funkciót egy adott listát módszerek más osztályokba azokat végrehajtó. Interfészek, absztrakt osztályok lehet használni, mint egy hivatkozás egy adott objektum végén kötelező az építkezés egy moduláris rendszer.

késői kötés

OSGi megoldja a problémát a „késői kötés” dinamikus szolgáltatásokat, amelyek alapján azt az elvet, attól Függőség befecskendezésű (DI) - ez a folyamat a külső függvény szoftver komponens. DI egy sajátos formája „inverzió ellenőrzés» (Inversion ellenőrzés NOB), amikor is alkalmazzák, hogy ellenőrizzék a függőségek. Ebben az esetben a tárgy (köteg) hárítja építéséhez szükséges külső függőségeket rá, kifejezetten erre az általános mechanizmus. Emlékeztetni kell arra, hogy a OSGi előírásoknak működnek úgynevezett köteg (köteg). A szöveg a cikk mellett a csomagban is megtalálható egy ilyen szervezet, mint egy plug-in, amit értéket rendelni a szinonimája.

A következő ábra a rendszert az interakció OSGi kötegek egy tartályban használó szolgáltatásokat.

Hangolása interakció kötegek

Egyes szolgáltatások csomagban kell regisztrálni, mint szolgáltatás (Registr) az OSGi konténer adatbázis. A többi kötegek (ügyfél) lehet kapni „link» (Find). Ezt követően meg kell csatlakozni a szolgáltatás (Bind), és használja a szolgáltatást (módszereket).

Itt meg kell figyelni, hogy jellemzői a program alkalmazásának kölcsönhatás:

  • bundle-szolgáltatás regisztrálni kell, mielőtt a csomagot-client;
  • bundle-ügyfélnek meg kell tudni a jelenléte egy bizonyos köteg-szolgáltatás a rendszerleíró adatbázisban.

Ha a csomag-szolgáltatás független a többi szolgáltatás mellett egyszerűsíti fejlődését. körülményeket kell meghatározni a szerkezet és módszerek alkalmazásával, miáltal telepített OSGi konténer és regisztrálja, mint szolgáltatás. De a csomagban-kliens feladat egy kicsit bonyolultabb, mert már a tervezési használatához szükséges módszerek bundle-szolgáltatás. Lássuk, hogyan fog kinézni egy példát.

Példa a OSGi szolgáltatás kölcsönható kötegek

Tekintsük a példát kölcsönhatás a két kötegek. Egy köteg (szolgáltatás) nyújt a pénznemek listáját és a másik csomag (ügyfél) fog csatlakozni a szolgáltatáshoz, kap egy listát a valuták és megjeleníti azt a konzolra. A fejlődő két maven -Projects jön létre:

  • szerviz-valuta. Szolgáltató a pénznemek listáját;
  • bundle-csere. ügyfél használja a szolgáltatást.

Leírása köteg szerinti OSGi specifikációk, és annak különbség a hagyományos jar-fájl részletesen itt.

A projekt leírása szolgáltatás pénznem

A szerkezet a szolgáltatás magában foglalja a szolgáltatás-deviza ICurrency.java interfész megvalósítása CurrencyImpl.java és aktiváló CurrencyActivator.java.

Listing interfész ICurrency.java

Az interfész magában foglalja a getName () módszer. visszaadja a szolgáltatás nevét.

osztály hirdetések CurrencyImpl.java

CurrencyImpl ICurrency osztály megvalósítja az interfészt getName () módszer és az eljárás tartalmazza továbbá listCurrencies (). visszaadja a pénznemek listáját, mint egy tömböt.

Listing aktivátor CurrencyActivator.java szolgáltatás

Activator szolgáltatás a start (Start módszer) kap paraméterként keretében egy konténer típusú összefüggésben BundleContext, amely regisztrálja a szolgáltatást hívja registerService összefüggésben módszer. registerService eljárás visszatér egy objektum típusú ServiceRegistration. amelyet ha megállás szolgáltatási módszer stop. Mivel a paraméterek számára szolgáltatás regisztrálást a módszer registerService továbbított szolgáltatás neve (az osztály), és egy példánya szolgáltatás tulajdonságok. szolgáltatás tulajdonságait, akkor nem tudja eldönteni, ha kell átadni a módszert null.

A módszer stop mentesített szolgáltatás források (köteg) és lemondta a szolgáltatást regisztrációs eljárás hívás unregister osztály ServiceRegistration.

szerelés leírása pom.xml

Építeni a szolgáltatás-deviza projekt pom.xml használják a következők szerint:

Leírásakor pom.xml összeállítási fájl határozza meg a függőség a keret OSGi (szakasz ) És köteg paraméterek generálására nyilvánvaló META-INF / manifest.mf. Ennek eredményeként a szerelvény a cél projekt alkönyvtár csomag jön létre, mint egy fájl szolgáltatás-deviza-1.0.0.jar kiáltvány olvasható:

Telepítés és regisztrációs szolgáltatás

A teszt a szolgáltatás, amit a mellékelt példa fájl mappa , ahol org.eclipse.osgi_HHH.jar található létrehozásához Equinox tartályba. A parancsok a tartályban itt olvasható. Run konténer Equinox, A tároló csomag-szolgáltatást, és mi indítsa el:

A folyamat során a köteg tesztelési szolgáltatásokat visszük keresztül minden szakaszában az életciklus teljesítményét csapatok telepítés, start, stop. Csapat szolgáltatások a megfelelő paraméter konzol származik tájékoztatás a szolgáltatás:

  • használunk com.osgi.service.CurrencyImpl szolgáltatási osztály;
  • kellékek tulajdonság (service = pénznem), meghatározva a regisztráció során;
  • szolgáltatás azonosító számát, ebben az esetben service.id = 29;
  • aki regisztrált szolgáltatást;
  • Nincs kapcsolat kötegeket.

Ha hívja a szolgáltatások paraméterek nélkül, akkor lehet látni a teljes listát a szolgáltatások, a betöltött konténer Equinox.

Így elmondható, hogy a szolgáltatás sikeresen betöltött és a rendszerben regisztrált, de senki sem csatlakozik hozzá.

A projekt leírása bundle-csere

A szerkezet a plug-in csomag-csere magában IExchange.java interfész végrehajtása ExchangeImpl.java és aktiváló ExchangeActivator.java.

Listing interfész IExchange.java

Az interfész tartalmaz egy getCurrencies () módszer. listáját adja vissza szöveges értékek.

osztály hirdetések ExchangeImpl.java

Ha a szolgáltatás elérését végzik a null ellenőrzést getCurrencies () metódust. Ha a szolgáltatás nem található, az eljárás visszatér egy üres lista. Ez lehet annak a ténynek köszönhető, hogy a szolgáltatás nem érhető el, vagy nem lehet a rendszerben regisztrált. Ebben az esetben a kísérlet arra, hogy a szolgáltatás, ServiceTracker visszavezet bennünket null.

Utilitny OSGi ServiceTracker osztály átadva paraméterként a kivitelező, és ily módon a szolgáltatás a rendszerben regisztrált.

C alkalmazásával ServiceTracker lehet:
- hozzon létre egy kezdeti listát e szolgáltatások
- pályán események Service`Event e szolgáltatások
- lehetővé teszi, hogy a tulajdonos, hogy programozza a listát megváltoztatni, valamint hogy végezzen semmilyen műveletet idején hozzáadásával vagy eltávolításával egy szolgáltatást a listából.

tervező ServiceTracker

Mind a konstruktőrök veszi paraméter BundleContext. Az első kivitelező használnak, hogy visszanyerje a szolgáltatási felület neve a keresési feltételnek. A második konstruktor lehet nyomon követni az összes érintett szolgáltatásokat a szűrőn is. Harmadik kivitelező veszi érv ServiceReference. amely lehetővé teszi, hogy nyomon követik egy adott szolgáltatás.

Miután ServiceTracker létre, akkor elkezdi figyelni a szolgáltatásokat, és lehetővé teszi, hogy használja követő módszerek:

  • getService () / getServices () - visszatér ellenőrizni tracker szolgáltatás / s;
  • getServiceReference () / getServiceReferences () - a módszer lehetővé teszi, hogy hívja vár, amíg, amíg legalább az egyik esetben egy felügyelt szolgáltatás vagy a lejárat előtt a timeout.

Megjegyzés. nem javallott getServiceReference () / getServiceReferences (), az aktivátor csomagot, mivel feltételezzük, hogy a aktivátorok csomók gyorsan betöltődnek, és a keret is felfüggesztheti az aktivátor a letöltési csomag, amely betölti a szükséges szolgáltatás, ami a holtpont-ben, ha a szolgáltatás nem ez lesz betöltve.

Listing aktivátor ExchangeActivator.java

Ahhoz, hogy hozzon létre egy tracker elején a kivitelező ServiceTracker második paraméter át a szolgáltatás nevét. Ezt követően a tracker megnyílik létre egy másolatot a csomag és a konzol megjeleníti a valuták. Az eljárás során együtt megáll kötegek és zárt tracker.

szerelés leírása pom.xml

Leírásakor pom.xml építmények fájl határozza meg a plug-függőségét a artefaktumszolgáltatás valuta idején fejlesztés (biztosított), összeállításához szükséges, és hozzon létre egy köteg. Maven, hogy megtalálja ezt ereklyét az adattárban szükséges végrehajtani az előző tervezetben szolgáltatás-deviza parancs MVN telepíteni. amely betölti az ereklyét a tárolóban.

Ennek eredményeként a szerelvény a cél projekt alkönyvtár jön létre formájában egy köteg köteg-csere-1.0.0.jar fájlt az nyilvánvaló az alábbiak szerint:

tesztelés

Mint fentebb említettük, a minta fájl tartalmazza «osgi.container» mappát, amelyben generálni található org.eclipse.osgi_HHH.jar Equinox tartályba. Automatikusan letölti a plug-inek (kötegelve) úgy kell elhelyezni, az alkönyvtár «osgi.container / köteg», és az alkönyvtárban «osgi.container / konfiguráció» config.ini szabni az indító fájlban. Ezután kötegek automatikusan betölti a tartályba, a szolgáltatás nem kerül nyilvántartásba, és a kliens csatlakozik hozzá. És a konzol látni fogjuk a következő „kép”:

Azt lehet mondani, a probléma megoldódott, és kötegelve „egymásra talált” az kiterjedésű az edény Equinox.

Töltse le a forráskódot

A forráskód ezen példa OSGi köteg interakciós platform formájában Eclipse projektek letölthető itt (1,2 MB). A projekt fájl tartalmazza ezenfelül osgi.container könyvtár létrehozása és tesztelése a tartály Equinox kötegek interakció.