Eszközintegráció OSGi segítségével. Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Hasonló dokumentumok
Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék. OSGi

Hová tűnt a sok kereszthivatkozás?

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

JNDI - alapok. Java Naming and Directory Interface

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Közösség, projektek, IDE

Enterprise JavaBeans 1.4 platform (EJB 2.0)

JAVA webes alkalmazások

A Java EE 5 plattform

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

eseményvezérelt megoldások Vizuális programozás 5. előadás

OOP és UML Áttekintés

Testreszabott alkalmazások fejlesztése Notes és Quickr környezetben

Metamodellezés. Simon Balázs BME IIT, 2011.

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Java I. A Java programozási nyelv

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

NEPTUN ID BMENET ID. Címtár BME VPN. vcenter VPN SVN. Trac Wiki. Wifi

Utolsó módosítás:

Segédanyag: Java alkalmazások gyakorlat

Mobil Informatikai Rendszerek

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

RIA Rich Internet Application

10. Gyakorlat: Alkalmazások publikálása Remote Desktop Szervízen keresztül

Utolsó módosítás:

Miről lesz szó? Setup Project készítése. Tulajdonságok. 1. Készítsünk egy setup project alkalmazást egy már elkészített, lefordított programhoz.

Segédanyag: Java alkalmazások gyakorlat

11. Gyakorlat: Certificate Authority (CA), FTP site-ok

Importálás. más típusú (pl:.imp,.xml,.xkr,.xcz) állomány beimportálása a nyomtatványkitöltő programba

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Interfészek. PPT 2007/2008 tavasz.

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Oralce kliens installálása Windows Server 2003-ra

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Java programozási nyelv 6. rész Java a gyakorlatban

4. rész: Java Enterprise Edition bevezetı. Bakay Árpád dr. NETvisor kft (30)

RapidMiner telepítés i. RapidMiner telepítés

C++ fejlesztés az ECLIPSE környezetben

Feltörekvő technológiák: seam, drools, richfaces és társai a JBossban

CORBA Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Hálózati operációs rendszerek II. Novell Netware 5.1 Hálózati nyomtatás

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Gyakorlat és házi feladat tájékoztató

Nyílt forráskódú irodai programkomponensek vállalati környezetbe való integrációjának vizsgálata és implementációja

Operációs rendszerek. A Windows NT felépítése

Bevezető. Servlet alapgondolatok

STANDARD DEVELOPMENT U.L. FACTORY SYSTEMS GROUP IT DEPARTMENT

Utolsó módosítás:

MVC. Model View Controller

Abstract osztályok és interface-ek. 7-dik gyakorlat

Komponens alapú fejlesztés

Párhuzamos és Grid rendszerek

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

Programozási nyelvek Java

DRUPAL 7. újdonságai. Hojtsy Gábor Drupal Hétvége, Budapest november 14. Angela Byron fóliái alapján

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

OOP: Java 8.Gy: Abstract osztályok, interfészek

Web-fejlesztés NGM_IN002_1

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Viczián István IP Systems JUM XIX szeptember 18.

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Hálózati operációs rendszerek II.

Broadcast Service Widget

Adatbányászat és Perszonalizáció architektúra

Android Pie újdonságai

Flex: csak rugalmasan!

Alkalmazásfejlesztés Eclipse RCP használatával

Szathmáry László Debreceni Egyetem Informatikai Kar

Az Oracle Fusion szakértői szemmel

Modell alapú tesztelés mobil környezetben

Utolsó módosítás:

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Book Template Title. Author Last Name, Author First Name

Microsoft SQL Server telepítése

Windows rendszeradminisztráció és Microsoft szerveralkalmazások támogatása. 9. óra. Kocsis Gergely, Kelenföldi Szilárd

Mobil Informatikai Rendszerek

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o


Már megismert fogalmak áttekintése

IBM Business Process Manager változat 8 alváltozat 5. Az IBM Business Process Manager áttekintése

Moodle-integrálás intézményi környezetben

VIRTUAL APPLIANCE KÉZIKÖNYV VIRTUAL APPLIANCE KÉZIKÖNYV

C#, OOP. Osztályok tervezése C#-ban

Java I. A Java programozási nyelv

A SZOFTVERTECHNOLÓGIA ALAPJAI

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

Interfészek. Programozás II. előadás. Szénási Sándor.

5. rész: A Java EE és az Enterprise Bean réteg. Bakay Árpád dr. NETvisor kft (30)

Szerver oldali Java programozás /II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése.

Átírás:

Eszközintegráció OSGi segítségével Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Eszközintegráció! Feladat: Összete9 alkalmazás fejlesztés o (Általában) Nem zöldmezős beruházás o Részfeladatokra már vannak eszközeink o Ezeket közösen kezelnénk! Hasonló problémakör o Fejlesztőeszközök integrációja o Eclipse környezet

OSGi! A dynamic module system for Java! OSGI szövetség (www.osgi.org) o Széleskörű tagság: Adobe IBM Oracle Red Hat Siemens AG VMware

! Közös problémák o Integráció o Verziófrissítés o Életciklus OSGi! OSGI szabvány (specifikáció) o Komponens alapú o Közös integrációs primí\vekkel! Jelenleg: R5.0 (2012. június)

OSGi compendium! OSGi core spefikáció kiegészítése! Szolgáltatások jegyzéke! Fontosabb szolgáltatás csoportok o Declarabve Services: Deklara\v modell szolgáltatások kezelésére o H9p Service: H9p alapú szolgáltatások o Remote Services: Szolgáltatások használat különböző framework- ök közö9 (Version 1.0) o Log Service: általános célú logolásra alkalmas szolgáltatások o stb

OSGi implementációk! Open Source o Eclipse Equinox (h9p://www.eclipse.org/equinox/) o Apache Felix (h9p://felix.apache.org/) o Knopflerfish (h9p://www.knopflerfish.org/) o ProSyst mbedded Server Equinox Edibon (h9p:// www.prosyst.com/products/osgi_se_equi_ed.html)! Fizetős: o ProSyst (h9p://www.prosyst.com/) o Knopflerfish Pro (h9p://www.makewave.com/)

" Eclipse IDE és Hol használják

OSGi OSGi Services Applicabons Lifecycle Bundles Java runbme environment Operabng system

! Modulok (bundles) OSGi alapok: modulok o Public és private API láthatósága o Függőség kezelés o Verziózás

! Életciklus (Life cycle)! Dinamikus Bundle: o Betöltés (install) o Start/stop o Update OSGi alapok: életciklus

OSGi alapok: Bundle életciklus modell install INSTALLED STARTING resolve update uninstall RESOLVED start ACTIVE uninstall UNINSTALLED stop STOPPING

OSGi alapok: szolgáltatások! Szolgáltatás orientált (Services): o Modulok szolgáltatásokat ajánlhatnak ki o Kereshetőek (service registry) o Futás idő közben megjelenhetnek(/eltűnhetnek)!

OSGi Bundles

Modul réteg! A modulok indíthatók, leállíthatók! A futó bundle- k szolgáltatásai kiajánlásra kerülnek! Fontos manifeszt adatok o Ac(vator: az életciklus menedzselését végző osztály o Classpath: bundle- specifikus classpath o SymbolicName: egyedi azonosító o Export- Package: a kiajánlo9 java csomagok listája o Import- Package: importálandó csomagok listája o Require- Bundle: importálandó modulok listája

Class loading! Minden bundle egy vm- en belül fut! Minden bundle- nak saját class loadere van o 3 helyről tölthet be osztályokat/erőforrásokat Boot class path: java.* csomagok és implementációik Framework class path: a framework- nek saját class loadere van, amitől elkérhetőek az interfészek és implementáló osztályok Bundle space: a bundle jar fájljai, valamint a hozzá kötődő egyéb jar- ok

Class loading Class space! Egy bundle class space- e o A szülő class loader- e (java.*) o Importált csomagok o Függőségek o A bundle privát classpath- a o Csatolt fragmensek

Bundle feloldás! Feloldás: az importerek és exporterek összekötése o Kényszereknek megfelelően! Vezeték (wire): összekö9etés importer és exporter közö9 o Valid ha teljesít minden kényszert

! Azonos nevű bundle Bundle elnevezés: Név o Több különböző verzió telepíthető! Paraméterek o Singleton: csak egyetlen verziója lehet betöltve o Fragment- a9ached: definiálja, hogyan lehet fragmenseket hozzákapcsolni! Példa: Always: bármikor kapcsolódhat Never: nem lehetséges Resolve- bme: csak a resolve fázisban Bundle- SymbolicName: com.acme.foo;singleton:=true

Bundle elnevezés: Verziószám! Meghatározo9 formátum: o major.minor.micro.qualifier! Összehasonlítás hierarchikus o Numerikusan (major, minor, micro) o String alapú (qualifier) o Két verzió azonos #$minden szegmensük egyezik o Példa: Bundle- Version: 22.3.58.build- 345678

Metaadat feloldás! Imported- packages o Importált csomagok listája o Resolubon a csomagot fel kell oldani kötelező import esetében, ha ez sikertelen a bundle sem töltődhet be o Version verzió intervallum a csomagot exportáló csomagra zárt [], nyito9 (), pl. [1.0.0,2.0.0) o Bundle- version: az exportáló bundle verziója o Bundle- symbolic- name: az exportáló bundle neve o Példa:! Exported- packages o Exportált csomagok listája o Hasonlóan az Imported- packages- hez o Példa: Import-Package: com.acme.foo;com.acme.bar; version="[1.23,1.24]"; resolution:=mandatory Export-Package: com.acme.foo;com.acme.bar;version=1.23

Bundle diagram Szöveges leírás Grafikus ábrázolás Jelölés

! Capability Újdonság: Capabilibes o Függőségi referenciák általánosítása o Tetszőleges, szöveges azonosítójú tulajdonság o Verziózható! Require- Capability o Függőség jelzése képességre! Provide- Capability o Képesség biztosításának jelzése

OSGi Services

Szolgáltatási réteg! Definiálja az együ9működési modellt o Publish, find, and bind o A szolgáltatás egy normál java objektum o Regisztrálódik egy vagy több java interfész ala9! A bundle- k o Regisztrálhatnak o Kereshetnek o Használhatnak szolgáltatásokat o Illetve, ezekkel kapcsolatban eseményeket kezelhetnek

Szolgáltatási réteg - alaptulajdonságok! Kollabora\v: bundle- k közöx együ9működés megvalósítása! Dinamikus: futásidejű változások o Új szolgáltatások megjelenése o Régi szolgáltatások megszűnése! Biztonságos: hozzáférés korlátozható! Reflek\v: teljes hozzáférés a réteg belső állapotához! Verziókezelés: a szolgáltatások frissülhetnek! Perzisztens id: framework indítások közö9 is lehet a szolgáltatásokat követni

Szolgáltatási réteg elemei

Szolgáltatási réteg elemei Service Szolgáltatás implementációja ServiceRegistry Beregisztrált szolgáltatások tárolója ServiceReference Szolgáltatás tulajdonságai eléréséhez ServiceRegistrabon Szolgáltatás tulajdonságainak leírása ServiceListener Pl. szolgáltatás megjelenés/eltűnés események Filter Egyszerű a9ribútum alapú szűrő

Szolgáltatási réteg elemei Service Szolgáltatás implementációja ServiceRegistry Beregisztrált szolgáltatások tárolója ServiceReference Szolgáltatás tulajdonságai eléréséhez ServiceRegistrabon Szolgáltatás tulajdonságainak leírása ServiceListener Pl. szolgáltatás megjelenés/eltűnés események Filter Egyszerű a9ribútum alapú szűrő

Szolgáltatási réteg elemei Service Szolgáltatás implementációja ServiceRegistry Beregisztrált szolgáltatások tárolója ServiceReference Szolgáltatás tulajdonságai eléréséhez ServiceRegistrabon Szolgáltatás tulajdonságainak leírása ServiceListener Pl. szolgáltatás megjelenés/eltűnés események Filter Egyszerű a9ribútum alapú szűrő

Szolgáltatási réteg elemei Service Szolgáltatás implementációja ServiceRegistry Beregisztrált szolgáltatások tárolója ServiceReference Szolgáltatás tulajdonságai eléréséhez ServiceRegistrabon Szolgáltatás tulajdonságainak leírása ServiceListener Pl. szolgáltatás megjelenés/eltűnés események Filter Egyszerű a9ribútum alapú szűrő

Szolgáltatási réteg elemei Service Szolgáltatás implementációja ServiceRegistry Beregisztrált szolgáltatások tárolója ServiceReference Szolgáltatás tulajdonságai eléréséhez ServiceRegistrabon Szolgáltatás tulajdonságainak leírása ServiceListener Pl. szolgáltatás megjelenés/eltűnés események Filter Egyszerű a9ribútum alapú szűrő

Szolgáltatási réteg elemei Service Szolgáltatás implementációja ServiceRegistry Beregisztrált szolgáltatások tárolója ServiceReference Szolgáltatás tulajdonságai eléréséhez ServiceRegistrabon Szolgáltatás tulajdonságainak leírása ServiceListener Pl. szolgáltatás megjelenés/eltűnés események Filter Egyszerű a9ribútum alapú szűrő

Szolgáltatások közvetlen elérése Service Consumer Service Registry Service Provider Service <<create>> 1 : Create Service Object() 2 : Register Service() 3 : Find Service() 4 : Service Refs [0..n] 5 : Get Service() 6 : Service Objects 7 : Use Services() 8 : Unget Service()

Szolgáltatások közvetlen elérése Szolgáltatás regisztráció névvel Service Consumer Service Registry Service Provider Service <<create>> 1 : Create Service Object() 2 : Register Service() 3 : Find Service() 4 : Service Refs [0..n] 5 : Get Service() 6 : Service Objects 7 : Use Services() 8 : Unget Service()

Szolgáltatások közvetlen elérése Service Consumer Service Registry Service Provider Service <<create>> 1 : Create Service Object() 3 : Find Service() 2 : Register Service() Szolgáltatás keresése név alapján 4 : Service Refs [0..n] 5 : Get Service() 6 : Service Objects 7 : Use Services() 8 : Unget Service()

Szolgáltatások közvetlen elérése Service Consumer Service Registry Service Provider Service <<create>> 1 : Create Service Object() 2 : Register Service() 3 : Find Service() 4 : Service Refs [0..n] 5 : Get Service() 6 : Service Objects Szolgáltatás (interfész) lekérése 7 : Use Services() 8 : Unget Service()

Problémák! Nincs értesítés szolgáltatás megszűnéséről o Szolgáltatás objektum tárolásához szükséges! o ServiceListener szóbajöhet, de könnyű hibázni! Alacsony szintű API o Körülményes o Sok, ismétlődő Java kód! Megoldás o ServiceTracker o Deklara\v szolgáltatások

Service Tracker! Szolgáltatáshoz lehet regisztrálni! Jelez, ha o Megjelenik egy, az ado9 \pusú szolgáltatás o Eltűnik egy, az ado9 \pusú szolgáltatás o Módosul egy, az ado9 \pusú szolgáltatás

Declarabve Services (OSGi compendium)! Fejlesztő a szolgáltatások írására koncentrálhat! Válasszuk szét a felelőségeket: o Implementáció: továbbra is bundle felelőssége o Regisztráció: Service Component Runbme (SCR)! Publish, find, and bind deklara\v módon o XML leírók (komponens leíró)! Szolgáltások függőségeinek automabkus menedzselése o Dinamikus On demand betöltés Komponens elérhetetlen, ha a függő szolgáltatás megszűnik

! XML alapú DS komponens leíró! Deklara\v módja a szervizek regisztrálásának, kötésének! OSGI- INF könyvtárban! Több komponens egy bundle- ban! MANIFEST.MF- ban összeset fel kell venni o Service- Component 4

Példa komponensleíróra <scr:component xmlns:scr="http://www.osgi.org/ xmlns/scr/v1.1.0" name="sample.component"> <implementation class="org.sample.helloserviceimpl"/> <service> <provide interface="org.sample.helloservice"/> </service> <reference bind="setservice" unbind="unsetservice" cardinality="0..1" interface="org.sample.serviceforhello" name= SERVICEFORHELLO" policy="dynamic"/> </scr:component>

Példa komponensleíróra <scr:component xmlns:scr="http://www.osgi.org/ xmlns/scr/v1.1.0" name="sample.component"> Kiajánlo9 szolgáltatás <implementation definíciója class="org.sample.helloserviceimpl"/> <service> <provide interface="org.sample.helloservice"/> </service> <reference bind="setservice" unbind="unsetservice" cardinality="0..1" interface="org.sample.serviceforhello" name= SERVICEFORHELLO" policy="dynamic"/> </scr:component>

Példa komponensleíróra <scr:component xmlns:scr="http://www.osgi.org/ xmlns/scr/v1.1.0" name="sample.component"> <implementation class="org.sample.helloserviceimpl"/> <service> <provide interface="org.sample.helloservice"/> </service> <reference bind="setservice" unbind="unsetservice" cardinality="0..1" interface="org.sample.serviceforhello" name= SERVICEFORHELLO" policy="dynamic"/> </scr:component> Függő szolgáltatás megadása

Példa komponensleíróra <scr:component xmlns:scr="http://www.osgi.org/ xmlns/scr/v1.1.0" name="sample.component"> <implementation class="org.sample.helloserviceimpl"/> <service> <provide interface="org.sample.helloservice"/> </service> <reference bind="setservice" unbind="unsetservice" cardinality="0..1" interface="org.sample.serviceforhello" name= SERVICEFORHELLO" policy="dynamic"/> </scr:component>

DS komponens leíró! Eclipse támogatás: Declarabve Service Tooling o Component Definibon Editor

DS komponensek összekapcsolása! Szükséges adatok függő szolgáltatás megadására o Számosság 0..1 % opcionális, egy értékű 1..1 % kötelező, egy értékű 1..n % kötelező, több értékű 0..n % opcionális, több értékű o Policy Dynamic: a szolgáltatás menet közben kicserélhető Stabc: garantáltan egy szolgáltatás objektum lesz végig (pl. állapo9al rendelkező szolgáltatás esetében) o Szolgáltatás interfész Szolgáltatás név ebből származik! 4

DS Életciklus menedzselés Service Consumer Service Registry Service Component Runtime Service Provider Service 1 : Declare Service Component() 3 : Find Service() 2 : Register Service Factory() 4 : Service Refs 5 : Get Service() 6 : Activate() 7 : Load Bundle() 8 : Create Service Object() 11 : Service Object 13 : Unget Services() 10 : Service Object 12 : Use Services() 9 : Service Object

DS Életciklus menedzselés Service Consumer Service Registry Service Component Runtime Service Provider Service 1 : Declare Service Component() 2 : Register Service Factory() 3 : Find Service() 4 : Service Refs 5 : Get Service() 6 : Activate() 7 : Load Bundle() Komponens leírok használatával 8 : Create Service Object() 11 : Service Object 10 : Service Object 12 : Use Services() 9 : Service Object 13 : Unget Services() Szolgáltatás on- the- fly jön létre, amikor szükség van rá

OSGi konzol 4

! OSGi prompt OSGi konzol o Hasonló egy DOS v. Bash prompt- hoz o Általános parancskészlet o Bővítési lehetőségek! Eclipse támogatás o Console view Futó példányhoz is! Highlighbng

OSGi konzol - parancsok! Hasznos parancsok o ss: kilistázza az telepíte9 bundle- okat. o start <id>: elindítja a megado9 azonosítójú bundle- t o stop <id>: leállítja a megado9 azonosítójú bundle- t o install file:<path>: telepíb a megado9 bundle - t o uninstall <id>: eltávolítja a megado9 bundle- t o update <id>: frissíb a megado9 bundle- t o services <filter>: kilistázza a futó szolgáltatásokat pl.: osgi> services (objectclass=*helloservice) o shutdown: a futó osgi framework leállítása o close: shutdown és exit o exit: ~ System.exit 5

Új parancs írása (GoGo Console)! Parancsok megírása Java fájlban o Nincsen API, ami fölö9 fejleszteni kell! o System.out.println() is jól működik!! Osztály kiajánlása szolgáltatásként o Szolgáltatás paraméterében felsorolni a parancsokat (metódusnevek)

Új parancs (Java osztály)

Új parancs (Java osztály) Parancs neve: createuser

Új parancs (Java osztály) Parancs neve: createuser Két string paraméter

Új parancs (Java osztály) Végrehajto9 parancs Java/OSGi kód

Új parancs (Java osztály) Visszajelzés standard outputon

Új parancs (Java osztály) Súgó szöveg megadható @Descriptor annotációként

Új parancs (Java osztály) public class UserConsole { @Descriptor(value = "Creates and saves a user.") public void createuser( @Descriptor(value = "name of the new user ) String username, @Descriptor(value = "password of the new user ) String password) { User user = usermanager.createuser(username, password); if (user!= null) { }... } Súgó szöveg megadható @Descriptor annotációként System.out.println("A user '" + username + " is created."); } else { System.err.println("ERROR: Command failed"); }

Új parancs (Regisztráció) <?xml version="1.0" encoding="utf- 8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/ v1.1.0" name="bookstore User Console"> <implementation class="hu.bme.mit.bookstore.console.userconsole"/> <property name="osgi.command.scope" type="string" value="bs"/> <property name="osgi.command.function" type="string"> listusers createuser deleteuser </property> <service> <provide interface="hu.bme.mit.bookstore.console.userconsole"/> </service> </scr:component>

Új parancs (Regisztráció) <?xml version="1.0" encoding="utf- 8"?> Implementációs osztály <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/ v1.1.0" name="bookstore User Console"> <implementation class="hu.bme.mit.bookstore.console.userconsole"/> <property name="osgi.command.scope" type="string" value="bs"/> <property name="osgi.command.function" type="string"> listusers createuser deleteuser </property> <service> <provide interface="hu.bme.mit.bookstore.console.userconsole"/> </service> </scr:component>

Új parancs (Regisztráció) <?xml version="1.0" encoding="utf- 8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/ v1.1.0" name="bookstore User Console"> <implementation class="hu.bme.mit.bookstore.console.userconsole"/> Parancs prefix: bs <property name="osgi.command.scope" type="string" value="bs"/> <property name="osgi.command.function" type="string"> listusers createuser deleteuser </property> <service> <provide interface="hu.bme.mit.bookstore.console.userconsole"/> </service> </scr:component>

Új parancs (Regisztráció) <?xml version="1.0" encoding="utf- 8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/ v1.1.0" name="bookstore User Console"> <implementation class="hu.bme.mit.bookstore.console.userconsole"/> <property name="osgi.command.scope" type="string" value="bs"/> <property name="osgi.command.function" type="string"> listusers createuser Parancsok nevei deleteuser </property> <service> <provide interface="hu.bme.mit.bookstore.console.userconsole"/> </service> </scr:component>

Új parancs (Regisztráció) <?xml version="1.0" encoding="utf- 8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/ v1.1.0" name="bookstore User Console"> <implementation class="hu.bme.mit.bookstore.console.userconsole"/> <property name="osgi.command.scope" type="string" value="bs"/> <property name="osgi.command.function" type="string"> listusers createuser deleteuser </property> <service> <provide interface="hu.bme.mit.bookstore.console.userconsole"/> </service> </scr:component> Szolgáltatás definíció, hogy elinduljon a komponens

Eclipse vs OSGi

Bundle vs plug- in

Fontosabb fogalmak! OSGi o Nyílt szabvány o Komponens alapú leírások o Egyre szélesebb alkalmazási kör (mobil, szerver, desktop, vállalab, beágyazo9)! Eclipse o RCP használata nagyon megnő9 o Eclipse runbme lecserélése nyílt szabványra: Eclipse 3.0 óta OSGi- ra épül! Equinox o Eclipse OSGi implementációja (3.3 óta) o OSGi 4.0 és 4.1 referencia implementáció

Eclipse Equinox! OSGi referencia implementáció + Eclipse Extension! o Extension és extension point definíciók o Erős support SDK oldalon o Add- on: Admin Security Applicabon container

Dinamikus bundle betöltés/eltávolítás

Dinamikus bundle betöltés/eltávolítás Miért kell újraindítani Eclipse frissítéskor?

Dinamikus bundle betöltés/módosítás! Frissítés újraindítással o Történelmi okokból! Egyszerűbb belső modell o Stabkus szolgáltatáspéldányok o Függőségváltozás mia9 újraindítani

Eclipse extensions vs. OSGi services! Eclipse kiterjesztés o Egy kiterjesztési pont, amit bárki kiterjeszthet o UI kiegészítések (túl kicsik OSGi szolgáltatáshoz) o Nem kód jellegű kiegészítések Témák megadása Command framework jelentős része! OSGi szolgáltatás o Szolgáltatásokat bárki definiálhat o Szolgáltatásokat bárki használhat o Nagyon dinamikus framework o Laza csatolás

Eclipse extensions vs. OSGi services Extensions Services (Decla(ve Services) Mit regisztrálunk XML deklarációk Java Objektumok Java Objektumok (Proxy az első tényleges használabg Hogyan regisztrálunk A plugin.xml összes extension- je automa-kusan A BundleContext API- ját használva manuálisan A Service- Component leírókban lévő összes szerviz automa-kusan Hogyan használjuk fel Lekérhetőek az Extension point ID- vel Lekérhetőek az interface nevével és property filterekkel. Ua., mint services esetében, de a szolgáltatást az SCR állítja be a megado9 metódusokkal. Milyen a kapcsolat számossága One- to- many: egy Extension point- nak több Extension- je is lehet, de minden Extension- höz pont egy Extension point tartozhat Many- to- many: egy szolgáltatást többen használhatnak és egy felhasználó több szolgáltatást használhat Ua., mint services Mikor töltődik be Az Extension deklarációk indulásnál töltődnek be, de az o9 szereplő osztályok lazy- loading- gal. A megvalósító osztályt a betöltés elő9 létre kell hozni. A proxy elemnek köszönhetően a szolgáltatás csak akkor töltődik, amikor szükség van rá

Required- Bundle vs. Import- Package! Required- Bundle o Eclipse felhasználók o Minden package- t beimportál amit a bundle kiajánl re- exported package- ket is o Erősebb csatolás! Import- Package o OSGi felhasználók o Csak a megado9 package- ket importálja be o Lazább csatolás o Kevesebb látszik

Bnd és Bndtools

Bnd! OSGi köteg kezelő eszköz o Egyszerűsíte9 leíró formátum o Szöveges konfigurációs állomány o Kötegeket automabkus generálja! Szolgáltatások definíciója o Annotált Java osztályokkal o Deklara\v szolgáltatásokra épül

Bndtools! Bnd frontend Eclipse környezetben o Automabkus fordítás o Form- alapú szerkesztő o Eclipse integráció! DE: logikai eltérések PDE alapú fejlesztéstől o Egy projekt - > 1..n köteg o Képes szétosztani

Összefoglalás

OSGi alkalmazások! Dinamikus modelarchitektúra o Moduláris fejlesztés o Szolgáltatásalapú o Modulok menet közben változhatnak! Széles körű támogatás o Beágyazo9 rendszerek o Alkalmazások o Alkalmazásszerverek

További anyagok! Neil Bartle9: OSGi and How it Got That Way o h9p://njbartle9.name/2010/03/07/osgi- and- how- it- got- that- way.html o Erősen ajánlo9 egyszer végignézni! OSGi R5 újdonságok o h9p://www.eclipsecon.org/2012/sessions/whats- new- osgi- enterprise- release- 50