Professional Documents
Culture Documents
2.2.5. Slanje obavijesti korisnicima o skorom isteku roka valjanosti artikla ........ 37
Zaključak ............................................................................................................................. 40
Literatura ............................................................................................................................. 41
Sažetak ................................................................................................................................. 42
Summary.............................................................................................................................. 43
Privitak ................................................................................................................................ 44
1
1. Korištene tehnologije
1.1.1. Uvod
1.1.3. Arhitektura
2
• Jezgra Linux (Linux Kernel)
• Aplikacije (Applications)
Najniži sloj arhitekture je jezgra operacijskog sustava Linux. Operacijski sustav Android
izgrađen je na jezgri Linux 2.6. Ona pruža programsku potporu i upravlja sklopovljem
(hardware drivers) te služi kao sloj apstrakcije između sklopovlja i ostalih slojeva
programske podrške. Operacijski sustav Android koristi jezgru Linux za ostvarivanje
temeljnih funkcionalnosti sustava kao što je upravljanje memorijom, upravljanje
procesima, mrežnu komunikaciju, i drugi.
3
1.1.3.2 Programske biblioteke (Libraries)
Najviši sloj arhitekture je sloj aplikacija kojeg čini skup korisničkih aplikacija. Većina
inačica operacijskog sustava Android sadrži nekoliko osnovnih korisničkih aplikacija kao
što su Web preglednik, aplikacija za slanje tekstualnih poruka, aplikacija za upravljanje
kontaktima, i drugi.
Za pokretanje Java aplikacija operacijski sustav Android koristi virtualni stroj Dalvik.
DVM je registarski baziran virtualni stroj, a njegov međukôd (bytecode) se pomoću alata
dx transformira u *.dex (Dalvik Executable) datoteke. Takva transformacija omogućava
bolje korištenje raspoloživih resursa sustava kao što su memorija i procesorska snaga.
Svaka aplikacija se pokreće kao zasebni proces koji ima vlastitu instancu virtualnog stroja.
4
1.1.5. Životni ciklus aplikacije
Aplikacija se obično sastoji od nekoliko aktivnosti (Activities) pomoću kojih korisnik vrši
interakciju s aplikacijom. Aktivnosti se slažu u stog (back stack) obrnutim redoslijedom
prispijeća (last in, first out), s aktivnosti koja je trenutno u fokusu na vrhu stoga [3].
5
Slika 3 - Životni ciklus aktivnosti
6
Tabela 1 - Opis metoda za upravljanje životnim ciklusom aktivnosti
poziva se prilikom
onCreate() onStart()
pokretanja aplikacije
poziva se neposredno nakon
onResume()
metode onCreate() prije
onStart() ili
nego što aktivnost postane
onStop()
vidljiva korisniku
poziva se prilikom početka
interakcije s korisnikom u
onResume() onPause()
trenutku kada je aktivnost na
vrhu stoga aktivnosti
poziva se prije stavljanja
onResume()
druge aktivnosti na vrh
onPause() ili
stoga, služi osiguranju
onStop()
perzistencije podataka
poziva se kada aktivnost
više nije vidljiva korisniku
onRestart()
zbog zaustavljanja aplikacije
onStop() ili
ili zato što je neka druga
onDestroy()
aktivnost stavljena na vrh
stoga
poziva se nakon što je
aktivnost zaustavljena a
onRestart() onStart()
potrebno ju je ponovno
pokrenuti
poziva se trenutak prije
terminacije aktivnosti te
onDestroy() -
predstavlja posljednji poziv
metode u aktivnosti
Web poslužitelj Jetty je primarno HTTP poslužitelj i ovojnica oko servleta te se može
koristiti kao samostalna ili ugradbena (embedded) instanca za posluživanje statičkog ili
dinamičkog sadržaja. U implementaciji sustava myFridge poslužitelj Jetty dinamički stvara
odgovor na korisničke upite na temelju podataka dohvaćenih iz baze.
7
1.3. Sustav mySQL
8
Lokalna pohrana može značajno utjecati na poboljšanje performansi sustava i
njegovu skalabilnost.
9
1.6. Mapiranje objekata pomoću XML-a (XML data
binding)
Kako bi se objekt moglo prikazati u formatu XML (eXtended Markup Language) koristi se
mapiranje objekata pomoću XML-a. Mapiranjem objekata moguće je povezati elemente
XML sheme i atribute razreda koje želimo učitati. Proces pretvaranja objekta u XML zapis
se zove serijalizacija (marshalling) a proces pretvaranja XML zapisa u objekt se zove
deserijalizacija (unmarshalling). U sustavu myFridge u poslužiteljskoj aplikaciji je za
mapiranje objekata pomoću XML-a korišten JAXB API (Java Architecture for XML
Binding) čija je programska biblioteka sadržana u programskoj biblioteci Jersey 2.0
korištenoj za implementaciju REST-a. U klijentskoj aplikaciji korišten je Simple API s
obzirom na to da JAXB API nije kompatibilan s platformom Android.
10
2. Sustav myFridge
Korisničko ime sadrži jedino velika i mala slova, brojeve, crtice i donje crtice
(underscore)
11
Ako su uneseni korisnički podaci ispravni poziva se asinkroni zadatak „Prijava u profil“
koji priprema i šalje zahtjev HTTP GET na resurs poslužitelja zadužen za prijavu korisnika
u profil.
Nakon uspješne prijave u korisnički profil aplikacija prikazuje aktivnost „Glavni izbornik“.
U slučaju neuspješne prijave korisniku se ponovo prikazuje aktivnost „Prijava u profil“.
Dijagram toka prikazan na Slici 4 prikazuje i odjavu iz korisničkog profila pokretanjem
zadatka „Odjava iz profila“ koji terminira sve aktivnosti aplikacije te korisniku ponovo
prikazuje početnu aktivnost aplikacije „Prijava u profil“.
Host: solaris.bot.nu:8081
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 183
Server: Jetty(9.0.1.v20130408)
<user>
<notifications>true</notifications>
<username>test</username>
<eMail>test@test.com</eMail>
</user>
12
Korisnički podaci primljeni u tijelu odgovora na zahtjev za prijavu u korisnički profil se
tijekom jedne sesije korištenja aplikacije čuvaju u posebnom objektu te se pri slanju
svakog zahtjeva koriste za postavljanje autorizacijskog zaglavlja. Primljeni podaci se
koriste i za prikaz korisničkih podataka u aktivnosti „Izmjena korisničkih podataka“. Jedini
podatak koji se ne šalje klijentu je lozinka profila, s obzirom na to da se lozinka prije
perzistiranja u bazi podataka transformira kriptografskim hash algoritmom SHA1.
Korisničko ime sadrži jedino velika i mala slova, brojeve, crtice i donje crtice
(underscore)
13
U slučaju ispravnog unosa pokreće se asinkroni zadatak „Stvori novi profil“ koji priprema
i šalje zahtjev HTTP PUT na resurs poslužitelja zadužen za stvaranje novih korisničkih
profila. U slučaju odabira neispravnih korisničkih podataka ili neuspješnog stvaranja
novog korisničkog profila korisniku se ponovo prikazuje aktivnost „Stvaranje novog
profila“. U slučaju uspješnog stvaranja korisničkog profila terminiraju se sve postojeće
aktivnosti aplikacije te se korisniku prikazuje početna aktivnost aplikacije „Prijava u
profil“ s poljima za unos korisničkog imena i lozinke već ispunjenim s ranije odabranim
korisničkim podacima.
Content-Length: 145
Content-Type: application/xml
Host: solaris.bot.nu:8081
Connection: Keep-Alive
<user>
<eMail>test@test.com</eMail>
<username>test</username>
<password>123456</password>
<notifications>true</notifications>
</user>
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(9.0.1.v20130408)
14
„Očitaj linijski d“, dohvat popisa svih korisničkih artikala iz baze podataka pokretanjem
zadatka „Dohvati popis korisničkih artikala“, brisanje popisa svih korisničkih artikala iz
baze podataka pokretanjem zadatka „Obriši popis korisničkih artikala“, pregled popisa svih
korisničkih artikala pokretanjem aktivnosti „Popis korisničkih artikala“ te mogućnost
izmjene podataka korisničkog profila pokretanjem aktivnosti „Izmjena korisničkih
podataka“.
Pritiskom na tipku „Očitaj linijski kôd“ u aktivnosti „Glavni izbornik“ pokreće se zadatak
„Očitavanje kôda“ koji pomoću kamere pametnog telefona te aplikacijskog programskog
sučelja ZXing („zebra crossing“) očitava linijski kôd artikla te ga računa i vraća
pozivajućoj aktivnosti.
U slučaju ispravno očitanog linijskog kôda pokreće se zadatak „Pretraga po kôdu“ koji
priprema i šalje zahtjev HTTP GET na resurs poslužitelja zadužen za dohvat prehrambenih
artikala pohranjenih u bazi podataka. U slučaju neuspješnog dohvata artikla iz baze
15
podataka poslužitelj pokreće zadatak „Pretraga na Internetu“ koji pretražuje i parsira
podatke o artiklu te ih sprema u bazu podataka za dohvat kod narednih upita te pronađeni
artikl vraća klijentskoj aplikaciji. Na uspješno obrađeni zahtjev za dohvatom
prehrambenog artikla poslužiteljska aplikacija odgovara dohvatom i slanjem podataka o
artiklu korisniku. U slučaju uspješnog dohvata artikla klijentska aplikacija korisniku
prikazuje aktivnost „Detalji artikla“. Primjer uspješnog dohvata prehrambenog artikla dan
je u Kôdovima 5 i 6 koji prikazuju promet ostvaren protokolom HTTPS između klijentske i
poslužiteljske aplikacije.
Host: solaris.bot.nu:8081
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-Type: application/xml
Transfer-Encoding: chunked
Server: Jetty(9.0.1.v20130408)
<foodItem>
<barcode>3859889940153</barcode>
<id>1</id>
<imageLarge>R0lGODlhjwCPAPcAADswNUc4OVY7P...</imageLarge>
<imageSmall>R0lGODlhPAA8APcAAEY7PFpCPVNGR...</imageSmall>
<manufacturer>PODRAVKA d.d.</manufacturer>
16
2.1.5. Dodavanje artikla u listu korisničkih artikala
Nakon uspješnog dohvata artikla korisniku se prikazuje aktivnost „Detalji artikla“ u kojoj
korisnik može pogledati detalje korisničkog artikla:
Ime artikla
Opis artikla
Korisnik ima mogućnost dodati artikl u popis korisničkih artikala pritiskom na tipku
„Dodaj artikl“ u aktivnosti „Detalji artikla“. Pritiskom na tipku prikazuje se izbornik u
kojem je potrebno odabrati datum isteka roka valjanosti artikla te unijeti broj dana nakon
otvaranja nakon kojih je proizvod još uvijek valjan. Izvršava se lokalna provjera
zadovoljavaju li uneseni podaci zadana ograničenja:
broj dana nakon otvaranja nakon kojih je proizvod još uvijek valjan mora biti u
rasponu od 0 do 9999 dana
17
U slučaju ispravnog unosa podataka o artiklu izvršava se zadatak „Dodavanje artikla“ koji
priprema i šalje zahtjev HTTP PUT na resurs poslužitelja zadužen za pohranu podataka o
korisničkim artiklima u bazu podataka. U slučaju uspješnog zapisa korisničkog artikla u
bazu podataka korisniku se prikazuje poruka o uspjehu te mu se ponovo prikazuje
aktivnost „Glavni izbornik“. U slučaju neuspjeha aplikacija i dalje prikazuje aktivnost
„Detalji artikla“ i korisnik ima mogućnost ponovo pokušati dodati artikl u popis
korisničkih artikala.
Content-Length: 0
Host: solaris.bot.nu:8081
HTTP/1.1 200 OK
Content-Type: application/xml
Transfer-Encoding: chunked
Server: Jetty(9.0.1.v20130408)
<userFood>
<dateExpiry>2013-07-11T00:00:00+02:00</dateExpiry>
<food>
<barcode>3859889940153</barcode>
<id>1</id>
<imageLarge>R0lGODlhjwCPAPcAADswNUc4OVY7P...</imageLarge>
<imageSmall>R0lGODlhPAA8APcAAEY7PFpCPVNGR... </imageSmall>
<manufacturer>PODRAVKA d.d.</manufacturer>
</food>
18
<id>262144</id>
<validAfterOpening>3</validAfterOpening>
</userFood>
Zelena boja
ako je artikl otvoren do isteka valjanosti nakon otvaranja ima 3 dana ili više
Žuta boja
ako je artikl otvoren rok valjanosti nakon otvaranja istječe unutar 2 dana
Narančasta boja
Ime artikla
Opis artikla
19
Slika 8 - Dijagram toka koji prikazuje pregled popisa korisničkih artikala, pregled detalja
korisničkog artikla, izmjenu korisničkog artikla i kloniranje korisničkog artikla
20
Aktivnost „Detalji korisničkog artikla“ pruža mogućnost izmjene korisničkog artikla
pritiskom na tipku „Izmijeni artikl“. Pritiskom na tipku prikazuje se izbornik za unos
datuma otvaranja artikla. Izvršava se lokalna provjera zadovoljavaju li uneseni podaci
zadana ograničenja:
najmanja dopuštena vrijednost datuma otvaranja artikla je datum godinu dana manji
od današnjeg datuma
U slučaju ispravnog unosa podataka o artiklu izvršava se zadatak „Dodavanje artikla“ koji
priprema i šalje zahtjev HTTP POST na resurs poslužitelja zadužen za izmjenu podataka o
korisničkim artiklima. U slučaju uspješne izmjene korisničkog artikla korisniku se
prikazuje poruka o uspjehu te se ponovo prikazuje aktivnost „Popis korisničkih artikala“.
Datoteka u kojoj se lokalno perzistira popis svih korisničkih artikala se osvježava s novim
podacima o artiklu. U slučaju neuspjeha aplikacija i dalje prikazuje aktivnost „Detalji
korisničkog artikla“ te korisniku omogućuje ponovni pokušaj unosa datuma otvaranja.
Content-Length: 0
Host: solaris.bot.nu:8081
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(9.0.1.v20130408)
21
Postupak kloniranja korisničkog artikla jednak je postupku dodavanja artikla u popis
korisničkih artikala opisanom u aktivnosti „Detalji artikla“. Vrši se provjera ispravnosti
unesenih podataka, pokreće se zadatak „Dodavanje artikla“ te se artikl dodaje u lokalnu
datoteku koja sadrži popis korisničkih artikala. Nakon uspješnog kloniranja artikla
korisniku se ponovo prikazuje aktivnost „Popis korisničkih artikala“ koji u sebi sadrži i
upravo dodani korisnički artikl.
Odabirom opcije „Obriši artikl“ pokreće se zadatak „Obriši artikl“ koji priprema i šalje
zahtjev HTTP DELETE na resurs poslužitelja zadužen za brisanje korisničkih artikala. U
slučaju uspješnog brisanja korisničkog artikla korisniku se prikazuje poruka o uspjehu te se
artikl uklanja iz lokalne datoteke koja perzistira korisničke artikle, a popis korisničkih
artikala se osvježava s izmijenjenim popisom korisničkih artikala.
22
Primjer uspješnog brisanja korisničkog artikla dan je u Kôdovima 11 i 12 koji prikazuju
promet ostvaren protokolom HTTPS između klijentske i poslužiteljske aplikacije.
Host: solaris.bot.nu:8081
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(9.0.1.v20130408)
Kroz aktivnost „Glavni izbornik“ moguće je obrisati popis svih korisničkih artikala. Ovaj
postupak briše lokalnu datoteku s korisničkim artiklima i perzistenciju korisničkih artikala
u bazi podataka. Postupak je nepovratan, na što se korisnika upozori porukom kod pritiska
tipke „Obriši sve artikle“.
Odabirom opcije „Obriši sve artikle“ i potvrdom odabira pokreće se zadatak „Obriši sve
artikle“ koji priprema i šalje zahtjev HTTP DELETE na resurs poslužitelja zadužen za
brisanje svih korisničkih artikala. Nakon izvršavanja zadatka „Obriši sve artikle“ korisniku
se ponovo prikazuje aktivnost „Glavni izbornik“. Primjer uspješnog brisanja svih
23
korisničkih artikala dan je u Kôdovima 13 i 14 koji prikazuju promet ostvaren protokolom
HTTPS između klijentske i poslužiteljske aplikacije.
Host: solaris.bot.nu:8081
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(9.0.1.v20130408)
Aktivnost „Glavni izbornik“ nudi i mogućnost dohvata svih korisničkih artikala iz baze
podataka. Odabirom tipke „Dohvati sve artikle“ pokreće se zadatak „Dohvati sve artikle“
koji dohvaća koji priprema i šalje zahtjev HTTP GET na resurs poslužitelja zadužen za
dohvat svih korisničkih artikala iz baze podataka. U slučaju uspješnog dohvata osvježava
se lokalna datoteka s korisničkim artiklima te se korisniku nudi pregled popisa svih
artikala. Pri odabiru pregleda popisa artikala korisniku se prikazuje aktivnost „Popis
korisničkih artikala“.
24
Slika 11 - Dijagram toka dohvata svih korisničkih artikala
Host: solaris.bot.nu:8081
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-Type: application/xml
Transfer-Encoding: chunked
Server: Jetty(9.0.1.v20130408)
25
<userFoods>
<userFood>
<dateExpiry>2013-06-11T00:00:00+02:00</dateExpiry>
<food>
<barcode>3859889940153</barcode>
<id>1</id>
<imageLarge>R0lGODlhjwCPAPcAADswNUc4OVY7P...</imageLarge>
<imageSmall>R0lGODlhPAA8APcAAEY7PFpCPVNGR...</imageSmall>
<manufacturer>PODRAVKA d.d.</manufacturer>
</food>
<id>262145</id>
<validAfterOpening>3</validAfterOpening>
</userFood>
<userFood>
<dateExpiry>2013-06-11T00:00:00+02:00</dateExpiry>
<food>
<barcode>3850104073724</barcode>
<id>32768</id>
<imageLarge>R0lGODlhjwCPAPcAABwZLhcYODMbK...</imageLarge>
<imageSmall>R0lGODlhPAA8APcAABobOxUWNi8cM...</imageSmall>
<manufacturer>PODRAVKA d.d.</manufacturer>
</food>
<id>262146</id>
<validAfterOpening>3</validAfterOpening>
</userFood>
<userFood>
<dateExpiry>2013-05-11T00:00:00+02:00</dateExpiry>
<food>
<barcode>5997381317672</barcode>
<id>32769</id>
<imageLarge>Ap90wp066DcMADL4ADMAQDL1wCEqA...</imageLarge>
26
<imageSmall>R0lGODlhPAA8APcAAGs1N2w3OXQ5O...</imageSmall>
</food>
<id>262147</id>
<validAfterOpening>3</validAfterOpening>
</userFood>
</userFoods>
Posljednja opcija koju aktivnost „Glavni izbornik“ nudi je izmjena podataka korisničkog
profila. Pritiskom na tipku „Izmijeni korisničke podatke“ pokreće se aktivnost „Izmjena
korisničkih podataka“. Aktivnost „Izmjena korisničkih podataka“ nudi opcije izmjene i
brisanja korisničkog profila. Nakon unosa izmijenjenih korisničkih podataka korisnik
pritiskom na tipku „Izmjena korisničkog profila“ pokreće provjeru ispravnosti unosa.
Jednako kao i kod stvaranja novog korisničkog profila unos mora zadovoljiti zadana
ograničenja:
Korisničko ime sadrži jedino velika i mala slova, brojeve, crtice i donje crtice
(underscore)
U slučaju ispravnog unosa pokreće se zadatak „Izmjena profila“ koji priprema i šalje
zahtjev HTTP POST na resurs poslužitelja zadužen za izmjenu korisničkih podataka.
27
Slika 12 - Dijagram toka izmjene podataka korisničkog profila i brisanja korisničkog profila
U slučaju uspješne izmjene korisnički podaci se osvježavaju u lokalnoj datoteci koja sadrži
podatke o korisniku i korisniku se prikazuje aktivnost „Glavni izbornik“. U slučaju
neuspješne izmjene korisničkih podataka korisniku se ponovo prikazuje aktivnost „Izmjena
korisničkih podataka“.
Content-Length: 146
Content-Type: application/xml
Host: solaris.bot.nu:8081
Connection: Keep-Alive
28
<user>
<eMail>test@test.com</eMail>
<username>test</username>
<password>1234567</password>
<notifications>true</notifications>
</user>
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(9.0.1.v20130408)
Host: solaris.bot.nu:8081
Connection: Keep-Alive
29
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(9.0.1.v20130408)
Nakon ispravnog unosa podaci se zapisuju u internu datoteku klijenta te koriste za svaku
daljnju komunikaciju s poslužiteljem.
Relacijska shema baze podataka sustava myFridge sastoji se od tablice user za pohranu
korisničkih podataka, tablice food za pohranu podataka o prehrambenim artiklima te
tablice userFood za pohranu podataka o korisničkim artiklima.
Svaki zapis u tablici userFood odgovara točno jednom zapisu u tablici food (relacija 1..1) i
točno jednom zapisu u tablici user (relacija 1..1). Zapisi u tablicama user i food odgovaraju
nula ili više zapisa u tablici userFood (relacija 0..N). Korisnici mogu imati nula ili više
korisničkih artikala, a prehrambeni artikli se mogu pojaviti nula ili više puta u tablici
30
korisničkih artikala. Brisanje korisničkog profila uzrokuje kaskadu brisanja zapisa u tablici
userFood vezanih uz obrisani korisnički profil. Brisanje prehrambenog artikla iz tablice
food nije omogućeno pošto se ti zapisi trajno perzistiraju i koriste pri dodavanju novih
korisničkih artikala.
username - korisničko ime profila, mora biti jedinstveno te ne smije biti null
vrijednost
barcode - linijski kôd prehrambenog artikla, mora biti jedinstven te ne smije biti
null vrijednost
31
Tablica userFood sadrži podatke o korisničkim prehrambenim artiklima:
date_expiry - datum isteka roka valjanosti korisničkog artikla, ne smije biti null
vrijednost
valid_after_opening - broj dana nakon otvaranja artikla tijekom kojih je artikl još
uvijek valjan, ne smije biti null vrijednost
32
Slika 13 - Model baze podataka
Sloj DAO je sloj programske podrške koji omogućuje pristup podacima pohranjenim u
bazi podataka te služi razdvajanju sloja perzistencije od sloja poslovne logike. Na Slici 14
prikazan je dijagram razreda sloja DAO.
33
Slika 14 - Dijagram razreda sloja DAO
34
sučelja IFoodDAO, IUserDAO te IUserFoodDAO koja nasljeđuju generičko
sučelje IGenericDAO te dodatno sadrže prototipove metoda specifičnih za tipove
entiteta (food, user, userFood) pohranjene u bazi podataka
Upravitelji resursima poslužitelja služe kao posrednički sloj između sloja DAO te resursa
poslužitelja. Pozivaju metode razreda FoodDAOImpl, UserDAOImpl i UserFoodDAOImpl
te rezultate metoda predaju resursima poslužitelja.
Svaki od resursa odgovara na jednu ili više metoda HTTP te može biti dodatno
parametriziran s podacima (parametri su prikazani vitičastim zagradama):
35
/MyFridgeServer/user/register - put do resursa poslužitelja koji obrađuje zahtjeve
HTTP PUT za registracijom novih korisničkih profila. Zahtjevi za registracijom se
šalju na zasebni put zato što se radi o jedinoj vrsti zahtjeva koji ne prolaze kroz
filter za autentikaciju korisnika te u tijelu zahtjeva HTTP sadrže korisničke podatke
nužne za uspješnu registraciju
/MyFridgeServer/userFood/{barcode}/{expiryDate}/{validAfterOpening} - put
do resursa poslužitelja koji obrađuje zahtjeve HTTP PUT za stvaranjem novih
korisničkih prehrambenih artikala. Ispravan zahtjev je parametriziran s linijskim
kôdom prehrambenog artikla, datumom isteka valjanosti artikla te brojem dana
nakon otvaranja tijekom kojih je artikl još uvijek ispravan
36
Slika 15 - Primjer obrade zahtjeva klijenta
Na Slici 15 dan je općeniti primjer obrade zahtjeva klijenta. Klijentski zahtjev stiže na
resurs poslužitelja, resurs poziva odgovarajuću metodu upravitelja, koji poziva metodu
sloja DAO za dohvat podataka iz baze. Sloj DAO šalje upit prema bazi podataka i dohvaća
podatke koje prosljeđuje upravitelju. Upravitelj rezultat upita prosljeđuje resursu, koji
stvara i šalje odgovor na klijentski zahtjev. Iznimka od primjera danog na Slici 15 je
klijentski zahtjev za podacima o očitanom linijskom kôdu koji se ne nalazi u bazi
podataka. U tom slučaju upravitelj resursom poslužitelja zaduženom za dohvat podataka o
prehrambenim artiklima pretražuje Web sjedište Konzum internet prodavaonice
(http://online.konzum.hr) za podacima o traženom prehrambenom artiklu te u slučaju
uspješnog dohvata podatke zapisuje u bazu kako ne bi morao pretraživati Web sjedište za
svaki korisnički upit.
Kako bi se omogućilo slanje obavijesti korisnicima o skorom isteku roka valjanosti artikala
otvoren je korisnički profil na servisu za elektroničku poštu Gmail s adresom
myfridge.server@gmail.com. Poslužitelj svakih 30 minuta pokreće zadatak za slanje
obavijesti korisnicima koji iz baze podataka dohvaća listu korisničkih artikala za koje još
nije poslana obavijest, a čiji su korisnici u svom profilu naznačili da žele primati obavijesti.
Zadatak iterira kroz listu korisničkih artikala i pronalazi one artikle kojima uskoro istječe
rok trajanja pomoću algoritma opisanog dijagramom toka na Slici 16.
37
Slika 16 - Dijagram toka algoritma za slanje obavijesti o isteku roka valjanosti korisničkog artikla
Posljednji korak algoritma je provjera je li datum isteka roka valjanosti za 3 dana ili manje
te ako je šalje se obavijest korisniku o skorom isteku roka valjanosti artikla. Obavijest se
šalje e-poštom s adrese myfridge.server@gmail.com na adresu e-pošte navedenu pri
stvaranju korisničkog profila. Primjer obavijesti dan je na Slici 17.
Slika 17 - Primjer obavijesti poslane korisniku o skorom isteku roka trajanja korisničkog artikla
38
2.2.6. Sigurnosne značajke poslužiteljske aplikacije
Protokol HTTPS
Autentikacijski filter
Svi korisnički zahtjevi prolaze kroz autentikacijski filter, koji iz zahtjeva dohvaća
autorizacijsko zaglavlje (Authorization Header) te analizira njegov sadržaj. Unutar
autorizacijskog zaglavlja zahtjeva nalazi se zaglavlje BASIC, koje sadrži korisničko ime i
lozinku u obliku „ime:lozinka“ kodiranom u Base64 zapis. Sadržaj zaglavlja BASIC se
autenticira naspram korisničkih podataka pohranjenih u bazi, čime se onemogućuje
neautorizirani pristup i modifikacija korisničkog profila i korisničkih artikala. Jedini
poslužiteljski resurs za kojeg nije potrebna autentikacija je resurs za stvaranje novih
korisničkih profila.
39
Zaključak
Sunčana Parać
_________________
40
Literatura
[1] Top Five Smartphone Operating Systems, Shipments, and Market Share, 1Q, 2013.,
http://www.idc.com/getdoc.jsp?containerId=prUS24108913, 17.06.2013.
[2] Android Architecture, 2011., http://elinux.org/Android_Architecture, 16.06.2013.
[3] Tasks and Back Stack, (n.d.), http://developer.android.com/guide/components/tasks-
and-back-stack.html, 18.06.2013.
[4] Representational state transfer, 2013.,
http://en.wikipedia.org/wiki/Representational_state_transfer, 13.06.2013.
41
Sažetak
Sustav myFridge razvijen u sklopu ovog rada služi praćenju sadržaja hladnjaka te
obavještavanju korisnika o isteku valjanosti pojedinih artikala. Tijekom izrade rada
naglasak je bio na raspodijeljenosti sustava i fleksibilnoj arhitekturi temeljenoj na
suvremenim tehnologijama. Razvijeni sustav pruža mogućnost jednostavne nadogradnje s
novim funkcionalnostima i programskom podrškom za klijentske uređaje s drugim
operacijskim sustavima.
Rad kroz nekoliko poglavlja opisuje razvoj sustava, njegove karakteristike, primjenu te
način korištenja. U prvom poglavlju opisane su tehnologije korištene kod implementacije
sustava, u drugom poglavlju opisana je implementacija klijentske aplikacije za uređaje s
operacijskim sustavom Android, u trećem poglavlju opisana je implementacija udaljenog
poslužitelja, model baze podataka sustava te sigurnosne značajke sustava.
Ključne riječi: Android, praćenje sadržaja hladnjaka, REST, očitanje linijskog kôda,
myFridge
42
Summary
The system developed as part of this thesis enables users to keep track of food items and
notifies them of impending food expiration dates. MyFridge is a distributed system based
on a flexible architecture, which allows for simple system upgrade with new functionalities
and new client applications for devices running on different operating systems.
The thesis describes development of the myFridge system, its characteristics and its
purpose. The first chapter describes the technologies utilised in system development, the
second chapter describes the client application, and the third chapter describes the server
application, including the database model and the system's security aspects.
43
Privitak
<property name="connection.url">jdbc:mysql://localhost:3306/my_fridge
</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>
44
Upute za instalaciju klijentske aplikacije
pokretanje datoteke
45