web-aplikacija za udaljeno upravljanje … · spring izrađena je web-aplikacija. prvo poglavlje...
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>