25
RAZVOJ APLIKACIJA UPOTREBOM OSGi PROGRAMSKOG OKVIRA DIPLOMSKI RAD DARKO DREZGA SVEUČILIŠTE U SPLITU SVEUČILIŠNI STUDIJSKI CENTAR ZA STRUČNE STUDIJE

RAZVOJ APLIKACIJA UPOTREBOM OSGi PROGRAMSKOG OKVIRA

  • Upload
    tamar

  • View
    54

  • Download
    0

Embed Size (px)

DESCRIPTION

SVEUČILIŠTE U SPLITU SVEUČILIŠNI STUDIJSKI CENTAR ZA STRUČNE STUDIJE. RAZVOJ APLIKACIJA UPOTREBOM OSGi PROGRAMSKOG OKVIRA. DIPLOMSKI RAD DARKO DREZGA. PREDMET I CILJ DIPLOMSKOG RADA. - PowerPoint PPT Presentation

Citation preview

Page 1: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

RAZVOJ APLIKACIJA UPOTREBOM OSGi PROGRAMSKOG OKVIRA

DIPLOMSKI RADDARKO DREZGA

SVEUČILIŠTE U SPLITUSVEUČILIŠNI STUDIJSKI CENTAR ZA STRUČNE STUDIJE

Page 2: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

PREDMET I CILJ DIPLOMSKOG RADA

• Opisati OSGi programski okvir, njegove građevne elemente teanalizirati i prikazati tehnike u razvoju aplikacija kroz primjere.• Osvrnuti se na integraciju sa drugim vezanim tehnologijama i izraditiprimjer aplikacije.

Page 3: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

ŠTO JE OSGi• dinamički modularni sustav za Java programski jezik• konstruiranje aplikacija kombiniranjem malih, ponovno iskoristivih komponenata koje međusobno surađuju• dinamičku promjenu kompozicije aplikacije

Izvršna okolina

Životn

i cik

lus

Moduli

Registar

servisaSve

žnje

vi

Izvršna okolina

Specifikacija Java okoline (J2SE, CDC, CLDC, MIDP itd.)

Moduli

Specifikacija modela vidljivosti i učitavanja klasaDobavljači klasa

Životn

i cik

lus Specifikacija životnog ciklusa svežnjeva

Instalacija, de-instalacija, pokretanje, zaustavljanje svežnjeva

Registar

servisa

Specifikacija načina registracije i referenciranja servisa

Page 4: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

ELEMENTI OSGI APLIKACIJA

• Svežanj• Servis• Fragment

Page 5: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

SVEŽANJ

Osnovni građevni element OSGi aplikacijaJava arhiva

Sadrži :• Ulaznu i izlaznu točku• Manifest datoteku• Vlastiti životni ciklus• Upravljanje uvozom i izvozom paketa

Page 6: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

ULAZNA I IZLAZNA TOČKA SVEŽNJA

public class HelloActivator implements BundleActivator {Logger log = null;

@Overridepublic void start(BundleContext ctx) throws Exception {

log = LoggerFactory.getLogger("hr.drezga.diplomski");log.info("Hello world!!");

}@Overridepublic void stop(BundleContext ctx) throws Exception {

log.info("Goodbye world!");}

}

• Klasa koja implementira sučelje BundleActivator• Ulazna metoda start(..)

• Instanciranje objekata i alokacija resursa• Izlazna metoda stop(...)

• Čišćenje resursa

Page 7: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

MANIFEST DATOTEKA• Naziv MANIFEST.MF• Resurs svežnja koji sadrži meta-podatke o svežnju• Ostvaruje identifikaciju svežnja OSGi okviru• Navodi klase koje svežanj uvozi i izvozi

Bundle-Version: 1.0.0Bundle-Name: HelloBundleBundle-ManifestVersion: 2Bundle-SymbolicName: hr.drezga.diplomski.helloBundle-Activator: hr.drezga.diplomski.hello.HelloActivatorImport-Package: org.osgi.framework;version=“[1.5.0,1.5.0]”, org.slf4j;version=“[1.5.6,1.5.6]”Export-Package: hr.drezga.diplomski.test;version=“1.0.0”

Page 8: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

ŽIVOTNI CIKLUS SVEŽNJA

INSTALLED

RESOLVED

UNINSTALLED

STARTING

ACTIVE

STOPPING

Stop

Start

Page 9: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

UPRAVLJANJE UVOZOM I IZVOZOM PAKETA• Odgovornost dobavljača klasa• OSGi dobavljač klasa koristi upute iz manifest datoteke

• Import-Package , Export-Package

Java Java Enterprise Edition OSGi

Page 10: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

SERVISI

• Klasični Java objekti unutar svežnja• Servisi implementiraju neko sučelje • Prijavljuju se OSGi okolini• OSGi okvir čuva referencu• Drugi svežnjevi mogu dohvatiti referencu na servis iz OSGi okoline

Page 11: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

REGISTRIRANJE I REFERENCIRANJE SERVISA

public class LogServiceActivator implements BundleActivator {ILogService logService = null;ServiceRegistration sr = null;

@Overridepublic void start(BundleContext ctx) throws Exception {

logService = new LogServiceImpl();sr = ctx.registerService(ILogService.class.getName(), logService, null);

}@Overridepublic void stop(BundleContext ctx) throws Exception {

sr.unregister();}

}

public class LogServiceConsumerActivator implements BundleActivator {

ILogService logService = null;@Overridepublic void start(BundleContext ctx) throws Exception {

ServiceReference ref = ctx.getServiceReference(ILogService.class.getName());logService = (ILogService)ctx.getService(ref);

logService.log(ILogService.INFO, "hr.drezga.diplomski", "Hello world!!");}@Overridepublic void stop(BundleContext ctx) throws Exception {

logService.log(ILogService.INFO, "hr.drezga.diplomski“, "Goodbye world!!");}

}

Registriranje servisa

Referenciranje servisa

Page 12: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

REFERENCIRANJE SERVISA I MEĐUOVISNOST SVEŽNJEVA

A B

C D

Imports

References / instantiates

X

Y

Referenciranje objekta iz drugog svežnja Referenciranje servisa iz drugog svežnja koji implementira sučelje u istom paketu

A B

C D

Imports

References

X

Y

Implements

Page 13: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

REFERENCIRANJE SERVISA I MEĐUOVISNOST SVEŽNJEVA

A B

C D

Imports

X

Y

Implements

References

A B

C D

Imports

X

Y

ImplementsReferences

Referenciranje servisa iz drugog svežnja koji implementira sučelje u drugom paketu

Referenciranje servisa iz drugog svežnja koji implementira sučelje u drugom paketu istog svežnja

Page 14: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

REFERENCIRANJE SERVISA I MEĐUOVISNOST SVEŽNJEVA

Odvajanje sučelja, implementacije i potrošača

A

C D

X

Y

E F

Z

B

Imports

Imports

Implements

References

Page 15: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

FRAGMENT

• Svežanj sa specifičnim uputama u manifestu koje omogućavaju vezanje na drugi svežanj• Sadržaj fragmenta postaje dio staze klasa(classpath) roditeljskog svežnja. • Nema svoj dobavljač klasa već koristi dobavljač klasa roditeljskog svežnja• Može uvoziti svoje pakete• Uvoz paketa nije vidljiv roditeljskom svežnju• Primjena

• Odvajanje konfiguracijskih resursa• Lokalizacija (instalacija fragmenta za određeni prijevod)• Odvajanje elemenata vezanih uz operacijski sustav ili sklopovlje

Page 16: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

PROŠIRITELJ

• Programski pristup pisanju OSGi aplikacija koji inicijalizira objekte i registrira servise na deklarativan način• Implementacija BundleTracker sučelja• Poziva se metoda addingBundle od strane OSGi okvira kod dodavanja novog svežnja u aplikaciju• removingBundle? - nema potrebe• Omogućava djelomično praćenje životnog ciklusa svežnja (adding bundle)• Kroz referencu u pozivu metode moguće doći do njegovih klasa i drugih resursa• Najvažniji resurs MANIFEST.MF

Page 17: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

INTEGRACIJA SA DRUGIM OKVIRIMA

• Spring okvir• OSGi : kompozicija servisa• Spring : deklarativno instanciranje i kompozicija klasa

•Spring dinamički moduli za OSGi• Nadograđuje OSGi okvir• Deklarativna kompozicija OSGi servisa• Implementacija proširitelja

• Eclipse Rich Client Platform• Okvir za implementaciju grafičkog korisničkog sučelja• U srži koristi OSGi okvir• Eclipse Runtime (izvršna okolina)• Standard Widget Toolkit (SWT)• Jface• Workbench (radna površina)

Page 18: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

PRIMJER OSGi APLIKACIJERCP aplikacija koja omogućuje jednostavno manipuliranje videa sa kamera obrađujući ga

raznim filterima

• Sučelja klasa• Kompozicija• Dostavljač• Filteri• Grafičko korisničko sučelje

Page 19: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

SUČELJA KLASA

+dispatch(in img : BufferedImage, in camera : string(idl))

«interface»IVideoDispatcher

+getId() : string(idl)+filter(in img) : <unspecified>

«interface»IVideoFilter

+getId() : string(idl)+isRunning() : boolean(idl)+startVideo()+stopVideo()+setDispatcher() : <unspecified>

«interface»IVideoProducer

+proccessFrame(in img, in timesatamp : long(idl))

«interface»IVideoHandler

Page 20: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

KOMPOZICIJA

+proccessFrame(in img, in timesatamp : long(idl))

«interface»hr.drezga.diplomski.video.core::IVideoHandler

+getId() : string(idl)+isRunning() : boolean(idl)+startVideo()+stopVideo()+setDispatcher() : <unspecified>

«interface»hr.drezga.diplomski.video.core::IVideoProducer

«uses»

1

*

1

*

+dispatch(in img : BufferedImage, in camera : string(idl))

hr.drezga.diplomski.video.dispatcher::VideoDispatcherDefaultImpl

Page 21: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

DOSTAVLJAČVideoProducer OSGiFramework SpringFramework VideoDispatcher VideoHandler

register

onBind

setDispatcher

register

onBind

start

dispatch

proccessFrame

unregister

onUnbind

stop

while(running)

+proccessFrame(in img, in timesatamp : long(idl))

«interface»hr.drezga.diplomski.video.core::IVideoHandler

+getId() : string(idl)+isRunning() : boolean(idl)+startVideo()+stopVideo()+setDispatcher() : <unspecified>

«interface»hr.drezga.diplomski.video.core::IVideoProducer

«uses»

1

*

1

*

+dispatch(in img : BufferedImage, in camera : string(idl))

hr.drezga.diplomski.video.dispatcher::VideoDispatcherDefaultImpl

Page 22: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

FILTERI

+getId() : string(idl)+isRunning() : boolean(idl)+startVideo()+stopVideo()+setDispatcher() : <unspecified>+proccessFrame(in img, in timesatamp : long(idl))

VideoFilterView

+getId() : string(idl)+isRunning() : boolean(idl)+startVideo()+stopVideo()+setDispatcher() : <unspecified>

«interface»IVideoProducer

+proccessFrame(in img, in timesatamp : long(idl))

«interface»IVideoHandler

+getId() : string(idl)+filter(in img) : <unspecified>

EdgeFilter

+getId() : string(idl)+filter(in img) : <unspecified>

InvertFilter

+getId() : string(idl)+filter(in img) : <unspecified>

GrayscaleFilter

+getId() : string(idl)+filter(in img) : <unspecified>

«interface»hr.drezga.diplomski.video.core::IVideoFilter

1

*

. . .

Page 23: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

GRAFIČKO KORISNIČKO SUČELJE

Page 24: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

ZAKLJUČAK

• Fleksibilna i dinamična okolina• Omogućava izolaciju i neprekinut rad dijelova aplikacije• Smanjenje vremena i troškova održavanja aplikacije• Mogućnost izrade više varijacija iste aplikacije ovisno o uključenim svežnjevima• Izrada aplikacije kompozicijom gotovih svežnjeva (Eclipse RCP i derivati)• Ponovno iskorištavanje razvijenih svežnjeva uz poštivanje međuovisnosti• Sve veći broj biblioteka se isporučuju kao OSGi svežnjevi• Prepoznavanje od strane velikih “igrača”

• IBM, JBoss, Oracle, BEA, Apache foundation, VMWare

Page 25: RAZVOJ APLIKACIJA UPOTREBOM  OSGi  PROGRAMSKOG OKVIRA

HVALA NA PAŽNJIPITANJA?