web-aplikacija za udaljeno upravljanje … · spring izrađena je web-aplikacija. prvo poglavlje...

42
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 1198 WEB-APLIKACIJA ZA UDALJENO UPRAVLJANJE RASPODIJELJENIM SUSTAVOM OBJAVI-PRETPLATI Ivan Radak Zagreb, veljača 2016.

Upload: others

Post on 20-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

DIPLOMSKI RAD br. 1198

WEB-APLIKACIJA ZA UDALJENO

UPRAVLJANJE RASPODIJELJENIM

SUSTAVOM OBJAVI-PRETPLATI

Ivan Radak

Zagreb, veljača 2016.

Zahvaljujem svojem mentoru doc. dr. sc. Krešimiru Pripužiću na ukazanom

povjerenju i pruženoj pomoći tijekom izrade diplomskoga rada.

Zahvaljujem također i asistentu Aleksandru Antoniću, mag. ing. na pomoći

oko upoznavanja sa sustavom CUPUS.

Od srca zahvaljujem svojoj obitelji na pruženoj potpori tijekom studija.

Sadržaj

Uvod ...................................................................................................................................... 1

1. JMX ............................................................................................................................... 2

1.1. Općenito o JMX-u ................................................................................................. 2

1.2. Arhitektura ............................................................................................................. 3

1.2.1. Manipulacija resursima.................................................................................. 3

1.2.2. Agent JMX-a ................................................................................................. 4

1.2.3. Udaljeno upravljanje...................................................................................... 4

1.3. MBean ................................................................................................................... 5

1.3.1. Primjer ........................................................................................................... 6

2. CUPUS ........................................................................................................................ 10

2.1. Model komunikacije objavi-pretplati .................................................................. 10

2.2. CUPUS ................................................................................................................ 11

2.3. Posrednik u oblaku .............................................................................................. 12

2.4. Mobilni posrednik ............................................................................................... 15

3. Upravljanje sustavom CUPUS .................................................................................... 16

3.1. Manipulacija sustavom CUPUS .......................................................................... 16

3.1.1. MBean koordinatora .................................................................................... 16

3.1.2. MBean primatelja poruka ............................................................................ 18

3.2. Agenti JMX-a ...................................................................................................... 19

3.2.1. Agent koordinatora ...................................................................................... 20

3.2.2. Agent primatelja poruka .............................................................................. 21

3.3. Web-aplikacija za upravljanje ............................................................................. 21

3.3.1. Konfiguracija aplikacije .............................................................................. 22

3.3.2. Sloj usluge ................................................................................................... 23

3.3.3. Upravljački sloj ........................................................................................... 25

3.3.4. Korisničko sučelje ....................................................................................... 27

Zaključak ............................................................................................................................. 31

Literatura ............................................................................................................................. 32

Sažetak ................................................................................................................................. 33

Summary .............................................................................................................................. 34

Kratice ................................................................................................................................. 35

Prilog ................................................................................................................................... 36

1

Uvod

Zadatak ovog rada je izraditi web-aplikaciju za upravljanje sustavom CUPUS,

raspodijeljenim sustavom objavi-pretplati koji je implementiran uporabom programskog

jezika Java. Ugrađivanjem upravljačkih priključaka u aplikaciju možemo lakše razumjeti

što se događa tijekom izvođenja aplikacije i po potrebi mijenjati vrijednosti nekih atributa

ili izvršavati operacije nad objektima aplikacije. Aplikacije pisane u Javi jednostavno se

mogu izložiti upravljanju uporabom Javine tehnologije JMX, kojom će također biti

omogućeno spajanje s udaljene lokacije. U tu svrhu uporabom Javina programskog okvira

Spring izrađena je web-aplikacija.

Prvo poglavlje daje općeniti pregled tehnologije JMX i njezine arhitekture. Kratko su

opisani objekti pomoću kojih se upravlja resursima te slijedi jednostavan primjer. U

drugom poglavlju opisan je model raspodijeljenog sustava objavi-pretplati, njegova

implementacija sustav CUPUS te komponente toga sustava i njihovo međudjelovanje. U

trećem poglavlju opisan je postupak kojim se omogućuje upravljanje sustavom CUPUS te

postupak izrade web-aplikacije pomoću koje će se moći spojiti na sustav CUPUS s

udaljene lokacije i jednostavno upravljati njime.

2

1. JMX

1.1. Općenito o JMX-u

Tehnologija Javinih upravljačkih dodataka (Java Management Extensions, JMX) dio je

standardnog izdanja Javine platforme (Java SE platform). Tehnologija JMX pruža

jednostavan način upravljanja resursima kao što su aplikacije, uređaji i usluge. Budući da

je tehnologija JMX dinamična, može se upotrebljavati za nadgledanje resursa i upravljanje

njima tijekom izrade, instalacije i implementacije. Može se također upotrebljavati i za

nadgledanje Javina virtualnog stroja (Java Virtual Machine) i upravljanje njime.

Specifikacije JMX-a definiraju arhitekturu, oblikovne obrasce, sučelja za programiranje

aplikacija te usluge za nadgledanje aplikacija i mreža u programskom jeziku Java kao i

upravljanje njima [1].

Uporabom tehnologije JMX jedan ili više Javinih objekata, poznatih kao Managed Beans

ili MBeans, upotrebljavaju se za manipulaciju zadanim resursom. MBeanovi su registrirani

kod poslužitelja objekata kojim upravlja jezgra, pod nazivom poslužitelj MBeanova.

Poslužitelj MBeanova djeluje kao upravljački agent i može se izvoditi na većini uređaja

koji podržavaju programski jezik Java. Agent JMX-a sastoji se od poslužitelja MBeanova

kod kojega su MBeanovi registrirani i skupa usluga za upravljanje MBeanovima. Tako

agent JMX-a izravno kontrolira resurse i čini ih dostupnim aplikacijama za udaljeno

upravljanje.

Način manipulacije resursima potpuno je neovisan o upravljačkoj infrastrukturi. Zbog toga

se resursi mogu izložiti upravljanju neovisno o tome kako su implementirane aplikacije za

upravljanje njima.

Tehnologija JMX definira standardne priključke (JMX connectors) koji omogućuju pristup

agentima JMX-a preko udaljenih upravljačkih aplikacija. Priključci JMX-a pružaju

jednako upravljačko sučelje neovisno o komunikacijskim protokolima koje upotrebljavaju,

a posljedica toga je transparentno upravljanje resursima. Agente JMX-a mogu

upotrebljavati i sustavi i aplikacije koje nisu u skladu sa specifikacijama JMX-a, ako ti

sustavi ili aplikacije podržavaju agente JMX-a.

3

1.2. Arhitektura

Tehnologija JMX dijeli se na tri razine [2]:

manipulacija resursima (Instrumentation Level na slici (Sl. 1.1))

agent JMX-a (Server Level na slici (Sl. 1.1))

udaljeno upravljanje (Distributed Services Level na slici (Sl. 1.1)).

Sl. 1.1 Arhitektura JMX-a [7]

1.2.1. Manipulacija resursima

Kako bi se moglo upravljati resursima uporabom tehnologije JMX, prvo se u programskom

jeziku Java mora omogućiti manipulacija tim resursima. Javini objekti poznati kao

MBeanovi upotrebljavaju se za implementaciju pristupa manipulaciji resursa. MBeanovi

moraju slijediti oblikovne obrasce i sučelja definirana u specifikacijama JMX-a kako bi svi

MBeanovi omogućavali manipulaciju upravljanim resursima na standardiziran način.

4

Jednom kada je resurs spreman za manipulaciju preko MBeana, njime se može upravljati

uporabom agenta JMX-a. MBeanovi ne trebaju imati nikakvo znanje o agentu JMX-a s

kojim će komunicirati.

MBeanovi su dizajnirani kako bi bili jednostavni, fleksibilni i jednostavni za

implementaciju. Programeri aplikacija, sustava i mreža mogu svoje proizvode učiniti

upravljivima na standardan način bez velikih ulaganja ili znanja o složenim upravljačkim

sustavima. Postojeći resursi mogu se učiniti upravljivima uz minimalan trud.

1.2.2. Agent JMX-a

Agent JMX-a standardan je upravljački agent koji izravno kontrolira resurse i čini ih

dostupnima aplikacijama za udaljeno upravljanje. Agenti JMX-a obično se nalaze na istom

uređaju kao i resursi koje kontroliraju, no to nije nužan uvjet.

Osnovni dio agenta JMX-a jest poslužitelj MBeanova, poslužitelj upravljanih objekata na

kojem su MBeanovi registrirani. Agent JMX-a također sadrži skup usluga za upravljanje

MBeanovima i barem jedan komunikacijski prilagodnik ili priključak koji omogućuje

pristup upravljačkoj aplikaciji.

Prilikom implementacije agenta JMX-a ne treba znati semantiku niti funkciju resursa

kojima će agent upravljati. Agent JMX-a zapravo ne treba znati niti koji će resurs

posluživati jer bilo koji resurs kojim se manipulira u skladu sa specifikacijama JMX-a

može upotrebljavati bilo koji agent JMX-a koji nudi usluge koje taj resursa treba. Agent

JMX-a također ne treba znati funkcije upravljačkih aplikacija koje će mu pristupati.

1.2.3. Udaljeno upravljanje

Metodama za manipulaciju tehnologije JMX može se pristupiti na različite načine, preko

postojećih upravljačkih protokola kao što je jednostavni mrežni upravljački protokol

(Simple Network Management Protocol, SNMP) ili preko vlastitih protokola. Poslužitelj

MBeanova oslanja se na to da će prilagodnici protokola i priključci omogućiti pristup

agentu JMX-a s upravljačkih aplikacija izvan Javina virtualnog stroja agenta.

5

Svaki prilagodnik preko određenog protokola pruža pogled na sve MBeanove koji su

registrirani kod poslužitelja MBeanova. Na primjer, prilagodnik HTML-a može prikazati

MBean u mrežnom pregledniku.

Uporabom priključka JMX-a poslužitelj MBeanova postaje dostupan udaljenim klijentima

temeljenih na tehnologiji Java. Priključak JMX-a sastoji se od klijenta priključka i

poslužitelja priključka. Poslužitelj priključka vezan je za poslužitelja MBeanova i čeka na

zahtjeve klijenata za spajanjem. Klijent priključka odgovoran je za uspostavu veze s

poslužiteljem priključka. Klijent priključka obično se nalazi na različitom Javinu

virtualnom stroju od poslužitelja priključka i često se izvodi na drugom uređaju.

Aplikacijsko programsko sučelje JMX-a definira standardan protokol spajanja temeljen na

pozivanju udaljenih metoda (Remote Method Invocation, RMI). Taj protokol omogućuje

spajanje klijenta JMX-a s udaljene lokacije na MBean koji se nalazi na poslužitelju

MBeanova i izvođenje operacija nad tim MBeanom jednako kao da se operacije izvršavaju

lokalno.

Standardno izdanje Javine platforme nudi inovativno rješenje za udaljeno nadgledanje

aplikacija uporabom standardnog priključka RMI aplikacijskog programskog sučelja JMX.

Inovativan priključak RMI-ja automatski izlaže aplikaciju udaljenom upravljanju, bez

potrebe izrade vlastita udaljenoga poslužitelja priključka. Inovativan agent udaljenog

upravljanja aktiviran je pokretanjem Javine aplikacije uz odgovarajuća svojstva. Aplikacije

za nadgledanje i upravljanje, koje su kompatibilne s tehnologijom JMX, mogu se spojiti na

te aplikacije i udaljeno ih nadgledati.

1.3. MBean

MBean je Javin objekt kojim se upravlja i koji slijedi oblikovne obrasce definirane u

specifikacijama JMX-a. MBean može predstavljati uređaj, aplikaciju ili bilo koji resurs

kojim treba upravljati. MBeanovi izlažu upravljačko sučelje koje se sastoji od skupa

atributa koje je moguće čitati i/ili pisati te skupa izvršivih operacija [3].

Upravljačko sučelje ne mijenja se tijekom životnoga vijeka primjerka MBeana. MBeanovi

također mogu slati obavijesti kada se dogode unaprijed definirani događaji.

6

Specifikacije JMX-a definiraju pet tipova MBeanova:

standardni MBeanovi

dinamički MBeanovi

otvoreni MBeanovi

generički MBeanovi

MXBeanovi.

U ovom ćemo radu upotrebljavati samo standardne MBeanove.

Standardni MBean definira se pisanjem Javina sučelja naziva NeštoMBean i Javina razreda

imena Nešto koji implementira to sučelje. Svaka metoda u sučelju definira atribut ili

operaciju u MBeanu. Atributi i operacije metode su koje slijede određene oblikovne

obrasce. Standardni MBean sastoji se od MBean sučelja i razreda. Sučelje sadrži popis

metoda svih izloženih atributa i operacija. Razred implementira to sučelje i omogućuje

funkcionalnost manipuliranog resursa.

1.3.1. Primjer

Primjer standardnog MBeana i jednostavnog agenta koji upravlja MBeanom:

public interface HelloMBean {

public void sayHello();

public int add(int x, int y);

public String getName();

public int getCacheSize();

public void setCacheSize(int size);

}

Kôd 1.1 – Sučelje HelloMBean

7

Konvencijom je dogovoreno da sučelje MBean dobiva ime Javina razreda koji će ga

implementirati te mu se dodaje sufiks MBean. U ovom primjeru sučelje se zove

HelloMBean, što znači da će razred Hello implementirati to sučelje.

Prema specifikacijama JMX-a sučelje MBeana sastoji se od atributa koje je moguće čitati

i/ili pisati te operacija koje se mogu pozivati iz aplikacija koje upravljaju MBeanom.

Sučelje HelloMBean određuje dvije operacije: Javine metode add() i sayHello() te

dva atributa: name, znakovni niz koji je moguće samo čitati, i cacheSize, cijeli broj

koji je moguće čitati i pisati. Za čitanje i pisanje atributa definirane su pripadajuće metode

za dohvat (getters) i metode za postavljanje (setters).

public class Hello implements HelloMBean {

private static final int DEFAULT_CACHE_SIZE = 200;

private final String name = "Hello MBean";

private int cacheSize = DEFAULT_CACHE_SIZE;

public void sayHello() {

System.out.println("Hello, world!");

}

public int add(int x, int y) {

return x + y;

}

public String getName() {

return this.name;

}

public int getCacheSize() {

return this.cacheSize;

}

public void setCacheSize(int size) {

this.cacheSize = size;

System.out.println("Cache size now " +

this.cacheSize);

}

}

Kôd 1.2 – Razred Hello

8

Razred Hello nudi implementacije metoda i atributa definiranih u sučelju HelloMBean.

Operacije sayHello() i add() vrlo su jednostavne, dok stvarne operacije mogu biti i

puno složenije.

Metode za dohvat atributa name i chacheSize također su definirane. U ovom primjeru

vrijednost atributa name ne mijenja se, međutim u stvarnim aplikacijama vrijednost

atributa može se mijenjati tijekom izvođenja resursa kojim se upravlja.

Pozivom metode setCacheSize možemo promijeniti vrijednost atributa cacheSize.

U stvarnim aplikacijama promjenom atributa cacheSize vjerojatno bismo trebali izvršiti

dodatne operacije, kao na primjer odbacivanje unosa ili zauzimanje novih.

Nakon što smo definirali razred Hello i njegovo sučelje HelloMBean, možemo ga

upotrijebiti za upravljanje resursom koji predstavlja. Upravljanje resursom obavlja agent

JMX-a.

Osnovna komponenta agenta JMX-a jest poslužitelj MBeanova. Poslužitelj MBeanova jest

poslužitelj upravljanih objekata kod kojega su registrirani MBeanovi. Agent JMX-a

također uključuje i skup usluga za upravljanje MBeanovima.

public class Agent {

public static void main(String[] args)

throws Exception {

MBeanServer mbs =

ManagementFactory.getPlatformMBeanServer();

ObjectName name =

new ObjectName("com.example:type=Hello");

Hello mbean = new Hello();

mbs.registerMBean(mbean, name);

System.out.println("Waiting forever...");

Thread.sleep(Long.MAX_VALUE);

}

}

Kôd 1.3 – Jednostavan agent JMX-a

9

Agent JMX-a Agent na početku izvođenja pozivom metode

getPlatformMBeanServer() razreda java.lang.management.

ManagemenFactory dohvaća poslužitelj MBeanova koji je platforma stvorila i

inicijalizirala. Ako platforma nije stvorila poslužitelj MBeanova, metoda

getPlatformMBeanServer() automatski stvara poslužitelj MBeanova pozivom

metode JMX-a MBeanServerFactory.createMBeanServer().

Agent definira naziv objekta za primjerak MBeana koji će stvoriti. Svaki MBean JMX-a

mora imati naziv objekta. Naziv objekta primjerak je razreda JMX-a ObjectName i mora

imati određenu sintaksu definiranu specifikacijama JMX-a. Naziv objekta mora sadržavati

domenu i popis ključnih svojstava. U nazivu objekta koji definira Agent domena je

com.example (paket u kojem se MBean nalazi), a ključno svojstvo označava da je

objekt tipa Hello.

Nakon toga stvoren je primjerak objekta Hello naziva mbean. Taj se primjerak pozivom

metode JMX-a MBeanServer.registerMBean() uz odgovarajuće parametre

registrira kao MBean kod poslužitelja MBeanova mbs uz naziv objekta name.

Nakon što je MBean Hello registriran kod poslužitelja MBeanova, agent jednostavno

čeka zahtjeve za izvršenjem operacija nad njim.

10

2. CUPUS

2.1. Model komunikacije objavi-pretplati

Posrednički sustav objavi/pretplati pogodan je za fleksibilno prikupljanje i širenje podataka

u okolinama MCS-a (mobile crowd sensing) u kojima se mobilni uređaji upotrebljavaju

kao pristupnici za prikupljanje i slanje podataka senzora u oblak, dok u isto vrijeme

mobilni uređaji iz oblaka dohvaćaju željene podatke. Za razliku od postojećih

centraliziranih rješenja baza podataka koja obično sve prikupljene informacije šalju u

oblak, rješenje objavi-pretplati može kontrolirati dohvat podataka na mobilnim uređajima i

slati obrađene i po mogućnosti kumulirane podatke s mobilnih uređaja u oblak samo u

situacijama kad aplikacija MCS-a uistinu zahtijeva te podatke. Uz to se podatci vraćaju

mobilnim uređajima iz oblaka samo ako su potrebni krajnjem korisniku.

Model sustava objavi-pretplati (Sl 2.1) sastoji se od skupa objavljivača P i skupa

pretplatnika S koji međusobno komuniciraju kroz hijerarhijsku mrežu objavi-pretplati na

dvjema razinama, koja se sastoji od mobilnih posrednika MB, i posrednika oblaka CB.

Sl. 2.1 Mobilni model objavi/pretplati

Objavljivači (senzori) objavljuju podatke i šalju ih mobilnim posrednicima ili izravno

posredniku oblaka. Pretplatnici (procesi na mobilnim uređajima) mogu aktivirati i

11

deaktivirati pretplate slanjem poruka pretplati i odjavi pretplatu mobilnim posrednicima ili

posredniku u oblaku, koji upotrebljavaju poruku obavijesti za isporuku odgovarajućih

podataka (koji zadovoljavaju uvjete pretplate) procesima pretplatnika. Posrednik u oblaku

odgovoran je za učinkovito uspoređivanje podataka i aktivnih pretplata, kao i za njihovu

isporuku pretplatnicima, mobilnim posrednicima ili drugim udaljenim uslugama.

Nakon početne registracije kod posrednika oblaka mobilni posrednici mogu objaviti

(announce) tip podatka koji njihovi objavljivači mogu proizvesti. Primjerice, na slici 2.1

senzor nosivog plina koji utvrđuje razinu dušikova dioksida (NO2) i ozona (O3). Nakon što

MB1 otkrije P2, zato što razmjenjuju signalne poruke preko Bluetooth veze, MB1, osim

njegove lokacije, može dojaviti i vrstu podataka koje može prenijeti CB-u. MB1 šalje

poruku announce (NO2; O3; x; y), gdje x=45.81302, a y=15.97781 kazuje aktualnu

geografsku širinu MB1. Poruka announce kreira se iz sljedećega razloga: moramo aktivirati

pretplate s posrednika u oblaku na MB1, ali upotrijebiti samo one koji se mogu

potencijalno podudarati s budućim objavama koje kreira P2. Naravno da te pretplate ovise

o lokaciji, tako da P2 objavljuje svoju novu lokaciju svaki puta kada se ona znatno

promijeni, primjerice kada P2 uđe u kućicu. Ako na MB1 nema aktivnih pretplata, ne

prosljeđuje nikakve podatke posredniku. Pretplate I objave utemeljene na lokaciji smanjuju

broj pretplata koje MB1 treba obraditi I nije poželjno na jednom mobilnom uređaju

aktivirati sve pretplate iz oblaka. To se postiže uspoređivanjem poruke announce I

postojećih pretplata na posredniku. Primjerice, kada S2 na slici 2.1 definira novu pretplatu

si = [NO2 > 40µgm-3 AND 45:81 <lat < 45:82 AND 15:96 < long < 15:98], MB2 je šalje

posredniku. Na temelju prethodno primljene poruke announce posrednik identificira si kao

pretplatu koja je potencijalno usklađena s budućim objavama P2. Stoga posrednik šalje

poruku pretplati kako bi aktivirao si na MB1. Kada MB1 primi očitanja senzora P2 koja

odgovaraju si, MB1 u oblak šalje geografski označene podatke s P2.

2.2. CUPUS

Sustav CUPUS implementacija je prethodno opisanog sustava objavi-pretplati. Sustav

CUPUS na raspolaganje stavlja mehanizme za obradu podataka tipa objavi-pretplati prema

temi ili sadržaju temeljenu na Booleanovu modelu pretplate. Sustav podržava opsežan

predikatni jezik s izrazitim skupom operatora za najčešće tipove podataka: relacijske

12

operatore, operatore skupova, operatore prefiksa i sufiksa nad znakovnim nizovima i

operator SQL BETWEEN. Booleanova pretplata definirana je kao skup trojki. Trojka se

sastoji od vrijednosti atributa, vrijednosti uvjeta i operatora koji vrijednost atributa i uvjeta

stavlja u odnos. Svaka trojka predstavlja logički predikat, stoga je pretplata konjunkcija

predikata koji svi moraju biti istiniti kako bi objava odgovarala pretplati. Sljedeći relacijski

operatori podržavaju brojčane vrijednosti: <, <=, >, >=, = i BETWEEN. Uz to, posrednički

sustav podržava operatore znakovnih nizova kao što su CONTAINS, BEGINS_WITH i

ENDS_WITH.

Ostali zahtjevi za posrednički sustav objavi/pretplati za aplikacije MCS-a odnose se na

isporuku podataka. CUPUS podržava semantiku isporuke barem jedanput jer aplikacije

MCS-a nisu kritične po pitanju sigurnosti. Što se tiče svojstava sustava, kašnjenje slanja

podataka s kraja-na-kraj mora biti malo kako bi se aplikacijama koje obično uključuju

brzu izmjenu podataka osiguralo kašnjenje gotovo na razini stvarnog vremena za primjene

koje obično uključuju brzu promjenu konteksta. Posrednik u oblaku mora biti

implementiran elastično kako bi bilo zajamčeno učinkovito iskorištavanje resursa oblaka

uzimajući u obzir opterećenje obrade, što utječe na svojstva sustava. Na kašnjenje također

utječe i predobrada koju obavljaju mobilni posrednici.

2.3. Posrednik u oblaku

Arhitektura posrednika u oblaku (Sl. 2.2) temelji se na arhitekturi obrade generičkog toka

podataka u kojem se trajni upiti (pretplate) čuvaju u memoriji procesora radi učinkovite

obrade dolaznih podatkovnih objekata (objava).

Komponenta primatelj poruka prima i potvrđuje pretplate i objave iz raspodijeljenih izvora,

dok komponenta usluga isporuke stvara tokove podataka od kojih je svaki pojedini

usmjeren prema raspodijeljenom pretplatniku ili mobilnom posredniku. Objave iz

pojedinih izvora podataka možemo promatrati kao dolazni tok podataka. Svaka dolazna

objava vidi se samo kad ulazi u posrednik u oblaku osim ako nije izričito spremljena u

memoriji.

13

Sl. 2.1 Arhitektura posrednika u oblaku

Posrednik u oblaku upotrebljava se kao središnja procesorska jedinica unutar oblaka koja

obavlja sljedeće poslove:

1. prima objave i pretplate primljene iz izvora podataka i odredišta te upravlja njima

2. uspoređuje aktivne pretplate i objave

3. isporučuje odgovarajuće objave pretplatnicima

4. isporučuje pretplate mobilnim posrednicima.

Najzahtjevniji posao posrednika u oblaku jest usporedba objava i pretplata, stoga je

potrebno kopirati uspoređivače i dinamički zauzete resurse oblaka u skladu s trenutnim

opterećenjem obrade. Algoritam usporedbe pohranjuje aktivne pretplate u šumu temeljenu

na prekrivnom odnosu među pretplatama. Šuma pretplata je struktura podataka koja

pohranjuje sve aktivne pretplate krajnjih korisnika i omogućuje djelomičan odabir

pretplata. Kada se dolazne objave uspoređuju s velikim brojem pretplata, može se skratiti

vrijeme usporedbe potrebno za otkrivanje popisa pretplatnika koji zahtijevaju obavijest o

objavi. Takva struktura podataka ključna je za implementaciju učinkovite usporedbe.

Daljnja optimizacija može se postići podjelom opterećenja među procesima uspoređivača

koje je moguće organizirati u ravnu ili hijerarhijsku strukturu. Te se strukture moraju

14

dinamički prilagoditi trenutnom opterećenju kako bi osigurale elastičnu obradu posrednika

u oblaku.

Ravna arhitektura posrednika oblaka upotrebljava paralelno poredane neovisne primarne

uspoređivače (root matcher). Ti su uspoređivači stvoreni i inicijalizirani na zahtjev

koordinatora. Koordinator je središnja komponenta posrednika u oblaku koja pri

pokretanju pokreće uspoređivače, raspodjeljuje opterećenje obrade među njima i izravno je

povezana sa svakim od njih. Koordinator može pokrenuti nove uspoređivače ili zaustaviti

izvođenje procesa postojećih u skladu s trenutnim opterećenjem.

Ravna arhitektura nudi jednostavan način obrade objava i pretplata. Koordinator kružnim

postupkom (round-robin) raspodjeljuje primljene pretplate primarnim uspoređivačima, što

daje N primarnih uspoređivača sa strukturom podataka pretplata koja sadrži N-ti dio svih

pretplata koje posrednik u oblaku obrađuje. Koordinator kopira dolazne objave i šalje ih

svim uspoređivačima. To može usporiti koordinator jer mora obaviti N slijednih

komunikacijskih operacija. Trenutna implementacija sustava CUPUS upotrebljava ravnu

arhitekturu posrednika oblaka.

Hijerarhijska arhitektura posrednika oblaka upotrebljava dvije vrste uspoređivača: primarni

i sekundarni uspoređivač (child matcher). Svaki uspoređivač odgovoran je za dio šume

pretplata koja se prostire preko svih aktivnih pretplata primljenih od posrednika oblaka.

Primarni je uspoređivač glavni uspoređivač koji sadrži korijenski čvor jednog od stabala

šume pretplata. Broj primarnih uspoređivača jednak je broju stabala u šumi. Sekundarni

uspoređivač sadrži korijen podstabla i podređen je jednom od primarnih uspoređivača. U

ovakvoj arhitekturi koordinator održava popis pretplata korijenskog čvora i svaku objavu

prosljeđuje jednom primarnom uspoređivaču. Kada primarni uspoređivač treba proslijediti

dolaznu objavu niz drvo uspoređivača, prosljeđuje ju jednom od procesa uspoređivača.

Takva implementacija temeljena na šumi može biti učinkovitija od ravne arhitekture, no

zahtijeva mnogo složeniju realizaciju.

15

2.4. Mobilni posrednik

Mobilni posrednik sustava CUPUS izvodi se na mobilnim uređajima i služi kao pristupnik

lokalno spojenim senzorima. Glavne su mu zadaće:

1. kontroliranje lokalno spojenih senzora i odgovarajućih procesa prikupljanja

podataka, predobrada prikupljenih podataka i njihov prijenos u oblak

2. prihvaćanje objava iz oblaka i prikaz onih koje su korisniku zanimljive.

Složenost prvog zadatka leži u tome što kad god korisnik promijeni svoju lokaciju ili

kontekst, aplikacija mora obavijestiti posrednika u oblaku o promjeni kako bi imao

najnovije informacije o priključenim izvorima podataka i pretplatama koje se odnose na

novi kontekst. Sve promjene konteksta dojavljuju se putem objavnih poruka. Kao odgovor

na to, posrednik u oblaku mobilnim posrednicima šalje podskup pretplata koje potencijalno

mogu odgovarati budućim objavama. Taj mehanizam osigurava malen broj aktivnih

pretplata po mobilnom posredniku, koji se može izvršavati paralelno na mobilnim

uređajima.

Drugi se zadatak bavi isporukom publikacija s oblaka na mobilne uređaje, utemeljenom na

guranju, koja programerima zadaje najviše problema. Osim toga mogu se pojaviti visoki

troškovi energije jer je nedavno istraživanje pokazalo da periodični prijenosi u mobilnim

aplikacijama koji čine samo 1,7 % ukupnog prometa iznose 30 % ukupne potrošne radijske

energije slušalica (Antonić et al., 2015.).

16

3. Upravljanje sustavom CUPUS

Zadatak je praktičnog dijela ovog rada implementirati sljedeće upravljačke mehanizme:

pregled stanja, pokretanje i zaustavljanje pojedinih komponenti sustava CUPUS, pregled

aktivnih pretplata i njihovo otkazivanje, pregled i odspajanje postojećih objavljivača i

pretplatnika te pregled statistike korištenja sustava CUPUS.

3.1. Manipulacija sustavom CUPUS

Upravljanje sustavom CUPUS ostvarit ćemo manipulacijom dviju komponenti sustava:

koordinatora i primatelja poruka. Tablica (Tablica 3.1) prikazuje čime će pojedina

komponenta moći upravljati.

Tablica 3.1 – Upravljanje komponentama

MBean koordinatora MBean primatelja poruka

Primatelj poruka Popis pretplatnika

Usluga isporuke Popis objavljivača

Uspoređivači Popis aktivnih objava

Prvi je korak definiranje sučelja MBeanova koja će sadržavati popis operacija koje će se

moći izvršiti nad sustavom CUPUS.

3.1.1. MBean koordinatora

Sučelje CoordinatorWrapperMBean predstavlja popis operacija koje će se moći

izvršiti nad koordinatorom. Definirane su sljedeće operacije:

17

initMessageReceiver() – metoda pokreće komponentu sustava, primatelja

poruka

shutdownMessageReceiver() – metoda zaustavlja izvođenje procesa

primatelja poruka

initDeliveryService() – metoda pokreće komponentu sustava, uslugu

isporuke

shutdownDeliveryService() – metoda zaustavlja izvođenje procesa usluge

isporuke

initMatchers() – metoda pokreće uspoređivače (matchers)

initMatcher(int matcherID) – metoda pokreće zadani uspoređivač

removeBooleanMatcher(int matcherID) – metoda zaustavlja izvođenje

zadanog uspoređivača

shutdown() – metoda zaustavlja izvođenje koordinatora

Sučelje CoordinatorWrapperMBean određuje i tri atributa koja je moguće samo

čitati, što znači da oni imaju definirane samo metode za dohvat:

isMessageReceiverRunning – atribut je tipa boolean i označava je li

primatelj poruka pokrenut. Ako je pokrenut, vrijednost je true, inače je false.

isDeliveryServiceRunning – atribut je tipa boolean i označava je li

usluga isporuke pokrenuta. Ako je pokrenuta, vrijednost je true, inače je false.

numberOfMatchers – atribut je cjelobrojnog tipa int i predstavlja broj

uspoređivača koji su pokrenuti.

public class CoordinatorWrapper implements

CoordinatorWrapperMBean{

Coordinator coordinator;

public CoordinatorWrapper(Coordinator coordinator) {

this.coordinator = coordinator;

}

@Override

public void shutdown() {

coordinator.shutdown();

}

...

Kôd 3.1 – MBean CoordinatorWrapper

18

Razred CoordinatorWrapper implementira sučelje CoordinatorWrapper

MBean, što znači da nudi implementaciju svih njegovih metoda. Taj razred služi kao

omotač koordinatora, tj. preko konstruktora prima referenciju na već postojeći primjerak

koordinatora te nad njim poziva potrebne metode. CoordinatorWrapper predstavlja

MBean koji ćemo registrirati kod poslužitelja MBeanova i tako omogućiti manipulaciju

koordinatorom.

3.1.2. MBean primatelja poruka

Sučelje MessageReceiverWrapperMBean predstavlja popis operacija koje će se

moći izvršiti nad primateljem poruka i sadrži sljedeće atribute:

RegisteredSubscribersList – atribut je lista podataka tipa SubPubData,

koji predstavlja popis pretplatnika sustava CUPUS

RegisteredPublishersList – atribut je lista podataka tipa SubPubData,

koji predstavlja popis objavljivača sustava CUPUS

ActivePublications – atribut je lista podataka tipa

PublicationMBeanData i predstavlja popis aktivnih objava u sustavu

CUPUS.

Ovi se atributi također mogu samo čitati. Sučelje MessageReceiverWrapperMBean

definira i sljedeće operacije:

removeSubscriber(UUID subID, String myName) – metoda uklanja

pretplatnika s popisa pretplatnika uz zadani identifikacijski broj pretplatnika

subID i njegovo ime myName.

removePublisher(UUID pubID) – metoda uklanja objavljivača s popisa

objavljivača uz zadani identifikacijski broj objavljivača pubID.

removeActivePublication(UUID publicationID) – metoda uklanja

objavu s popisa aktivnih objava uz identifikacijski broj objave publicationID.

19

public class MessageReceiverWrapper implements

MessageReceiverWrapperMBean{

private MessageReceiver mr;

public MessageReceiverWrapper(MessageReceiver mr) {

this.mr = mr;

}

@Override

public List<SubPubData> getRegisteredSubscribersList(){

return mr.getRegisteredSubscribersList();

}

...

Kôd 3.2 – MBean MessageReceiverWrapper

Razred MessageReceiverWrapper implementira sučelje MessageReceiver

WrapperMBean te, isto kao u slučaju s koordinatorom, preko konstruktora prima

referenciju na već postojeći primjerak primatelja poruka i nad njim poziva potrebne

metode. MessageReceiverWrapper predstavlja MBean koji ćemo registrirati kod

poslužitelja MBeanova i tako omogućiti manipulaciju primateljem poruka.

3.2. Agenti JMX-a

Sljedeći je korak pokretanje agenta JMX-a i registracija MBeanova

CoordinatorWrapper i MessageReceiverWrapper kod poslužitelja

MBeanova. Koordinator i primatelj poruka pokrenut će svaki svojega agenta JMX-a.

Prilikom pokretanja Javina virtualnog stroja potrebno je definirati određena svojstva

sustava koja će pokrenuti agenta JMX-a. Svojstva sustava definiraju se u naredbenom

retku kako slijedi.

java -Dsvojstvo=vrijednost ...

Ovim načinom može se definirati bilo koji broj svojstava sustava. Ako se ne definira

vrijednost upravljačkog svojstva, svojstvo će biti postavljeno na unaprijed definiranu

vrijednost. Svojstva sustava također mogu biti definirana i u konfiguracijskoj datoteci.

Svojstvo com.sun.management.jmxremote.port osposobljava agenta JMX-a za

udaljeno upravljanje i stvara priključak JMX-a koji čeka zahtjeve na određenom ulazu

20

(port). Kako je unaprijed definirano, za stvoreni priključak upotrebljavaju se sigurnosni

sloj priključaka (Secure Sockets Layer, SSL), lozinka i svojstva datoteke pristupa. Ovo

svojstvo također omogućuje i lokalno upravljanje.

3.2.1. Agent koordinatora

Primjerak razreda Coordinator pokrenut ćemo sa sljedećim svojstvima:

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

Prvim svojstvom osposobljavamo agenta JMX-a za udaljeno upravljanje i stvaramo

priključak JMX-a koji čeka zahtjeve na ulazu 9999. Drugim svojstvom određujemo da

agent JMX-a ne upotrebljava lozinke niti datoteke pristupa, drugim riječima svim je

korisnicima omogućen pristup svemu. Trećim svojstvom radi jednostavnosti

onemogućavamo sigurnosno nadgledanje uporabom SSL-a.

Pozivom metode getPlatformMBeanServer() dohvaćamo poslužitelj MBeanova

koji je platforma stvorila i inicijalizirala.

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

Nakon toga definiramo naziv MBeana

ObjectName mbeanName = new ObjectName("org.openiot.cupus.

entity.broker:type=CoordinatorWrapper");

i stvorimo primjerak razreda CoordinatorWrapper kojemu kao argument

konstruktora predamo ranije stvoreni primjerak razreda Coordinator.

CoordinatorWrapper coordinatorMBean =

new CoordinatorWrapper(coordinator);

Još nam je jedino ostalo registrirati MBean koordinatora kod platformskog poslužitelja

MBeanova mbs.

mbs.registerMBean(coordinator, mbeanName);

Nakon toga MBean koordinatora registriran je kod poslužitelja MBeanova i čeka zahtjeve

za upravljanjem.

21

3.2.2. Agent primatelja poruka

Primjerak razreda MessageReceiver pokrenut ćemo sa sljedećim svojstvima:

-Dcom.sun.management.jmxremote.port=9998

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

Jedina razlika u odnosu na Agenta koordinatora jest u prvom svojstvu koje stvara

priključak JMX-a koji čeka zahtjeve na ulazu 9998. Druga dva svojstva opet moramo

postaviti na vrijednost false jer je unaprijed definirana vrijednost true.

Postupak registracije MBeana primatelja poruka kod poslužitelja MBeanova jednak je kao

i postupak registracije MBeana koordinatora. Dohvatimo već pokrenuti poslužitelj

MBeanova, stvorimo objekt koji će predstavljati naziv MBeana kod poslužitelja

MBeanova, stvorimo primjerak razreda MessageReceiverWrapper uz već stvoreni

primjerak razreda MessageReceiver kao argument konstruktora te ga uz definirani

naziv registriramo kod poslužitelja MBeanova.

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

ObjectName mbeanName = new ObjectName("org.openiot.cupus.

entity.broker:type=MessageReceiverWrapper");

MessageReceiverWrapper messageReceiver =

new MessageReceiverWrapper(messageReceiver);

mbs.registerMBean(messageReceiver, mbeanName);

Kôd 3.3 – Registracija MBeana primatelja poruka

3.3. Web-aplikacija za upravljanje

Posljednji je korak izrada web-aplikacije koja će se spojiti na agente JMX-a iz prethodnoga

poglavlja i tako omogućiti upravljanje sustavom CUPUS. Za izradu web-aplikacije koristit

ćemo se Javinim programskim okvirom Spring.

Pristupni dio (frontend), tj. ono što korisnik vidi u web pregledniku, implementirat ćemo

uporabom stranica HTML/JSP uz biblioteku standardnih oznaka za Javine stranice

poslužitelja (JavaServer Pages Standard Tag Library, JSTL) i Springove forme.

22

Pozadinski sustav (backend) sastoji se od upravljačkog sloja i sloja usluga. Upravljački su

razredi (controllers) Javini razredi koji će upravljati svim dolaznim zahtjevima iz sloja

korisničkog sučelja, obavljati provjeru ulaznih parametara, pozivati potrebne usluge,

upravljati njihovim odgovorima te potrebne podatke vratiti natrag sloju korisničkog

sučelja.

Usluge (services) su Javini razredi koji implementiraju svu poslovnu logiku aplikacije. U

idealnom slučaju sloj usluge ne zna ništa o upravljačkom sloju niti o sloju repozitorija.

Usluge rade s Javinim razredima koji predstavljaju objekte podataka aplikacije, obavljaju

operacije poslovne logike aplikacije, pozivaju druge usluge te mogu pozivati razrede

repozitorija kako bi učitali ili spremili podatke u podatkovnom sloju ako ga ima. U ovoj

aplikaciji ne ćemo spremati podatke u bazu podataka, pa samim time nema ni potrebe za

podatkovnim slojem.

3.3.1. Konfiguracija aplikacije

U konfiguracijskoj datoteci web-aplikacije applicationContext.xml definiramo sljedeće

oznake.

<mvc:annotation-driven/>

Oznaka nam omogućava pridruživanje zahtjeva HTTP upravljačkom razredu uporabom

napomene @RequestMapping i još mnoštvo korisnih opcija [6].

<context:component-scan base-package=

"org.openiot.cupus.webapp"/>

Ovime određujemo pakete u kojima će Spring tražiti upravljačke razrede, usluge,

repozitorije i ostale komponente.

<mvc:resources mapping=

"/resources/**" location="/resources/"/>

Ovom oznakom određujemo lokacije koje će Spring ignorirati tijekom obrade. Ovdje

možemo staviti sve statičke resurse, npr. slike, css.

<bean class="org.springframework.web.servlet.view.

InternalResourceViewResolver"

p:prefix="/WEB-INF/pages/"

p:suffix=".jsp"/>

23

Ovime smo odredili gdje će Spring iz upravljačkog razreda tražiti poglede (views) za

korisničko sučelje.

3.3.2. Sloj usluge

Razred usluge AppService sadrži metodu

connect(String host, boolean coordinator)

koja služi za spajanje na agenta JMX-a. Kao argumente prima znakovni niz host koji je

oblika „hostname:port“ i logičku vrijednost coordinator čija je vrijednost true ako se

pokušavamo spojiti na agenta koordinatora, a false ako se pokušavamo spojiti na agenta

primatelja poruka.

Kako bismo mogli stvarati veze prema agentima JMX-a koji su na udaljenim lokacijama,

trebat će nam razredi iz paketa javax.management.remote [4].

import javax.management.remote.JMXConnector;

import javax.management.remote.JMXConnectorFactory;

import javax.management.remote.JMXServiceURL;

Stvorit ćemo primjerke razreda JMXConnectora za koji su potrebni razredi

JMXConnectorFactory i JMXServiceURL.

U metodi connect definiramo primjerak razreda JMXServiceURL naziva url koji

predstavlja lokaciju na kojoj klijent priključka očekuje naći poslužitelja priključka. Ovaj

ujednačeni lokator sadržaja (Uniform Resource Locator, URL) omogućuje klijentu

priključka dohvat informacija o poslužitelju priključka RMI-ja iz registra RMI-ja pod

ključem jmxrmi i spajanje na poslužitelj priključka RMI-ja.

String urlString =

"service:jmx:rmi:///jndi/rmi://" + host + "/jmxrmi";

JMXServiceURL url = new JMXServiceURL(urlString);

Uz identificiran registar RMI-ja možemo stvoriti klijenta priključka.

JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

Klijent priključka jmxc primjerak je sučelja JMXConnector stvorenog metodom

connect() razreda JMXConnectorFactory. Metodi connect() predaju se

parametri url i mapa varijabli okoline, koje u ovom slučaju nema.

24

Nakon što smo uspostavili vezu RMI-ja, klijent JMX-a mora se spojiti na udaljeni

poslužitelj MBeanova kako bi mogao upravljati MBeanovima registriranima na udaljenom

agentu JMX-a.

MBeanServerConnection coordinatorMbsc =

jmxc.getMBeanServerConnection();

To ćemo učiniti stvaranjem primjerka razreda MBeanServerConnection nazvanoga

coordinatorMbsc i to pozivom metode getMBeanServerConnection()

primjerka jmxc razreda JMXConnector.

Klijent priključka sada je spojen na poslužitelj MBeanova koji je agent JMX-a stvorio, pa

može registrirati MBeanove i obavljati operacije nad njima tako da uspostavljena veza

ostane potpuno transparentna na oba kraja.

MBeanovima registriranima kod poslužitelja MBeanova pristupit ćemo preko posrednika

MBeana (MBean proxy). Posrednik MBeana lokalan je u odnosu na klijenta i simulira

MBean kod udaljenog poslužitelja.

ObjectName mbeanName =

New ObjectName("org.openiot.cupus.entity.broker:

type=CoordinatorWrapper");

CoordinatorWrapperMBean coordinatorProxy =

JMX.newMBeanProxy(coordinatorMbsc, mbeanName,

CoordinatorWrapperMBean.class, false);

Posrednici MBeanova omogućuju pristup MBeanovima preko Javinih sučelja te dopuštaju

slanje zahtjeva posredniku umjesto pisanja dugačkoga koda za pristup udaljenim

MBeanovima. Posrednika MBeana ovdje stvaramo pozivom metode newMBeanProxy()

razreda javax.management.JMX. Kao argumente predajemo coordinatorMbsc –

vezu na udaljeni poslužitelj MBeanova, mbeanName – objekt koji predstavlja naziv

MBeana na poslužitelju, CoordinatorWrapperMBean.class – naziv razreda

sučelja MBeana i false – što označava da ga ne ćemo rabiti kao prijenosnika obavijesti.

Klijent JMX-a sada može pozivati operacije definirane u razredu

CoordinatoWrapper, kao da se radi o operacijama lokalno registriranog MBeana.

Jednom kada je klijent JMX-a dohvatio sve potrebne informacije i obavio sve željene

operacije nad MBeanovima na udaljenom poslužitelju MBeanova agenta JMX-a, veza se

mora prekinuti pozivom metode close() razreda JMXConnector. U našem slučaju to

će biti

25

jmxc.close();

Postupak spajanja s agentom primatelja poruka jednak je prethodnom postupku spajanja s

agentom koordinatora.

Razred usluge AppService ima dvije članske varijable koje je moguće čitati. Posrednik

koordinatora coordinatorProxy, koji je tipa CoordinatorWrapperMBean i

posrednik primatelja poruka messageReceiverProxy, koji je tipa

MessageReceiverWrapperMBean. Kad se uspostavi veza s agentima JMX-a, preko

tih članskih varijabli moguće je izvršavati operacije nad udaljenim MBeanovima.

3.3.3. Upravljački sloj

Upravljački razred AppController posluživat će zahtjeve iz sloja korisničkog sučelja.

U sljedećoj je tablici (Tablica 3.2) prikazana struktura ujednačenih identifikatora resursa

(Uniform Resource Identifier, URI) web-aplikacije.

Tablica 3.2 – Struktura URI-jeva web-aplikacije

URI Metoda Radnja

/connect GET Prikaz obrasca

/connect POST Spajanje s agentom koordinatora

/coordinator GET Prikaz komponenti sustava CUPUS

/coordinator POST Pokretanje, zaustavljanje komponenti

/messageReceiver GET Provjera veze s agentom primatelja poruka

/messageReceiver/connect GET Prikaz obrasca

/messageReceiver/connect POST Spajanje s agentom primatelja poruka

/messageReceiver/subscribers GET Prikaz popisa pretplatnika

/messageReceiver/subscribers POST Uklanjanje pojedinog pretplatnika

/messageReceiver/publishers GET Prikaz popisa objavljivača

/messageReceiver/publishers POST Uklanjanje pojedinog objavljivača

/messageReceiver/publications GET Prikaz popisa aktivnih objava

/messageReceiver/publications POST Uklanjanje pojedine aktivne objave

26

Prilikom spajanja na web-aplikaciju korisnika se preusmjerava na mrežnu stranicu koja

služi za povezivanje sa sustavom CUPUS. Nakon što korisnik ispuni traženo polje i klikne

na Connect, za trenutni URL (/connect) biti će poslan HTTP zahtjev POST.

connectToHostPost(@RequestParam String hostName, Model model)

Oznaka @RequestParam metode connectToHostPost označava da će parametar

hostName biti povezan s parametrom web zahtjeva POST. Drugim riječima, parametar

hostName poprimit će vrijednost koju je korisnik upisao u polje za unos adrese

poslužitelja. Metoda connectToHostPost poziva metodu connect razreda

AppService koja vraća vrijednost true ako je spajanje s agentom koordinatora uspjelo ili

vrijednost false ako je nastupila neka pogreška. Ako je spajanje s agentom koordinatora

uspjelo, korisnika se preusmjerava na sljedeću mrežnu stanicu, a ako nije uspjelo,

prikazuje se poruka pogreške.

Metoda messageReceiverGet provjerava je li uspostavljena veza s agentom

primatelja poruka. Ako veza nije uspostavljena, korisnik se preusmjerava na mrežnu

stranicu s obrascem za spajanje s agentom primatelja poruka (/messageReceiver/connect).

Ostale metode preko primjerka razreda AppService iz sloja usluga dohvaćaju

posrednike MBeanova koordinatora ili primatelja poruka te preko njih pozivaju

odgovarajuće metode kako slijedi u primjerima.

@RequestMapping(value = "/coordinator", method =

RequestMethod.POST, params = "shutdownMR")

public String shutdownMR(Model model){

service.getCoordinatorProxy()

.shutdownMessageReceiver();

return "redirect:/coordinator";

}

Kôd 3.4 – Metoda koja zaustavlja izvođenje primatelja poruka

Metoda shutdownMR dohvaća posrednika MBeana koordinatora iz sloja usluge i preko

njega poziva metodu shutdownMessageReceiver() MBeana koordinatora koja

zaustavlja izvođenje primatelja poruka.

27

@RequestMapping(value = "/messageReceiver/subscribers",

method = RequestMethod.GET)

public String listSubscribers(Model model){

List<SubPubData> subscribers =

new ArrayList<SubPubData>();

subscribers = service.getMessageReceiverProxy().

getRegisteredSubscribersList();

model.addAttribute("subscribers", subscribers);

return "messageReceiver/subscribers";

}

Kôd 3.5 – Metoda za dohvat liste pretplatnika

Metoda listSubscribers inicijalizira listu podataka tipa SubPubData, dohvaća

posrednika MBeana primatelja poruka iz sloja usluge i preko njega poziva metodu

getRegisteredSubscribersList() MBeana primatelja poruka koja dohvaća listu

pretplatnika.

Razredi SubPubData i PublicationData strukture su koje služe za pohranu i

prijenos potrebnih podataka o pretplatnicima i objavljivačima, odnosno o aktivnim

objavama. Razred SubPubData pohranjuje ime, IP adresu, ulaz i identifikacijski broj

pretplatnika ili objavljivača, logičku varijablu koja označava je li pojedini pretplatnik ili

objavljivač trenutno spojen na sustav CUPUS te broj objava ako se radi o objavljivaču.

Razred PublicationData pohranjuje identifikacijski broj objave, identifikacijski broj

objavljivača, vremensko razdoblje valjanosti objave te samu objavu.

3.3.4. Korisničko sučelje

Korisničko sučelje sastoji se od mrežnih stranica HTTP/JSP koje sadrže informacije i

omogućuju korisniku jednostavno upravljanje sustavom CUPUS. Web-aplikaciji pristupa

se upisivanjem URL-a http://hostname/WebApplication u mrežni preglednik, pri čemu je

hostname adresa poslužitelja kod kojega se izvodi aplikacija. Ako se aplikacija izvodi

lokalno, pristupa joj se na adresi http://localhost:8080/WebApplication. Na početnoj

stranici nalazi se obrazac za spajanje s agentom koordinatom, koji se sastoji od jednog

polja za unos u koje je potrebno upisati ime poslužitelja ili IP adresu i ulaz kao što je

prikazano na slici (Sl. 3.1).

28

Sl. 3.1 Početna mrežna stranica

Nakon što smo se uspješno spojili s agentom koordinatora, dolazimo na mrežnu stranicu

koja prikazuje stanje komponenti sustava i omogućuje upravljanje njima. U metodi

coordinatorGet(Model model) upravljačkog razreda u primjerak razreda modela

model stavili smo atribute koji označavaju izvode li se primatelj poruka, usluga isporuke i

broj pokrenutih uspoređivača:

model.addAttribute("isMRrunning", isMRrunning);

model.addAttribute("isDSrunning", isDSrunning);

model.addAttribute("numberOfM", numberOfM);

Sada tim atributima možemo pristupiti unutar stranice coordinator.jsp, pomoću naziva pod

kojim su pohranjeni u mapi model:

${isMRrunning}

${isMRrunning}

${numberOfM}

Istovremeno se može izvoditi samo jedan primjerak primatelja poruka i samo jedna usluga

isporuke, dok uspoređivača može biti više, no najmanje jedan.

29

Sl. 3.2 Mrežna stranica stanja sustava CUPUS

Sa slike (Sl. 3.2) vidimo da je gumb za pokretanje primatelja poruka onemogućen jer se

komponenta već izvodi. Isto tako kod usluge isporuke omogućen je samo gumb za

pokretanje jer se komponenta ne izvodi. Oznaka Message Receiver ujedno je i poveznica

na stranicu koja prikazuje čime sve komponenta primatelj poruka može upravljati. Ako

veza s agentom primatelja poruka nije uspostavljena, poveznica nas prvo preusmjerava na

stranicu za spajanje s agentom (/messageReceiver/connect).

Slijednim dijagramom UML na slici (Sl. 3.3) prikazan je proces dohvata popisa

pretplatnika sustava CUPUS.

Sl. 3.3 Slijedni dijagram UML

30

Klikom na poveznicu naziva Subscribers pozvana je metoda getSubscribers

upravljačkoga razreda AppController. Metoda iz sloja usluge dohvaća posrednika

MBeana primatelja poruka i poziva metodu getRegisteredSubscribersList().

Posrednik preko uspostavljene veze s agentom primatelja poruka pristupa MBeanu

registriranom kod agenta. MBean registriran kod agenta dohvati traženi atribut iz sustava

CUPUS te ga šalje posredniku, koji primljenu listu vraća upravljačkom razredu web-

aplikacije.

Nakon toga preusmjereni smo na mrežnu stranicu koja prikazuje popis registriranih

pretplatnika (/messageReceiver/subscribers), koju prikazuje slika (Sl. 3.4).

Sl. 3.4 Popis pretplatnika

31

Zaključak

Cilj ovoga rada bio je izraditi web-aplikaciju koja će omogućiti upravljanje raspodijeljenim

sustavom CUPUS s udaljene lokacije. Za izradu web-aplikacije koristio sam se Javinim

programskim okvirom Spring, a za izradu upravljačkih komponenti za sustav CUPUS

Javinim programskim okvirom JMX. Izrađena aplikacija omogućuje udaljeno spajanje na

sustav CUPUS sa udaljene lokacije i nudi mehanizme pregleda stanja, pokretanja i

zaustavljanja različitih komponenti sustava, pregled i odspajanje korisnika sustava te

pregled i otkazivanje aktivnih pretplata, čime je ostvaren zadatak ovog rada. Moguća

proširenja aplikacije jesu primjerice uspostavljanje sigurne komunikacije primjenom

autentifikacije uporabom protokola SSL, proširenje skupa atributa kojima se može

upravljati i operacija koje se mogu izvršiti, omogućavanje MBeanovima slanje obavijesti.

32

Literatura

[1] ORACLE: Overview of the JMX Technology,

https://docs.oracle.com/javase/tutorial/jmx/overview/index.html, studeni 2015

[2] ORACLE: Architecture of the JMX Technology,

https://docs.oracle.com/javase/tutorial/jmx/overview/architecture.html, studeni 2015

[3] ORACLE: Standard MBeans,

https://docs.oracle.com/javase/tutorial/jmx/mbeans/standard.html, studeni 2015

[4] ORACLE: Creating a Custom JMX Client,

https://docs.oracle.com/javase/tutorial/jmx/remote/custom.html, studeni 2015

[5] ANTONIĆ A., MARJANOVIĆ M., PRIPUŽIĆ K., PODNAR ŽARKO I. A Mobile Crowd

Sensing Ecosystem Enabled by CUPUS: Cloud-based Publish/Subscribe Middleware

for the Internet of Things. Sveučilište u Zagrebu, FER, 2015.

[6] SPRING: Web MVC framework, http://docs.spring.io/spring/docs/current/spring-

framework-reference/html/mvc.html, siječanj 2016

[7] ORACLE: Standards and Specifications,

https://docs.oracle.com/cd/E12461_01/130/implementation_guide/Chapter%202%20

-%20Standards%20and%20Specifications.htm, veljača 2016

33

Sažetak

Web-aplikacija za udaljeno upravljanje raspodijeljenim sustavom objavi-

pretplati

Uporabom tehnologije JMX-a moguće je jednostavno upravljati resursima kao što su

aplikacije, uređaji i usluge. Upravljanje resursima vrši se pomoću Javinih objekata znanih

kao MBeanovi koji se registriraju kod agenta JMX-a, nakon čega im se može pristupati s

udaljenih lokacija i tako upravljati resursom. U ovom je radu opisan postupak kojim se

omogućuje upravljanje sustavom CUPUS, raspodijeljenim sustavom objavi-pretplati,

uporabom tehnologije JMX-a. Kako bi se sustavom CUPUS moglo jednostavno upravljati

s udaljene lokacije, izrađena je web-aplikacija koja se povezuje s agentom JMX-a kod

kojega su registrirani MBeanovi komponenti sustava CUPUS i koja pruža sučelje za

upravljanje sustavom CUPUS.

Ključne riječi: JMX, raspodijeljeni sustav objavi-pretplati, CUPUS, web-aplikacija,

udaljeno upravljanje

34

Summary

Web Application for Remote Management of a Distributed Publish/Subscribe

System

The JMX technology provides a simple, standard way of managing resources such as

applications, devices, and services. The resources are managed by Java objects known as

MBeans which are registered with a JMX agent. They are subsequently accessible from

remote locations thus allowing the management of the resource. This paper discusses the

procedure of enabling the management of the CUPUS, a distributed publish/subscribe

system, using the JMX technology. With the aim of providing a simple way of CUPUS

remote management, it has been developed a web application which connects to JMX

agent containing registered CUPUS components MBeans, and which provides an interface

for CUPUS management.

Keywords: JMX, distributed publish/subscribe system, CUPUS, web application, remote

management

35

Kratice

JMX Java Management Extensions Javini upravljački dodatci

SNMP Simple Network Management Protocol jednostavan mrežni upravljački

protokol

HTML HyperText Markup Language prezentacijski jezik za izradu mrežnih

stranica

RMI Remote Method Invocation pozivanje udaljenih metoda

MCS Mobile Crowd Sensing suradno opažanje okoline u pokretu

SSL Secure Sockets Layer sigurnosni sloj priključaka

JSP Java Server Pages Javine stranice poslužitelja

JSTL JSP Standard Tag Library biblioteka standardnih oznaka za JSP

HTTP HyperText Transfer Protocol protokol za prijenos hipertekstualnih

datoteka

URL Uniform Resource Locator ujednačeni lokator sadržaja

URI Uniform Resource Identifier ujednačeni identifikator resursa

36

Prilog

Instalacija programske podrške

Za izgradnju i pokretanje sustava CUPUS potrebna je Javina verzija 7.0 (JDK 1.7) ili

novija te alat Maven verzije 3.0 ili novije.

Java se može preuzeti s mrežne adrese http://www.oracle.com/technetwork/java/javase/

downloads/index.html u obliku izvršnog programa koji je nakon preuzimanja potrebno

pokrenuti kako bi se obavio postupak instalacije. Nakon instalacije potrebno je postaviti

varijablu okruženja JAVA_HOME tako da pokazuje na direktorij u koji je instaliran JDK,

primjerice C:\Program Files\Java\jdk1.8.0_66.

Alat Maven može se preuzeti s mrežne adrese https://maven.apache.org/download.cgi#.

Instalacija alata Maven svodi se na raspakiravanje preuzete .zip datoteke u neki direktorij,

primjerice D:\user, čime nastane poddirektorij D:\user\apache-maven-3.3.9 (verzija 3.3.9

najnovija je u trenutku pisanja). Potrebno je još definirati varijablu okruženja M2_HOME

tako da pokazuje na vršni direktorij instalacije alata Maven što je u ovom slučaju direktorij

D:\user\apache-maven-3.3.9 te varijablu okruženja PATH tako da pokazuje na direktorij

D:\user\apache-maven-3.3.9\bin.

Za pokretanje web-aplikacije za upravljanje potrebno je instalirati neki mrežni poslužitelj,

na primjer Apache Tomcat. Mrežni poslužitelj Apache Tomcat možemo preuzeti s mrežne

adrese https://tomcat.apache.org. Preuzetu datoteku .zip raspakiramo u neki direktorij, na

primjer D:\user. U trenutku pisanja posljednja verzija mrežnoga poslužitelja Apache

Tomcat bila je 8.0.30, što znači da će potrebne datoteke biti raspakirane u direktoriju

D:\user\apache-tomcat-8.0.30.

37

Upute za korištenje programskom podrškom

Pokretanje mrežnoga poslužitelja Apache Tomcat i pristupanje web-aplikaciji za

upravljanje:

1. Datoteku WebApplication.war kopiramo u direktorij D:\user\apache-tomcat-

8.0.30\webapps

2. Otvorimo prozor naredbenog retka

3. Pozicioniramo se u direktorij D:\user\apache-tomcat-8.0.30\bin

4. Izvršimo naredbu startup.bat koja pokreće mrežni poslužitelj

5. Aplikaciji pristupamo preko nekog mrežnoga preglednika unosom mrežne adrese

http://localhost:8080/WebApplication

Komponente sustava CUPUS pokrećemo sljedećim koracima:

1. Otvorimo prozor naredbenog retka

2. Pozicioniramo se u početni direktorij u kojem se nalaze datoteke sustava CUPUS,

primjerice D:\user\CUPUS

3. Upišemo naredbu mvn package koja će izgraditi arhivu

4. Posrednika u oblaku pokrećemo naredbom: java -Dcom.sun.management

.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false

-Dcom. sun.management.jmxremote.ssl=false –jar target\StartBroker.jar

<staza_datoteke_s_konfiguracijom> CUPUS-1.0-jar-with-dependencies.jar

5. Objavljivača pokrećemo naredbom: java –jar target\StartPublisher.jar

<staza_datoteke_s_konfiguracijom> <staza_direktorija_s_objavama>

6. Pretplatnika pokrećemo naredbom: java –jar target\StartSubscriber.jar

<staza_datoteke_s_konfiguracijom > <staza_direktorija_s_pretplatama>