Izrada Web aplikacije korišćenjem JSF - a i Hibernate - a

March 15, 2018 | Author: Damir Galas | Category: N/A
Share Embed Donate


Short Description

Download Izrada Web aplikacije korišćenjem JSF - a i Hibernate - a...

Description

UNIVERZITET U NOVOM SADU ˇ PRIRODNO-MATEMATICKI FAKULTET DEPARTMAN ZA MATEMATIKU I INFORMATIKU

Damir Galas

Web aplikacija za izbor teme diplomskog rada

Diplomski rad

Novi Sad, 2011

UNIVERZITET U NOVOM SADU ˇ PRIRODNO-MATEMATICKI FAKULTET DEPARTMAN ZA MATEMATIKU I INFORMATIKU

Damir Galas

Web aplikacija za izbor teme diplomskog rada

Diplomski rad

Novi Sad, 2011

Predgovor Tema diplomskog rada je Web aplikacija za izbor teme diplomskog rada. U radu je dat postupak razvoja, poˇcev od modeliranja pa do samog postupka implementacije. Najˇceˇs´ce koriˇs´ceni koncepti bi´ce prikazani preko ilustrativnih primera. Kada se govori o razvoju web aplikacija u Java programskog jeziku, kao tehnologije ˇcesto se izdvajaju Java Server Faces i Hibernate. Java Server Faces (JSF) je framework za izradu web aplikacija okrenut ka komponentama korisniˇckog interfejsa, dok Hibernate nudi servise za perzistenciju i rad sa bazom podataka. To su upravo tehnologije koje su odabrane za razvoj ove aplikacije i njihove prednosti ´ce biti istaknute u ovom radu. Izbor odgovaraju´cih arhitektura za izradu aplikacije je od presudnog znaˇcaja za njihovo odrˇzavanje i unapred¯ivanje. Ukoliko se odgovornosti i funkcije jasno rasporede med¯u slojevima, tako da slojevi dobro sarad¯uju, a da ipak budu tehniˇcki nezavisni, aplikacija ´ce lako mo´ci da se proˇsiri novim fukcionalnostima, unapredi zamenom tehnologija, prilagodi drugim bazama podataka i lako odrˇzava. Rad sadrˇzi pet poglavlja: 1.

Uvod

2.

Modeliranje sistema

3.

Implementacija

4.

Prikaz rada aplikacije

5.

Zakljuˇ cak

U prvom poglavlju je opisana motivacija za razvoj ove aplikacije kao i kratak pregled koriˇs´cenih tehnologija i alata. U drugom poglavlju je opisano modeliranje sistema za izbor teme diplomskog rada. Funkcionalni zahtevi sistema opisani su sluˇcajevima koriˇs´cenja a statiˇcki model sistema preko dijagrama klasa.

U tre´ cem poglavlju data je ˇsema baze podataka web aplikacije, opisan je rad sa Hibernate perzistentnim klasama i implementacija korisniˇckog interfejsa koriˇs´cenjem Java Server Faces tehnologije. Uˇ cetvrtom poglavlju je dat prikaz rada aplikacije. Na kraju je dat zakljuˇ cak rada i mogu´cnosti daljeg razvoja aplikacije. Da bi ovaj rad bio u vaˇsim rukama zasluˇzno je viˇse osoba. Na samom poˇcetku ˇzelim da zahvalim Bojani Dimi´c-Surla, jer mi je pruˇzila priliku da napiˇsem ovaj rad pod njenim mentorstvom i strpljivo mi davala savete prilikom njegove izrade. Zahvalnost dugujem i profesorima, ˇclanovima komisije, dr Miloˇsu Rackovi´cu i dr Draganu Ivanovi´cu, bez ˇcijih saveta ovaj rad takod¯e ne bi bio u vaˇsim rukama. Prijatelj i kolega Daniel Jankovi´c je svakom svojom kritikom pove´cavao kvalitet svega ˇsto sam uradio dok zasluge za pravopis pripadaju prijateljici i koleginici Dragani Mandi´c. Na samom kraju ali po znaˇcaju daleko ispred svega zahvalnost dugujem svojim roditeljima, Janu i Mariji Galas, koji su nezaobilazni faktor ˇcitavog mog ˇskolovanja. Novi Sad 2011

Galas Damir

Sadrˇ zaj Predgovor Uvod 1.1. Motivacija . . . . . . . . 1.2. Softversko okruˇzenje . . 1.2.1. MySQL . . . . . 1.2.2. Hibernate . . . . 1.2.3. Java Server Faces 1.2.4. Eclipse . . . . . . 1.2.5. CSS . . . . . . .

i

. . . . . . .

1 1 2 2 2 3 4 4

Modeliranje sistema 2.1. Use Case dijagram . . . . . . . . . . . . . . . . . . . . . . . 2.2. Class dijagram . . . . . . . . . . . . . . . . . . . . . . . . .

5 5 7

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Implementacija ˇ 3.1. Sema baze podataka . . . . . . . . . . . . . . . . . . 3.2. Perzistentne klase . . . . . . . . . . . . . . . . . . . . 3.2.1. Mapiranje perzistentnih klasa . . . . . . . . . 3.2.2. Rad sa objektima . . . . . . . . . . . . . . . . 3.2.3. Skladiˇstenje perzistentnih klasa . . . . . . . . 3.2.4. Pravljenje upita pomo´cu HQL-a . . . . . . . 3.3. JSF tehnologija . . . . . . . . . . . . . . . . . . . . . 3.3.1. Konfigurisanje faces-config.xml fajl - a . . . . 3.3.2. Implementacija konvertera . . . . . . . . . . . 3.3.3. Rad sa komponentama korisniˇckog interfejsa 3.4. Primer DataTable . . . . . . . . . . . . . . . . . . . 3.5. Stilovi i rad sa CSS-om . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . . . . . . .

. . . . . . .

. . . . . . . . . . . .

. . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

9 9 10 10 13 13 15 15 16 19 21 25 29

Prikaz rada aplikacije

31

Zakljuˇ cak

35

Biografija

37

Kljuˇ cna dokumentacijska informacija

39

Key words documentation

41

Poglavlje 1

Uvod Tema diplomskog rada pripada oblasti razvoja obrazovnih informacionih sistema. Jedan od znaˇcajnih delova obrazovnog procesa na univerzitetu je izrada zavrˇsnog diplomskog ili master rada. Radovi se piˇsu na temu koju predlaˇze nastavnik. Student bira temu i poˇcinje sa radom pri ˇcemu je u stalnom kontaktu sa nastavnikom.

1.1.

Motivacija

Cilj diplomskog rada je da se kreira web aplikacija za izbor teme diplomskog rada preko koje bi profesori mogli da predlaˇzu teme za master i diplomske radove, a studenti da pregledaju predloˇzene teme i da se prijave za izradu teme. Takod¯e postoji mogu´cnost komunikacije preko poruka. Postojanje ovakvog sistema omogu´cilo bi studentima da pregledaju sveukupno dostupne teme preko interneta i da izaberu odgovaraju´cu temu. Pored toga, jedan deo komunikacije izmed¯u studenta i profesora podrˇzan je u aplikaciji i realizovan putem poruka. Na ovaj naˇcin student moˇze da dobije bliˇze informacije o nekoj temi ili da se u toku rada konsultuje sa mentorom. Koriˇs´cenje web aplikacija koja je tema ovog diplomskog rada omogu´cava profesorima efikasniji rad sa studentima i smanjuje vreme potrebno za liˇcni kontak. Iako samu liˇcnu komunikaciju student - mentor nije mogu´ce u potpunosti izbaciti, neke radnje se mogu automaizovati i mogu tu komunikaciju olakˇsati. Za izradu aplikacije koriˇs´ceni su savremeni open-source alati za razvoj web aplikacija u Java[1,2] okruˇzenju. Srednji sloj aplikacije radi na Apache Tomcat Web serveru[3]. Implementacija perzistencije podataka realizovana je koriˇs´cenjem paketa Hinernate[4], a podaci se skladiˇste u MySQL bazu podataka[5]. Za implementaciju korisnickog interfejsa aplikacije koriˇs´cena je Java Server Faces (JSF)[6] tehnologija, HTML[7] i CSS[8].

2

1.2.

UVOD

Softversko okruˇ zenje

Za svaki sloj viˇseslojne arhitekture koristi se viˇse tehnologija i puno razliˇcitih alata. U ovom poglavlju opisane su najznaˇcajnije med¯u njima, koje su koriˇs´cene u razvoju aplikacije za izbor diplomskih radova. 1.2.1.

MySQL

MySQL je besplatan open source sistem za upravljanje bazom podataka[5]. MySQL je ˇcest izbor baze za projekte otvorenog koda, te se distribuira kao sastavni deo serverskih Linux distribucija, no takod¯e postoje varijante i za ostale operativne sisteme poput Mac - a, Windows - a itd. MySQL baza je slobodna za ve´cinu upotreba. MySQL baze su relacionog tipa, koji se pokazao kao najbolji naˇcin skladiˇstenja i pretraˇzivanja velikih koliˇcina podataka i u suˇstini predstavljaju osnovu svakog informacijonog sistema, tj. temelj svakog poslovnog subjekta koji svoje poslovanje bazira na dostupnosti kvalitetnih i brzih informacija. Relacione baze podataka - Kada govorimo o bazama podataka najˇceˇs´ce podrazumevamo da se radi o relacionim bazama podataka. Postale su najpopularnije pre svega zbog svoje jednostavnosti i robusnosti. One nisu vezane ni za jedan programski jeziki ili bilo koju tehnologiju ˇsto jeste njihova velika prednost. Relaciona baza podataka radi sa tabelama za reprezentaciju podataka. Svaka tabela sadrˇzi skup kolona i svaka kolona ima svoje ime. Za ovaj model je razvijen deklarativni jezik SQL. SQL - Najˇceˇs´ce koriˇs´cen upitni jezik koji koristi logiku relacione algebre. SQL je ipak mnogo viˇse od toga, u njemu je mogu´ce definisati strukturu podataka u bazi, modifikovati podatke, brisati podatke, unositi nove itd. 1.2.2.

Hibernate

Hibernate je open source implementacija objektno relacionog mapiranja (ORM)[4]. Hibernate je jako uspeˇsan projekat koji teˇzi da postane kompletno reˇsenje za problem upravljanja perzistentnim podacima u Javi[9]. On posreduje u interakciji aplikacije i relacione baze podataka, omogu´cavaju´ci programeru da se koncentriˇse na problem reˇsavanja poslovne logike. API koji koristi je potpuno prirodan, kao i interfejs upita (query interfaces) i upitni jezik (query language). Perzistencija objekata znaˇci da pojedinaˇcni objekti mogu nadˇziveti proces aplikacije u kojoj su nastali. Oni se mogu ˇcuvati u bazi podataka i po-

1.2.

Softversko okruˇzenje

3

novo kreirati u nekom trenutku. Perzistencija u Javi skoro uvek predstavlja ˇcuvanje podataka u relacionoj bazi, uz koriˇs´cenje SQL-a. Kao logiˇcno pitanje name´ce se zaˇsto u upotrebi nisu objektno - orjentisane baze podataka, med¯utim iz mnogih razloga one nisu nikad ni zaˇzivele u praksi. Relacione baze podataka dominiraju danaˇsnjom kompjuterskom industrijom i zbog prednosti koje su ve´c navedene skoro uvek predstavljaju uslov za razvoj projekta u Javi. Hibernate obezbed¯uje perzistenciju objekata za vreme izvrˇsavanja programa. Za svaku perzistentnu klasu potrebno je napraviti XML dokument za mapiranje. Ovaj dokument se analizira prilikom pokretanja aplikacije i obezbed¯uje radnom okruˇzenju neophodne informacije o klasi[10,11]. 1.2.3.

Java Server Faces

Java Server Faces(JSF) je standardizovana tehnologija za pravljanje korisniˇckog interfejsa web aplikacija[12]. Ranije su korisniˇcki interfejsi web aplikacija kreirani kao HTML korisniˇcki interfejsi koriˇs´cenjem servleta i JSP-a. Ipak problem HTML-a je ˇsto je previˇse siromaˇsan, pa pravljenje sloˇzenijih web aplikacija postaje komplikovano i jako produˇzava vreme razvoja softvera. Java Server Faces je tehnologija za razvoj web aplikacija sa sloˇzenim korisniˇckim interfejsima koji se izvrˇsavaju na serveru. Korisniˇcki interfejs se izvrˇsava na serveru i odgovara na sve dogad¯aje koje generiˇse klijent. Poslovna logika je razdvojena od perzistencije i zbog toga JSF predstavlja potpuno novi sloj razvoja. Osnovni elementi JSF tehnologije je API (aplikativni interfejs jsf-api.jar) sluˇzi za: • predstavljanje koponenti • upravljanje stanjem komponenti • obradu dogad¯aja • validaciju i konverziju • inicijalizaciju Korisniˇcki interfejs koji se kreira JSF tehnologijom izvrˇsava se na serveru, a sadrˇzaj se prikazuje na klijentu. Tipiˇcna JSF aplikacija sastoji se od slede´cih elemenata:

4

UVOD • skupa JSP strana koje se koriste za prezentaciju. • skupa backing binova odnosno Java Bean komponenti koje definiˇsu svojstva i funkcije UI komponenti na stranici. • Konfiguracioni fajl za aplikaciju koji definiˇse pravila navigacije i sluˇzi za konfiguraciju binova.

1.2.4.

Eclipse

Eclipse je popularno, besplatno i open source integrisano razvojno okruˇzenje za Javu, pisano je ve´cinom u Java programskom jeziku[13]. Namenjen je Java programerima, ali postoje verzije i za druge jezike. Ima izuzetno razvijene Java alate. Korisnici mogu proˇsirivati njegove mogu´cnosti instaliranjem raznih dodataka, mogu pisati i sopstvena proˇsirenja. Dostupni su i jeziˇcki paketi koji prevode Eclipse na viˇse desetina svetskih jezika. Jedna od velikih prednosti Eclipse, koja se ˇcesto istiˇce jeste mogu´cnost rada na razliˇcitim operativnim sistemima. 1.2.5.

CSS

CSS (eng. Cascading Style Sheets) je jezik formatiranja pomo´cu kojeg se definiˇse izgled elemenata web stranice[8]. Prvobitno HTML je sluˇzio za definisanje ˇcitavog izgleda, strukture i sadrˇzaja web stranice, ali od verzije HTML 4.0 je uveden CSS koji bi definisao konkretan izgled, dok je HTML ostao u funkciji definisanja strukture i sadrˇzaja[7]. CSS sintaksa se sastoji od opisa izgleda elemenata u dokumentu. Opis moˇze da definiˇse izgled viˇse elemenata i viˇse opisa moˇze da definiˇse jedan element. Na taj naˇcin se opisi slaˇzu jedan preko drugog da bi definisali konaˇcan izgled odred¯enog elementa. Svaki opis se sastoji od tri elementa: definicija ciljnih elemenata, svojstva i vrednosti. Nakon definisanja ciljnih elemenata, odnosno elemenata na koje se opis odnosi, nizom parova svojstvo - vrednosti definiˇse se izgled svakog ciljnog elementa. CSS u JSF-u - Ako web stranica ima jedinstvene stilove, oni se mogu definisati u zaglavlju koriˇs´cenjem taga style. Takod¯e mogu´ce je definisati stil za pojedinaˇcnu JSF komponentu koriste´ci istoimeni style atribut u komponenti. U ve´cini sluˇcajeva se ipak koristi poseban CSS fajl u kojem su navedeni stilovi koje je mogu´ce ubaciti u viˇse stranica.

Poglavlje 2

Modeliranje sistema U ovom poglavlju opisan je model sistema za administraciju tema master i diplomskih radova. Model je dat preko UML 2.0 dijagrama. Funkcionalni zahtevi sistema opisani su preko dijagrama sluˇcajeva koriˇs´cenja, a statiˇcki model sistema dat je preko dijagrama klasa. Za modeliranje koriˇs´cen je alat Power Designer[14]. To je alat za modeliranje, dizajniranje, i opsivanje objektno - orjentisanih sistema i aplikacija pomo´cu UML-a (Unified Modeling Language)[15]. UML sluˇzi kao jezik za specifikaciju, vizuelno predstavljanje, konstrukciju i dokumentovanje elemenata softverskih sistema. Ovaj jezik je nastao sredinom 90-tih. Analizom koncepata obuhva´cenih objektno - orjentisanim metodama doˇslo se do skupa modela i elemenata modela koji se koriste pri analizi, projektovanju i dokumentovanju elemenata sistema[16].

2.1.

Use Case dijagram

Prva faza razvoja sistema jeste definisanje zahteva koji mogu biti predstavljeni dijagramom sluˇcajeva koriˇs´cenja. Na slici 2.1 prikazan je dijagram sluˇcajeva koriˇs´cenja sistema za izbor teme diplomskog rada. Na dijagramu su prikazana dva uˇcesnika, a to su profesor i student. Profesor je povezan sa sluˇcajem koriˇs´cenja Prijavljivanje Profesora, na kojem se profesor prijavljuje na sistem tako ˇsto unosi e-mail adresu i lozinku. Sistem proverava validnost unetih podataka i ako je sve u redu, profesor je uspeˇsno prijavljen na sistem. Ukolko profesor prvi put koristi ovaj siˇ je realizovano sluˇcajem stem, neophodno je da se pre toga registruje. Sto koriˇs´cenja Registracija Profesora. Analogno svemu navedenom student je uˇcesnik koji se prijavljuje na sistem tako ˇsto unosi broj indeksa i lozinku. O tome brine sluˇcaj koriˇs´cenja Prijavljivanje Studenta. Dok o funkciji registracije brine sluˇcaj koriˇs´cenja Registracija Studenta. Nakon prijavljivanja profesor ima viˇse mogu´cnosti. Jedna od njih je predstavljena sluˇcajem koriˇs´cenja Predlog Tema, gde profesor ima mogu´cnost predlaganja neke teme navode´ci naslov teme, opis, oblast. Joˇs jedna mogu´cnost, koja se pruˇza, prikazana je sluˇcajem koriˇs´cenja Pregled naloga. Ovde se nalaze informacije o prijavljenom uˇcesniku, kao i mogu´cnost promene lozinke ukoliko uˇcesnik to ˇzeli. Tre´ca mogu´cnost je da profesor pregleda teme koje su ve´c punud¯ene i to je prikazano sluˇcajem koriˇs´cenja Pregled

6

MODELIRANJE SISTEMA

tema. Teme mogu da se pregledaju sveukupno ili po odred¯enim oblastima. Student takod¯e pregleda teme s tom razlikom ˇsto se njemu pruˇza jedna dodatna mogu´cnost, a to je da odabere temu, naravno samo pod uslovom da to ve´c predhodno nije uradio. Isto tako ima mogu´cnost pregledanja naloga. Studentu nije data mogu´cnost predlaganja teme, ali mu se pruˇza nova mogu´cnost, a to je da pregleda odabranu temu prate´ci sve informacije o njoj, ili eventualno moˇze da odustane od iste. To sve je na slici predstavljeno sluˇcajem koriˇs´cenja Pregled odabrane teme.

Slika 2.1: Use Case dijagram Slanje poruka je sluˇcaj koriˇs´cenja kojem mogu da pristupe oba uˇcesnika. Iz skupa svih uˇcesnika se bira jedan kome se ˇsalje poruka. Kada se poruka poˇsalje, njena sadrˇzina se prikazuje u tabeli poslatih poruka ˇsto je posebni sluˇcaj koriˇs´cenja definisano imenom Pregled poslatih poruka. Profesor moˇze slati poruke studentima i student moˇze da ˇsalje poruke profesorima, dok

2.2.

Class dijagram

7

slanje poruka izmed¯u uˇcesnika iste vrste nije mogu´ce. Kada uˇcesnik primi poruku, ona se prikazuje u tabeli primljenih poruka. Primljene poruke su na slici prikazane sluˇcajem koriˇs´cenja Pregled primljenih poruka.

2.2.

Class dijagram

MVC (skra´ceno od Model-View-Controller) je arhitekturni obrazac koji organizuje aplikaciju u tri dela. Jedan deo sluˇzi kao aplikacioni model sa prikazom podataka, drugi za perzistenciju podataka dok tre´ci sluˇzi za prosled¯ivanje, zahteve i kontrolu toka. Ovakva arhitektura se koristi za razvoj aplikacije sa grafiˇckim interfejsom. Model je nosilac informacija i sadrˇzi perzistentne objekte, View je vizuelna prezentacija podataka najˇceˇs´ce na ekranskoj formi, Controller vodi raˇcuna o funkcionalnosti sistema. I to je upravo pristup koji je koriˇs´cen kod implementacije aplikacije u ovom diplomskom. Na slici 2.2 prikazan je dijagram klasa aplikacije za izbor teme diplomskog rada. Ovaj dijagram sadrˇzi ˇcetiri klase entiteta: Profesor, Student, Tema i Poruka. Svaka od tih klasa sadrˇzi atribute osnovnih podataka za upravljanje i skladiˇstenje. Npr. klasa Student sadrˇzi atribute ime, prezime, email, brojtelefona i brojindeksa. Postoje tri kontrolera: ControlerTema, ControlerRegistracija i ControlerPoruka. Glavni zadatak prvog kontrolera je da vrˇsi komunikaciju izmed¯u predloˇzenih tema i ekranskih formi, drugi kontroler se bavi registracijom uˇcesnika, a uloga tre´ceg kontrolera jeste slanje poruka, primanje poruka, njihovo skladiˇstenje itd. Ekranske forme, koje su ovde predstavljene kao view klase, su: PredlogTemaView, PrikazTemaView, RegistracijaView, PrijavaView, PrikazPorukaView i SlanjePorukaView. Njihovi nazivi su priliˇcno intuitivni, a uloga im je da prikazuju rezultate na ekranskoj formi u zavisnosti od toga da li uˇcesnik ˇzeli da predloˇzi temu, da se registruje, da poˇsalje neku poruku itd. Izmed¯u klasa postoje veze, med¯u njima najznaˇcajnije su veze izmed¯u klasa entiteta i kontrolera. Sve veze su navedene na slici 2.2, pri ˇcemu treba obratiti paˇznju na kardinalitet veze i na njihove uloge. Npr. veza izmed¯u klase Profesor i klase Tema je takva da profesor predlaˇze ni jednu ili viˇse tema dok je jedna tema predloˇzena od strane samo jednog profesora. Takod¯e se moˇze posmatrati veza izmed¯u klase Student i klase Poruka. Stu-

8

MODELIRANJE SISTEMA

dent ˇsalje nula ili viˇse poruka, a jedna poruka je poslata od strane jednog studenta.

Slika 2.2: Class dijagram

Poglavlje 3

Implementacija Ovo poglavlje se bavi implementacijom. Najpre je data ˇsema baze podataka koja ja bila osnov za implementaciju aplikacije za izbor teme diplomskog rada. Nakon toga sledi opis implementacije srednjeg sloja aplikacije uz pomo´c Hibernate paketa i implementacije korisniˇckog interfejsa koriˇs´cenjem JSF, JSP, HTML i CSS tehnologije sa konkretnim primerima koji ilustruju navedene tehnologije.

3.1.

ˇ Sema baze podataka

ˇ Slika 3.1: Sema baze podataka Na slici 3.1 prikazana je ˇsema baze podataka koja se koristi u aplikaciji za izbor teme diplomskog rada. Dato je pet tabela od kojih su ˇcetiri suˇstinski bitne a to su tabele Student, Profesor, Tema i Poruka.

10

IMPLEMENTACIJA

Tabela koja nosi naslov Student, sadrˇzi podatke o studentima koji se registruju na sistem i ˇcuva sve relevantne podatke o njima. U ovoj tabeli nema stranih kljuˇceva, a primarni kljuˇc je brojIndeksa. Od ostalih podatka dati su ime, prezime, e-mail, broj telefona i lozinka studenta. Tabela Profesor ˇcuva informacije o profesorima koji se registruju na sistem. Ni ova tabela nema strani kljuˇc. Primarni kljuˇc je idProfesora. Ostale kolone su ime, prezime, email, lozinka, brojTelefona i zvanje. Tabela Tema ˇcuva podatke o temama koje predlaˇze profesor a bira student. Ova tabela ima dva strana kljuˇca a to su rezervisaoBrIndeksa i idProfesora. Prvi strani kljuˇc je vrednost broja indeksa studenta u sluˇcaju da je neko od studenata odabrao temu, u suprotnom vrednost ovog stranog kljuˇca je null. Drugi strani kljuˇc je primarni kljuˇc profesora koji predlaˇze temu. Primarni kljuˇc u ovoj tabeli je idTeme. Ostale kolone su datum (kada je tema predloˇzena), naziv (naslov teme), opis (bliˇzi opis teme) i vrsta (diplomski ili master). Tabela Poruka ˇcuva podatke o porukama koje profesor i student ˇsalju jedan drugom. Isto kao kod tabele Tema su data ista dva strana kljuˇca idProfesora i brIndeksa. Primarni kljuˇc je idPoruke a ostale kolone su smerProfStud (da li ˇsalje profesor studentu ili student profesoru ), tekstPoruke (tekst koji se ˇsalje), datumVreme (vreme kada je poruka poslata), Rad (tekst rada), procitana (logiˇcki tip koji ˇcuva podatak da li poruka proˇcitana) i naslov (naslov poruke).

3.2.

Perzistentne klase

Perzistencija u Hibernate-u se postiˇze pomo´cu perzistentnih klasa. U aplikaciji aˇzuriranja tema koriˇs´ceno je viˇse perzistentnih klasa. Perzistentne klase rade sa perzistentnim podacima. U Hibernate-u perzistentna klasa ja klasa koja implementira interfejs java.io.Serializable koji nema polja i metode. Perzistentna klasa ima atribute koji predstavljaju kolone u bazi podataka. Za svaki od tih atributa neophodno je imati set i get metode u suprotnom kompajler javlja greˇsku. Perzistentna klasa mora imati podrazumevani konstruktor. 3.2.1.

Mapiranje perzistentnih klasa

Za svaku perzistentnu klasu postoji odgovaraju´ci XML fajl koji sluˇzi za mapiranje klase u ˇsemu baze podataka. Ime fajla je isto kao i ime klase kojoj se dodaje joˇs ekstenzija hbm.xml. Ekstenzija hbm oznaˇcava da je u

3.2.

Perzistentne klase

11

pitanju Hibernate mapiranje. Dakle ovaj fajl sluˇzi za preslikavanje izmedju perzistentnih klasa i tabela baze podataka. Korenski element svake datoteke za mapiranje je hibernate-mapping. Pomo´cu atributa ovog elementa podeˇsavaju se podrazumevane (default) vrednosti koje moraju biti definisane. Element class je rezervisan za deklaracuju perzistentnih klasa. Zapravo sva mapiranja izmed¯u perzistentnih klasa i tabela se vrˇse unutar ovog elementa. Svaka klasa koja se direktno definiˇse mora da ima id element. Ovim elementom se postiˇze da je za svaku klasu definisan primarni kljuˇc tako ˇsto Java klase imaju atribut koji sadrˇzi jedinstveni identifikator koji se povezuje sa kolonom primarnog kljuˇca u tabeli. U telu id elementa definiˇse se generator element kojem se prosled¯uje informacija na koji naˇcin se vrˇsi generisanje primarnog kljuˇca. Mogu da bude prosled¯ene konstante sa razliˇcitim znaˇcenjem: • sequence - Sekvencialno generisanje identifikatora • native - U zavisnosti od baze koristi hilo, sequence ili identity. Obezbed¯uje maksimalnu prenosivost. ˇ maksimalnu vrednost primarnog kljuˇca, pa je pove´ca• increment - Cita va za jedan prilikom svakog slede´ceg ponavljanja. • assignet - Dobija identifikator objekta pre poziva save() metoda. Ovo je i podrazumevana strategija ako se ne navede generator. • foreign - Koristi identifikator drugog objekta. Za svaki atribut koji je potrebno saˇcuvati u bazi se koristi element property. Perzistentni atributi moraju da imaju set i get metode. Element property poseduje viˇse atributa od kojih je neophodno definisati atribut name ˇcija vrednost mora da poˇcne malim slovom. Pod pojmom asocijacije se podrazumevaju veze izmed¯u objekata perzistentnih klasa. Postoji viˇse vrsta asocijacija: jedan naprema jedan (one-to-one), viˇse naprema viˇse (many-to-many), jedan naprema viˇse (one-to-many) itd. Veze u klasama se definiˇsu preko atributa objekata. U dvosmernoj vezi oba objekta imaju referencu na objekat na drugoj strani, dok jednosmerna veza je veza izmed¯u dva objekta kod koje samo jedan od objekata ima referencu na drugi objekat. Na listingu 1 prikazan je XML fajl za mapiranje klase Student u ˇsemu baze podataka. Deklariˇse se perzistentna klasa koja ima primarni kljuˇc brojindeksa. Dato je nekoliko atributa ˇcija je namena da ˇcuvaju osnovne

12

IMPLEMENTACIJA

informacije o studentu, a to su ime, prezime, email, brojtelefona itd. Naravno, data su i mapiranja asocijacija sa drugim klasama. < c l a s s name=” dbmodel . Student ” t a b l e=” s t u d e n t ” c a t a l o g=” damir ” l a z y=” f a l s e ”>

Listing 1

3.2.

Perzistentne klase

3.2.2.

13

Rad sa objektima

Neophodno je razumeti rad sa objektima i na koji naˇcin se vodi raˇcuna o njima. Hibernate podrˇzava i definiˇse slede´ca stanja objekata: • Transientno (Transient) - Objekat je transientan ako se tek kreira koriˇs´cenjem operacije new i joˇs uvek nije povezan sa Session objektom, pri ˇcemu objekat joˇs uvek nema vezu za bazom podataka. • Perzistentno - Ovi objekti imaju svoju reprezentaciju u bazi podataka. Objekat moˇze da bude prethodno uˇcitan iz baze ili snimljen u bazu, ali pri tome mora biti povezan sa Session objektom. U tom stanju se detektuju sve promene na objektu i sinhronizuju se sa bazom podataka. • Odvojeno (Detachet) - Objekat se nalazi u odvojenom stanju ako je bio u perzistentnom, ali je u med¯uvremenu Session objekat zatvoren. Naravno, ovaj objekat moˇze da se vrati u perzistentno stanje ako se poveˇze sa novim Session objektom. 3.2.3.

Skladiˇ stenje perzistentnih klasa

Hibernate se najˇceˇs´ce inicijalizuje kreiranjem SessionFactory objekta iz Configuration objekta. Configuration je reprezentacija Hibernateovih konfiguracionih datoteka. Prilikom poziva metoda configure(), Hibernate traˇzi datoteku hibernate.cfg.xml u src direktorijumu projekta i izbacuje izuzetak ako ga ne nad¯e. Glavna uloga hibernate.cfg.xml datoteke je da ˇcuva lokacije datoteka za mapiranje i daje informacije o bazi podataka kao ˇsto su URL baze, korisniˇcko ime, pasword i dijalekt SQL-a koji se koristi. Za pristup bazi korite se Hibernate-ovi interfejsi: • Session - Nedejiv objekat u jednoj programskoj niti, koji predstavlja nedeljiv skup operacija sa bazom podataka. Poseduje API za upravljanje perzistencijom koji se poziva prilikom ˇcitanja ili ˇcuvanja objekata u bazi. • Transaction - Koristi se za programsko postvljanje granica transakcije, i nije obavezno. Umesto njega mogu se koristiti JDBC razdvajanje transakcija, JTA (Java transaction API) interfejs, ili kontejnerski upravljanje transakcije u EJB-3. ˇ Cuvanje objekata u bazi podataka i njihovo ˇcitanje se u Hibernate-u obavljaju promenom njihovih stanja, ˇsto se odigrava pomo´cu nedeljivog

14

IMPLEMENTACIJA

skupa operacija koje se uvek izvrˇsavaju zajedno. Na poˇcetku rada aplikacije kreira se Session objekat. U istom nedeljivom skupu operacija je takod¯e inicijalizovan i kontekst perzistencije koji ´ce upravljati svim objektima u okviru datog Session-a. Takod¯e je potrebno otvoriti Transaction. Sve operacije nedeljivog skupa se nalaze unutar jedne transakcije, bez obzira na to da li se podaci ˇcuvaju ili ˇcitaju. Instanca perzistentne klase se ˇcuva u bazi pozivom metode save(). Metod save() ˇcini privremeni objekat trajnim, povezuje ga sa otvorenom sesijom i njegovim kontekstom perzistencije. Izmene na trajnim objektima moraju biti sinhronizovane sa bazom podataka u nekom trenutku. To se dogad¯a prilikom poziva metoda commit(). U sliˇcaju neuspeha izvrˇsavanja transakcije naˇcinjene izmene se vra´caju pozivom metoda rollback(). Session na kraju pozivom metod close() zatvara kontekst perzistencije. Na listingu 2 je dat metod ˇcija je uloga da saˇcuva perzistentni objekat tipa Student. p u b l i c v o i d n o v i S t u d e n t ( S t r i n g ime , S t r i n g prezime , S t r i n g t e l , S t r i n g mail , S t r i n g br , S t r i n g l o z ) { Session session = HibernateUtil . getSessionFactory () . openSession () ; Transaction transaction = null ; try { transaction = s e s s io n . beginTransaction () ; Student s t u d = new Student ( ) ; s t u d . s e t I m e ( ime ) ; stud . setPrezime ( prezime ) ; stud . s e t B r o j t e l e f o n a ( t e l ) ; stud . setEmail ( mail ) ; s t u d . s e t B r o j i n d e k s a ( br ) ; stud . setLozinkastudenta ( l o z ) ; s e s s i o n . save ( stud ) ; t r a n s a c t i o n . commit ( ) ; } catch ( HibernateException e ) { transaction . rollback () ; e . printStackTrace () ; } finally { session . close () ; } }

Listing 2

3.3.

JSF tehnologija

3.2.4.

15

Pravljenje upita pomo´ cu HQL-a

Hiberane Query Language (HQL) je upini jezik razvijen u okviru Hibernate alata. Osnovna razlika izmed¯u HQL-a i SQL-a je u tome ˇsto je HQL objektno - orjentisan. Problem sa SQL-om je u tome ˇsto razliˇciti sistemi za upravljanje bazama podataka podrˇzavaju razliˇcite SQL dijalekte, tako da prelaskom sa jednog na drugi sistem moraju se vrˇsiti promene upita. Zahvaljuju´ci HQL-u imamo neki vid apstrakcije i njime se obezbed¯uje objektni pogled na relacionu bazu podataka dok je Hibernate zaduˇzen za generisanje SQL - a. Dakle, HQL omogu´cuje pisanje upita analognih onim u SQL u, ali koriˇs´cenjem objektno - orjentisanih termina. Pored ve´c pomenutih interfejsa Session i Transaction, za pristup bazi se joˇs koristi i interfejs Query. Upiti se mogu pisati u HQL - u ili u obiˇcnom SQL - u. Query interfejs omogu´cava pisanje upita, povezivanje argumenata sa promenljivima u upitima i razne naˇcine njihovog izvrˇsavanja. Na listingu 3 dat je deo programskog koda za kreiranje i izvrˇsavanje HQL upita. Dat je String koji je zapravo tekst upita. U konkretnu sluˇcaju ”from Poruka”. To je tekst upita koji iz tabele Poruka ˇcita sve poruke. Posle ovoga neophodno je od teksta napraviti upit a to se radi otvaranjem sesije i kreiranjem upita koriˇs´cenjem metoda createQuery(tekstUpita). Na kraju se upit izvrˇsava pozivom metoda list(). Ovaj metod smeˇsta sve poruke u jednu listu radi lakˇse manipulacije sa podacima. // . . . transaction = s e s s io n . beginTransaction () ; S t r i n g t e k s t U p i t a = ” from Poruka ” ; Query u p i t = s e s s i o n . c r e a t e Q u e r y ( t e k s t U p i t a ) ; List rezultat = upit . l i s t () ; // . . .

Listing 3 Bitno je razlikovati tri faze, a to su priprema upita, povezivanje parametra upita i izvrˇsavanje samog upita. Hibernate takod¯e omogu´cava i pisanje obiˇcnog SQL upita. Za pravljenje takvih upita se koristi metod createSQLQuery().

3.3.

JSF tehnologija

JSF je kao ˇsto je ve´c reˇceno framework zasnovan na komponentama korisniˇckog interfejsa. Bitno je naglasiti da se izvrˇsava na serveru.

16

IMPLEMENTACIJA

Na slici 3.2 je prikazana strana myform.jsp, to je JSP strana koja sadrˇzi JSF tagove. Ova JSP strana prikazuje komponente koje su u njoj navedene. Web aplikacija tj. njen interfejs, prikazan na slici kao myUI, upravlja referenciranim objektima JSP strane. Ona pored komponenti korisniˇckog interfejsa moˇze da prikazuje osluˇskivaˇce dogad¯aja, validatore, konvertere.

Slika 3.2: Korisniˇcki interfejs se izvrˇsava na serveru Dva pojma koja se pominju u JSF tehnologiji su menaged beans i backing beans. Zapravo, menaged beans su obiˇcni JavaBean objekti kojima upravlja JSF framework. JSF brine o instanciranju binova i njihovom postojanju. Backing beans sadrˇze svojstva i metode vezane za komponente korisniˇckog interfejsa. U backing binovima se nalaze i metode koje validiraju unose korisnika i reaguju na neki dogad¯aj izazvan akcijama nad komponentama. Uobiˇcajeno je da iza svake stranice stoji jedan backing bin. Kako je instanciranje backing binova prepuˇsteno frameworku, oni jesu i menaged beans. O backing binovima se ˇcesto govori kao o view objektima zato ˇsto sadrˇze podatke o modelima podataka koji se prikazuju korisniku. 3.3.1.

Konfigurisanje faces-config.xml fajl - a

Glavni konfiguracioni fajl za JSF je faces-config.xml. To je fajl koji sluˇzi za mapiranje i neke od njegovih najosnovnijih uloga su: • mapiranje Java binova • mapiranje navigacije • mapiranje validatora • mapiranje konvertera Java binovi - Moˇze da se mapira jedan ili viˇse Java binova koji ´ce biti koriˇs´ceni u aplikaciji. Svakom moˇze da bude dato ime, opis, i oblast vaˇzenja, a mogu se ˇcak inicijalizovati i njihova svojstva. Na listingu 4 dato je mapiranje klase dbmodel.Student, tako da kod pozivanja ove klase u JSP

3.3.

JSF tehnologija

17

fajlu, koristi se String student (obratiti paˇznju da je ime isto kao ime bina sa tom razlikom ˇsto poˇcinje malim slovom). Opis Java b i n a s t u d e n t dbmodel . Student r e q u e s t

Listing 4 Navigacija - Navigacija je jednostavna koliko i deklaracija binova. Svaka JSF aplikacija moˇze da ima jedno ili viˇse navigacionih pravila. Navigaciono pravilo predstavlja mogu´cu putanju sa jedne na drugu stranicu. Svaka putanja se naziva navigacioni sluˇcaj(navigation case). / l o g i n . j s p p r e d l o g / inbox . j s p n a l o g / mojnalog . j s p

Listing 5 Na listingu 5 su dati stringovi predlog i nalog, i u zavisnosti od toga koji String je prosled¯en navigacija ´ce biti prebaˇcena na stranicu inbox.jsp ili na mojnalog.jsp. Postoje dve vrste Action osluˇskivaˇca. Oni koji utiˇcu na navigaciju i oni koje ne utiˇcu. Oni koji ne utiˇcu obiˇcno manipuliˇsu komponentama unutar trenutne stranice, ali za navigaciju su bitni oni koji utiˇcu. Ako se nekoj komponenti na primer dugmetu prosledi action vrednost nekog stringa to dugme ´ce onog trenutka kada bude aktivirano potraˇziti svoj navigacioni sluˇcaj u faces-config.xml fajlu, a ukolko ga ne nadje, javi´ce greˇsku.

Listing 6

18

IMPLEMENTACIJA

U primeru prikazanom na listingu 6, naveden je sluˇcaj kada dugme (commandButton) poziva metod login koji se nalazi u klasi Student (koja je naravno pre toga mapirana u faces-config.xml fajlu). Taj metod vra´ca String pa tek zatim se traˇzi navigacioni sluˇcaj u faces-config.xml fajlu. Ovakva navigacija je koriˇs´cena tokom izrade aplikacije. Konverter - Komponente mogu biti predstavljene raznim svojsvima u backing binu, a ta svojstva mogu biti tipa String koji predstavlja ime, tipa Date koji predstavlja datum rodjenja, mogu da budu lista objekata tipa Student, ili bilo kog drugog tipa. Zbog toga komponente moraju imati odred¯eno znanje o podacima koje prikazuju. JSF sadrˇzi ugrad¯ene konvertere koje se ne moraju pisati. Konverteri takod¯e sadrˇze i formatiranje prikaza. Na primer ako je prikazan datum, moˇze biti prikazan samo dan i mesec, a moˇze se prikazati i ceo datum. Takod¯e, datum se razliˇcito prikazuje u drugim delovima sveta. U listingu 7 je naveden primer jednostavne ugrad¯ene konverzije, a naˇcin mapiranja sloˇzenije konverzije ´ce biti ilustrovana u slede´cem poglavlju.

Listing 7 Kao ispis se prikazuje datum koji je objekat tipa Data. Takod¯e je naveden i stil ispisa. Naravno postoji mnogo viˇse ugrad¯enih konvertera sa istom logikom koriˇs´cenja gde se navodi vrsta konvezije, tip i stil. Ipak ono ˇsto je mnogo interesantnije jeste korˇs´cenje konvertera koje programer sam piˇse. Na stranici za slanje poruka je dat selectOneMenu (listing 8) koji se koristi za izbor jednog od profesora kojem uˇcesnik ˇzeli da poˇsalje poruku. U cilju toga potrebno je povu´ci podatke o profesorima iz baze i smestiti ih u listu koja se prikazuje u selectOneMenu. Tu takod¯e na scenu stupa konverzija koja brine o tome da se na komponenti prikazuje String, a kod povlaˇcenja informacije o tome koji je element selektovan radi se sa objektom tipa Profesor. < f : s e l e c t I t e m s v a l u e=”#{ s l a n j e . s e l e c t I t e m s } ” /> < f : c o n v e r t e r c o n v e r t e r I d=” f o o C o n v e r t e r ” />

Listing 8

3.3.

JSF tehnologija

19

Rad sa samom komponentom je ilustrovan neˇsto kasnije. Za sada je konverzija u prvom planu. Iz koda se vidi da se koristi konverzija fooConverter. To naravno mora da bude mapirano u faces-config.xml fajlu ˇsto je prikazano na listingu 9. f o o C o n v e r t e r dbmodel . FooConverter

Listing 9 Potrebno je mapirati converter-id koji predstavlja naziv konvertera i navesti klasu kovertera. U klasi konvertera kod konkretnog primera FooConverter postoje dva metoda: getAsObject i getAsString. Oni prebacuju objekat u String i obrnuto. Metod getAsObject vra´ca objekat a metod getAsString vra´ca String. Validator - JSF podrˇzava validatore ˇcija je odgovornost da brine o tome da li je korisnik uneo ispravnu (validnu) vrednost. Svaka ulazna komponenta moˇze da ima jedan ili viˇse validatora. Koristan i ˇcesto koriˇs´cen validator je f:validateLogRange, on brine o duˇzini inputa HtmlInputText komponente, tj. proverava da li je unet broj izmed¯u 1 i 500. Ako se unese broj izvan domena, validator ´ce obrisati unos i strana ´ce biti ponovo uˇcitana. Joˇs jedan primer bi bio validacija duˇzine unosa koja je jako uˇcestala kod input komponenti.

Listing 10 U kodu listinga 10 dat je inputText ˇcija ´ce veliˇcina imati dvadeset karaktera (size=”20”). Atribut required je postavljen na vrednost true ˇsto znaˇci da je unos neophodan. Unutar tela inputText nalazi se validator koji brine o tome da unos bude duˇzine izmed¯u pet i trideset karaktera. JSF ima i mogu´cnost pravljenja novih validator. 3.3.2.

Implementacija konvertera

Ve´c je opisan rad sa ugrad¯enim konverterima, ali u aplikaciji su pisani i novi konverteri. Dat je primer konverzije objekta Profesor gde je u selectOneMenu prikazano ime i prezime profesora, a kada se odabere odred¯ena

20

IMPLEMENTACIJA

vrednost onda se radi sa objektom tipa Profesor. Uloga metoda getAsObject i getAsString je da konvertuju iz objekta Profesor u String ime+prezime i obrnuto (listing 11). package dbmodel ; import j a v a x . f a c e s . component . UIComponent ; // . . . o s t a t a k importa public c l a s s FooConverter implements C o n v e r t e r { private s t a t i c Konv k o n v e r z i j a = new Konv ( ) ; public Object g e t A s O b j e c t ( FacesContext c o n t e x t , UIComponent component , S t r i n g v a l u e ) { return k o n v e r z i j a . f i n d ( v a l u e ) ; } public S t r i n g g e t A s S t r i n g ( FacesContext c o n t e x t , UIComponent component , Object v a l u e ) { return ” ” +(( P r o f e s o r ) v a l u e ) . g e t I d p r o f e s o r a ( ) ; } }

Listing 11 FooConverter implementira interfejs Convert ˇsto je obavezno za sve konvertere koji nisu ugrad¯eni. Konverzija je urad¯ena koriˇs´cenjem klase Konv. To je klasa (listing 12) koja uˇcitava parove String-Profesor, tj. nalazi odgovaraju´ceg profesora na osnovu kljuˇca. U ovom sluˇcaju kljuˇc je idprofesora koji je tipa Integer, ali se on svejedno prebacuje u String zbog toga ˇsto komponente rade sa stringovima. Treba obratiti paˇznju na metod loadMap() koji iz baze ˇcita potrebne informacije. package dbmodel ; // . . . i m p o r t public c l a s s Konv { private s t a t i c Map mapkon ; static { loadMap ( ) ; } public P r o f e s o r f i n d ( S t r i n g key ) { return mapkon . g e t ( key ) ; } public L i s t l i s t ( ) { return new A r r a y L i s t (mapkon . v a l u e s ( ) ) ; } public Map map ( ) { return mapkon ;

...

3.3.

JSF tehnologija

21

} private s t a t i c void loadMap ( ) { mapkon = new LinkedHashMap() ; Session session = HibernateUtil . getSessionFactory () . openSession () ; T r a n s a c t i o n t r a n s a c t i o n = null ; transaction = s e s s io n . beginTransaction () ; S t r i n g HQL QUERY = ” from P r o f e s o r ” ; Query query = s e s s i o n . c r e a t e Q u e r y (HQL QUERY) ; L i s t r e s u l t = query . l i s t ( ) ; for ( I t e r a t o r i t = r e s u l t . i t e r a t o r ( ) ; i t . hasNext ( ) ; ) { P r o f e s o r p r o f e s o r = ( P r o f e s o r ) i t . next ( ) ; S t r i n g s t r=” ”+p r o f . g e t I d p r o f e s o r a ( ) ; mapkon . put ( s t r , p r o f e s o r ) ; } } }

Listing 12

3.3.3.

Rad sa komponentama korisniˇ ckog interfejsa

JSF sadrˇzi veliki broj ugrad¯enih komponenti. Ovde je navedena ilustracija najˇceˇs´ce koriˇs´cenih u aplikaciji za izbor teme diplomskog rada: commandButton, inputText, outputText, selectOneMenu, form i panelGrid. 1. commandButton prikazuje HtmlCommandButton komponentu koja prikazuje HTML formu dugmeta. Dogad¯aj se ˇsalje aplikaciji kada se pritisne dugme. Moˇze da se koristi svojstvo actionListener kome se prosled¯uje vrednost #{helloBean.addContrlos} ˇsto je izraz koji kaˇze JSF - u da treba da nad¯e helloBean objekat i onda da pozove metod addControls koji izvrˇsava dogad¯aj. Takod¯e, postoji i svojstvo action kome se prosled¯uje vrednost #{helloBean.goodbye} koji je specificiran za navigaciju ˇsto je ve´c ranije opisano.

Listing 13 Svojstvo value u primeru navedenom u listingu 13 predstavlja String koji ´ce biti prikazan na povrˇsini dugmeta. Poziva se metod posalji()

22

IMPLEMENTACIJA koji ima ulogu da u bazu upiˇse podatke koji su navedeni u drugim komponentama na toj stranici. 2. inputText koristi HtmlInputText komponentu koja prima vrednost. Svojstvo value je i ovde najbitnije, jer se njemu prosled¯uje vrednost #{slanje.naslov } koja predstavlja atribut nalov (listing 14).

Listing 14 3. inputTextarea je komponenta analogna komponenti inputText sa tom razlikom ˇsto se ovde navode svojstva cols i rows koja predstavljaju veliˇcinu HtmlTextArea komponente. 4. outputText koristi jednostavnu ali jako ˇcesto koriˇs´cenu komponentu HtmlOutputText ˇcija je jednostavna uloga da prikaˇze tekst na ekranu. Poseduje svojstvo value koje je jedino svojstvo koje je obavezno u ovoj komponenti i u njega se stavlja tekst koji se prikazuje (listing 15). Postoji joˇs puno svojstva koja mogu da se daju ovoj komponenti i uglavnom su vezana za stil teksta, font itd.

Listing 15 Malo sloˇzeniji primer bi bio da vrednost koja se prikazuje bude promenljiva u zavisnosti od nekih parametara ˇsto je prikazano na listingu 16.

Listing 16 Prikazuje se atribut naslov, a u sluˇcaju da se vrednost atributa odred¯ena akcijom promeni, dolazi do promene vrednosti na ekranu. 5. selectOneMenu prikazuje HtmlSelectOneMenu komponentu, koja sadrˇzi listu elemenata koji se ubacuju pomo´cu UIselectItems elementa.

3.3.

JSF tehnologija

23

< f : s e l e c t I t e m s v a l u e=”#{ s l a n j e . s e l e c t I t e m s } ” /> < f : c o n v e r t e r c o n v e r t e r I d=” f o o C o n v e r t e r ” />

Listing 17 Kod prikazan u listingu 17 je opisan kod konvertera . Vrednost value u selectOneMenu predstavlja vrednost trenutno selektovanog elementa. Koriˇs´cenjem atributa selectedItem uvek se moˇze na lak naˇcin pristupiti selektovanom elementu. Kada se koriste komponente ovog tipa, postoji potreba da se prikaˇze dinamiˇcka lista elemenata. U svrhu toga se koristi UISelectItems komponenta. Ova komponenta predstavlja sloˇzeniju verziju UISelectItem komponente koja ima mogu´cnost da prikaˇze samo jedan element. package dbmodel ; // . . . i m p o r t public c l a s s S l a n j e { private s t a t i c Konv mapkon = new Konv ( ) ; private L i s t s e l e c t I t e m s ; private P r o f e s o r s e l e c t e d I t e m ; // . . . { fillSelectItems () ; } // . . . K o n s t r u k t o r + s e t , g e t metodi . . . private void f i l l S e l e c t I t e m s ( ) { s e l e c t I t e m s = new A r r a y L i s t () ; f o r ( P r o f e s o r p r o f : mapkon . l i s t ( ) ) { s e l e c t I t e m s . add (new S e l e c t I t e m ( p r o f , pr . g e t P r e z i m e ( )+” ”+pr . getIme ( ) ) ) ; } } }

Listing 18 Postavlja se pitanje kako se prikazana lista popunjava. To je ilustrovano kodom u listingu 18 gde se popunjava lista profesora pozivom metoda fillSelectItems(). String pr.getPrezime()+pr.getIme() predstavlja vrednost koja ´ce biti prikazana u komponenti, u konkretnom primeru u selectOneMenu. Za svaku od tih vrednosti postoji ”vezan”objekat Profesor tako da moˇze da se manipuliˇse i sa objektima, a o svemu brine konverter.

24

IMPLEMENTACIJA 6. form predstavlja HtmlForm komponentu koja je kontejner za druge komponente i koristi se za vra´canje informacija serveru. Ona mora da sadrˇzi barem jednu komponentu. Bitno je naglasiti da sve input komponente moraju biti unutar ovih tagova. 7. panelGrid koristi HtmlPanelGrid komponentu, predtavlja kontejner za druge komponente. Koristi se za pravljenje rasporeda komponenti. Jedan od vaˇznih svojstava jeste broj redova koji oznaˇcava kolko ´ce biti komponenti u jednom redu.

Navedene komponente su neke od najˇceˇs´ce kori´cenih . Na listingu 19 je naveden kod koji prikazuje jednu tipiˇcnu stranicu iz rad¯ene aplikacije. Uloga ovog koda je da prikaˇze formu za slanje poruke kao i da informacije smesti u predvid¯ene atribute dok se samo slanje vrˇsi u pozadini, tj u Java kodu. < f : s e l e c t I t e m s v a l u e=”#{ s l a n j e . s e l e c t I t e m s } ” /> < f : c o n v e r t e r c o n v e r t e r I d=” f o o C o n v e r t e r ” />

Listing 19 Svojstvo styleClass poziva fajl todo.css u kome su navedeni stilovi za prikaz forme. Broj kolona u panel gridu je dva (columns=”2”), pa se sve komponente red¯aju u dve kolone. Redom je dat prikaz teksta a zatim prikaz

3.4.

Primer DataTable

25

komponente u tri reda. Na kraju se navodi commandButton koji pokupi sve podatke i upisuje poruku u bazu.

3.4.

Primer DataTable

U ovom odeljku prikazan je jedan JSF DataTable primer tipiˇco koriˇs´cen u aplikaciji za izbor teme diplomskog rada. Takod¯e prikazan je primer kako se manipuliˇse sa formama, ali pre svega na koji naˇcin je pravljenje tabela sa dinamiˇckim podacima u JSF-u jako zgodno. Neke koriˇs´cene komponente su ranije navedene, ali takod¯e se uvode i neke nove. 1. dataTable je sloˇzena komponenta, za razliku od svih ve´c prikazanih komponenti. Komponenta HtmlDataTable je u osnovi Html tabela. Osnovna razlika je u tome ˇsto je osposobljena da radi sa skupovima podataka koji su smeˇsteni u liste, nizove ili skupove. U suˇstini HtmlDataTable ne moˇze da se koristi bez dinamiˇckih podataka. Moˇze da se koristi samo za prikaz podataka ili mogu da se dodaju neke ulazne kontrole. U aplikaciji za izbor teme diplomskog rada koriste se liste. 2. column koristi UIColumn komponentu koja ima samo tri svojstva i jedina standardna komponenta za koju se vezuje jeste HtmlDataTable. S obzirom da je HtmlDataTable najmo´cnija standardna komponenta, nije ˇcudno ˇsto postoji puno naˇcina na koje moˇze da se koristi. UIColumn sluˇzi za pravljenje ˇsablona za svaku kolonu ispisa kako bi se definisalo zaglavlje (header ) svake kolone i da bi se sadrˇzaj svih vrednosti ponavljao u kolonama. Za davanje konteksta koloni koristi se tag facet koji u konkretnom primeru navodi zaglavlje. 3. commandLink sliˇcno dugmetu koristi se za izvrˇsavanje neke akcije, samo ˇsto se ta akcija prosled¯uje linku, a ne dugmetu. Primer implementacije komponenti: DataTable za inbox Dobar primer za prikazivanje rada HtmlDataTable komponente jeste pravljenje inbox - a (listing 20). U inboxu su date ˇcetiri kolone. U prvoj koloni navodi se od koga je poruka primljena. Druga kolona sluˇzi da prikaˇze naslov poruke. Tre´ca kolona je rezervisana za informaciju o tome od koga je poruka primljena. Dok se u poslednjoj koloni nalazi komanda za brisanje poruke. Iz koda se vidi, da su prva i tre´ca kolona HtmlOutputText koponente a druga i ˇcetvrta su HtmlCommandLink - ovi. Ideja je da se klikom na naziv neke od poruka forma koja prikazuje poruke skloni, a na njeno mesto dodje forma koja je zaduˇzena za tekst poruke ˇciji je naslov odabran.

26

IMPLEMENTACIJA

Bitno je razumeti svojstvo binding koje se pojavljuje na viˇse mesta. Ovo svojstvo sluˇzi za vezivanje UI komponente sa odred¯enim dogad¯ajem. Na primer, u prvoj formi dat je binding=”# {inbox.form}”, ovo je zapravo izraz koji kaˇze da se forma u kojoj je definisan binding povezuje sa komponentom UIForm form deklarisanom u binu Inbox tako da sve manipulacije koje se vrˇse nad tom komponentom se automatski reflektuju na ekranu. Isto vaˇzi za dataTable koji je povezan sa HtmlDataTable komponentom. Bitno je obratiti paˇznju da postoje dve forme koje se suˇstinski razlikuju u tome da je svojstvo rendered postavljeno na true kod prve forme dok kod druge forme ta vrednost je postavljna na false. To zapravo znaˇci da je default vrednost prve forme takva da se ona prikaˇze dok je druga nevidljiva. Upravo je to naˇcin na koji se moˇze manipulisati sa formam. Po potrebi se jedna forma sklanja, a druga prikazuje. Postoje joˇs dva bitna svojstava vezana za dataTable koja se moraju razumeti. Prvo je value=”#{inbox.poruke}” koje prosled¯uje tabeli vrednosti koje se prikazuju. Moˇze da bude niz, skup ili lista. Drugo bitno svojstvo je svojstvo var=”todo” koje pokazuje na listu deklarisanu u svojstvu value, pa svaki put kod ispisa podataka iz liste koristi se ta vrednost (”#{todo.profesor.prezime} #{todo.profesor.ime}”,”#{todo.naslov}” itd.). < f i e l d s e t>P r i m l j e n e poruke < f : f a c e t name=” h e a d e r ”> < f : f a c e t name=” h e a d e r ”> < f : f a c e t name=” h e a d e r ”> < f : f a c e t name=” h e a d e r ”>

Listing 20

Sada su postavljene ekranske forme ali ostaje onaj interesantniji deo koji se deˇsava u pozadini (listing 21). Deklariˇse se lista poruka i odmah na poˇcetku pozive metod izlistaj() ˇcija je uloga da popuni listu i da je aˇzurira kada dod¯e do promene. Za sve promenljive koje su na bilo koji naˇcin povezane sa ekranskim formama neophodno je imati set i get metode.

28

IMPLEMENTACIJA

U poslednjoj koloni nalazi se vrednost Ukloni koja je konstantna za sve redove. Ta vrednost predstavlja akciju action=”#{inbox.delete}”. Pozivom metoda delete() briˇse se red u tabeli i poruka iz baze koja je predstavljena tim redom. Zahvaljuju´ci tome ˇsto je koriˇs´ceno svojsvo binding, sada na lak naˇcin, koriste´ci metod getRowData() se moˇze videti koji red je odabran i da se izvuˇce informacija o tome koju je poruku potrebno obrisati. U drugoj koloni dat je link koji poziva action=”#{inbox.tekst}”, tekst ovog linka se razlikuje u svakom redu i predstavlja naslov primljene poruke. Klikom na neki od tih linkova, poziva se metod tekst() koji prvu formu renderuje na false, a drugu na true. To za cilj ima sklanjanje prve forme dok druga forma postaje vidljiva. Takod¯e, ovaj metod uzima informaciju o tome koji red je odabran na analogni naˇcin kako to radi metod delete(), a zatim u promenljive odKoga i tekstPoruke smeˇsta potrebne informacije koje druga forma prikazuje na naˇcin naveden u JSP fajlu. Metod nazad() ima ulogu da vrati prvu formu i ponovo skloni drugu kada se odabere ta akcija, koja je smeˇstena u linku druge forme. package dbmodel ; // . . . i m p o r t public c l a s s Inbox { private HtmlDataTable dataTable ; private L i s t poruke ; private UIForm form ; private UIForm form2 ; private S t r i n g t e k s t P o r u k e ; private S t r i n g odKoga ; // pomocne p r o m e n l j i v e . . { i z l i s t a j () ; } public Inbox ( ) { i z l i s t a j () ; } // . . . OBAVEZNI ! ! ! s e t i g e t metodi public void i z l i s t a j ( ) { poruke = new A r r a y L i s t () ; // . . . C i t a i z b a z e l i s t u poruka } public S t r i n g d e l e t e ( ) { poruka = ( Poruka ) dataTable . getRowData ( ) ; b r i s i ( poruka . g e t I d p o r u k e ( ) ) ; i z l i s t a j () ;

...

3.5.

Stilovi i rad sa CSS-om

29

return ” d e l e t e ” ; } public void b r i s i ( int i d p o r u k e ) { // . . . priprema HQL u p i t a S t r i n g h q l = ” d e l e t e from Poruka where i d p o r u k e = : idporuke ” ; Query query = s e s s i o n . c r e a t e Q u e r y ( h q l ) ; // . . . O b r i s e i z b a z e poruku sa k l j u c e m i d p o r u k e } public S t r i n g t e k s t ( ) { form . s e t R e n d e r e d ( f a l s e ) ; form2 . s e t R e n d e r e d ( true ) ; poruka2 = ( Poruka ) dataTable . getRowData ( ) ; t e k s t P o r u k e = poruka2 . g e t T e k s t p o r u k e ( ) ; odKoga= poruka2 . g e t P r o f e s o r ( ) . g e t P r e z i m e ( )+” ”+poruka2 . g e t P r o f e s o r ( ) . getIme ( ) ; return null ; } public S t r i n g nazad ( ) { form2 . s e t R e n d e r e d ( f a l s e ) ; form . s e t R e n d e r e d ( true ) ; return null ; } }

Listing 21 Kada se svi podaci obrade na ekranskoj formi se prikazuje tabela kao na slici 3.3. Za lepˇsi i jasniji prikaz podataka neophodno je koristiti CSS ˇsto je prokazano na slici 3.4.

Slika 3.3: Primer tabele

3.5.

Stilovi i rad sa CSS-om

Cascading Style Sheets ili skra´ceno CSS jezik koji se na suptilan naˇcin bavi oblikovanjem HTML komponenti. JSF ima jako dobru podrˇsku za CSS tako ˇsto se razni atribti u koponente bave time. Time se bave atributi koji u sebi sadrˇze podreˇc Class ili Style (styleClass, headerClass, rowClasses, captionStyle itd). CSS kod je najˇceˇs´ce u posebnom fajl-u i odvojen od

30

IMPLEMENTACIJA

JSP-a, a potrebne klase se po potrebi pozivaju. .....

Listing 22 U primeru navedenom u listingu 22 data je tabela koja prikazuje dinamiˇcku listu poruke. Atribut styleClass poziva skup CSS klasa koje se uˇcitaju kada se tabela renderuje. Atribut headerClass uˇcitava CSS stilove koji vaˇze za zaglavlje tabele. Atribut columnClasses uˇcitava stilove kiji utiˇcu na kolone tabele. U dataTable postoji joˇs ovakvih atributa: captionClass, footerClass, columnClasses. Svaka komponenta sadrˇzi skup atributa koji su zaduˇzeni za stilove ˇsto ˇcini JSF otvorenim za lakˇse koriˇs´cenje ove tehnologije. Jedan primer tabele uz korˇs´cene CSS-a prikazan je na slici 3.4.

Slika 3.4: Primer tabele sa CSS-om

Poglavlje 4

Prikaz rada aplikacije U ovom poglavlju je dat opis rada web aplikacije za izbor teme diplomskog rada. Najpre je dat prikaz koriˇs´cenja aplikacije kada je uˇcesnik profesor. Na slici 4.1 je prikazana prva stranica za prijavljivanje profesora na sistem. Ukoliko profesor nije registrovan postoji dugme koje putanju prebacuje na stranicu predvid¯enu za registraciju. Ako je profesor registrovan onda samo unese adresu i lozinku i prelazi na stranicu predvid¯enu za ˇ je uˇcesnik registrovan, on ima laku navigaciju predlog teme (slika 4.2). Cim kroz ˇcitav sistem, a preˇcice(meni) za prelaz na bilo koji deo sistema se uvek nalaze na vrhu.

Slika 4.1: Prijava profesora na sistem

Slika 4.2: Predlog tema

Na stranici za predlog teme postoji mogu´cnost da se predloˇzi neka tema ili da se obriˇse ve´c predloˇzena tema. Kada se predlaˇze tema, unosi se

32

PRIKAZ RADA APLIKACIJE

viˇse informacija kao ˇsto se i vidi na slici 4.2. Pregled tema je prikazan na slici 4.3. Ovde profesor moˇze videti sve teme koje su predloˇzili drugi profesori. Takod¯e, profesor ima mogu´cnost da pregleda teme samo iz jedne od navedenih oblasti, ili ako to ˇzeli, moˇze da vidi i sve teme. Na slici 4.3 je prikazan pregled tema iz oblasti informacionih sistema. Na slici 4.4 je prikazan nalog uˇcesnika koji je trenutno prijavljen na sistem, a jedna od mogu´cnosti koja se ovde pruˇza jeste da se promeni lozinka.

Slika 4.3: Pregled tema

Slika 4.4: Nalog

Kod slanja poruka iz liste se bira student kome se ˇsalje poruka (na slici 4.5 to je student Kosti´c Laza), zatim se unese naslov poruke, tekst poruke i pritiskom na dugme ”posalji”, poruka se ˇsalje. Primljene i poslate poruke se ˇcitaju odnosno briˇsu na posebnim stranicama predvid¯enim za to. Na slici 4.6 je prikazana stranica sa poslatim porukama prijavljenog profesora.

33

Slika 4.5: Slanje poruke

Slika 4.6: Primljene poruke

34

PRIKAZ RADA APLIKACIJE

Prijavljivanje studenta na sistem (slika 4.7), je analogno prijavljivanju profesora. Jedina razlika je u tome ˇsto student unosi broj indeksa umesto e-mail adrese. Kada je student prijavljen na sistem razlikuju se dva sluˇcaja. Prvi sluˇcaj je kada student joˇs uvek nije odabrao temu, u tom sluˇcaju sistem ga prebacuje na stranicu gde ima mogu´cnost da odabere neku od tema. Biranje teme se vrˇsi klikom na link ”Odaberi”(slika 4.8). Drugi sluˇcaj je kada je student ve´c odabrao temu i prijavljuje se na sistem zato ˇsto ˇzeli da izvrˇsi neku drugu radnju. U ovom sluˇcaju on viˇse nema mogu´cnost da odabere temu, iako i dalje moˇze da ih pregleda.

Slika 4.7: Prjava studenta na sistem

Slika 4.8: Prikaz tema

Poglavlje 5

Zakljuˇ cak U ovom diplomskom radu opisan je razvoj web aplikacije za izbor tema diplomskih i master radova. Aplikacija omogu´cava profesorima na jednom fakultetu da predlaˇzu teme, da pregledaju teme i da vrˇse komunikaciju sa studentom. Aplikacija omogu´cava studentima da pregledaju teme, izaberu temu i da komuniciraju sa profesorom. Dat je model aplikacije preko UML dijagrama. Funkcionalni zahtevi dati su preko dijagrama sluˇcajeva koriˇs´cenja. Statiˇcki model sistema realizovan je koriˇs´cenjem Model View Control dizajn paterna i u radu je opisan preko dijagrama klasa. Prednost koriˇs´cenja navedenog paterna je dobra modularnost sistema i razdvajanje korisniˇckog interfejsa od modela podataka. Aplikacija je implemtirana u programskom jeziku Java uz koriˇs´cenje savremenih open-source tehnologija. Komponente korisniˇckog interfejsa implementirane su koriˇs´cenjem Java Server Faces tehnologije. Prednost koriˇs´cenja ove tehnologije je u tome ˇsto nudi bogatu biblioteku komponenti korisniˇckog interfejsa i olakˇsava razvoj kompleksnih web aplikacija. Perzistencija podataka implementirana je upotrebom Hibernate alata. Arhitektura aplikacije omogu´cava njeno dalje unapred¯ivane i proˇsirivanje dodatnim funkcionalnostima. Neke od korisnih fukcionalnosti koji bi mogli da se ukljuˇce su: uvodenje indeksa za pretraˇzivanje, slanje obaveˇstenja studentima kad se objavi nova tema, izvrˇsiti proveru da li je student koji se prijavljuje upisan na fakultet itd.

Reference [1] Java, http://www.java.com/en/(pregledano 5.4.2011.) [2] Eckel B., Misliti na Javi, Mikro knjiga, Beograd, 2007. [3] Tomcat, http://http://tomcat.apache.org/ (pregledano 5.4.2011.) [4] Hibernate, http://www.hibernate.org/ (pregledano 5.4.2011.) [5] My SQL, http://www.mysql.com/ (pregledano 5.4.2011) [6] Java Server Faces, http://www.javaserverfaces.org/ (pregledano 5.4.2011.) [7] HTML, http://www.w3schools.com/html/default.asp (pregledano 5.4.2011.) [8] CSS, http://www.w3schools.com/css/default.asp (pregledano 5.4.2011.) [9] Bauer K., King G., Hibernate In Action, Manning Publications CO., 209 Bruce Park Avenue Greenwich, 2005. [10] XML, http://www.w3schools.com/xml/default.asp (pregledano 5.4.2011.) [11] Dimi´c B., Skladiˇstenje XML bibliografskih zapisa, Diplomski rad, Prirodno matematiˇcki fakultet, Novi Sad, 2010. [12]Kito D. Mann, Java Server Faces In Action, Manning Publications CO., 209 Bruce Park Avenue Greenwich, 2004. [13] Eclipse, http://www.Eclipse.org (pregledano 5.4.2011.) [14] Power Designer, http://www.sybase.com/products/modelingdevelopment /powerdesigner, (pregledano 5.4.2011.) [15] UML, http://www.uml.org/, (pregledano 5.4.2011.) [16] Surla D., Stanojevi´c I.; Uvod u objedinjeni jezik modeliranja, Grupa za informacione tehnologije, Novi Sad, 1999.

Biografija Damir Galas rod¯en je 3. maja 1985. godine u Panˇcevu, R. Srbija. Osnovnu ˇskolu je zavrˇsio 2000. godine u Padini, a Srednju elektrotehniˇcku i grad¯evinsku ˇskolu ”Nikola Tesla”u Zrenjaninu 2004. godine gde stiˇce zvanje elekrotehniˇcar raˇcunara. Studiranje je zapoˇceo iste godine u Novom Sadu na Prirodno - matematiˇckom fakultetu gde se opredelio za studije informatike, smer C1(diplomirani informatiˇcar). Do septembra 2010. godine je poloˇzio je sve ispite predvid¯ene planom i programom smera i time stekao uslov za odbranu diplomskog rada.

UNIVERZITET U NOVOM SADU ˇ PRIRODNO-MATEMATICKI FAKULTET ˇ KLJUCNA DOKUMENTACIJSKA INFORMACIJA Redni broj: RBR Identifikacioni broj: IBR Tip dokumentacije: TD Tip zapisa: TZ Vrsta rada: VR Autor: AU Mentor: MN Naslov rada: NR Jezik publikacije: JP Jezik izvoda: JI Zemlja publikovanja: ZP Uˇze geografsko podruˇcje: Vojvodina UGP Godina: GO Izdavˇc: IZ Mesto i adresa: MA Fiziˇcki opis rada: FO Nauˇcna oblast: NO

Monografska dokumentacija tekstualni ˇstampani materijal Diplomski rad Damir Galas dr. Bojana Dimi´c Surla Web aplikacija za izbor teme diplomskog rada srpski(latinica) srpski/engleski Srbija

2011 Autorski reprint Prirodno-matematiˇcki fakultet, Trg Dositeja Obradovi´ca 4, Novi Sad (5/38/4/0/12/0/0) (broj poglavlja/strana/lit. citata/ /tabela/slika/grafika/priloga) Informatika

Nauˇcna disciplina: ND Premetna odrednica/ kljuˇcne reˇci PO UDK ˇ Cuva se

Vaˇzna napomena VN Izvod

IZ Datum prihvatanja teme od NN ve´ca DP Datum odbrane DO ˇ Clanovi komisije: KO Predsednik:

Informacioni sistemi Java, Hibernate, JSF, JSP, CSS, HTML,Perzistencija

Biblioteka departmana za matemaiku i informatiku PMF-a u Novom Sadu Nema U radu je opisan razvoj aplikacije za izbor teme diplomskog rada uz pomo´c kojeg profesori mogu da objavljuju teme, a studenti da pregledaju i izaberu. Dato je modeliranje preko UML dijagrama i opis implementacije koja je izvrˇsena korˇs´cenjem tehnologija Hibernate i Java Server Faces. 10.5.2011

Dr. Miloˇs Rackovi´c, red. prof., PMF, Novi Sad

ˇclan:

Dr. Dragan Ivanovi´c, docent, FTN, Novi Sad

ˇclan:

Dr. Bojana Dimi´c Surla, docent, PMF, Novi Sad

UNIVERSITY OF NOVI SAD FACULTY OF SCIENCE KEY WORDS DOCUMENTATION Accession number: ANO Identification number:: INO Document type: DT Type of record: TR Content code: CC Author: AU Mentor/comentor: MN Title: TI Language of text: LT Language of abstract: LA Country of publication: CP Locality of publication: LP Publication year: PY Publisher: PU Publication place: PP Physical description: PD Scientific field: SF

Monograph publication Textual printed material Graduation thesis Damir Galas dr. Bojana Dimi´c Surla Web application for selecting theme for graduation thesis English srpski/engleski Serbia Vojvodina 2011 Author’s reprint Faculty of Science and Mathematics, Trg Dositeja Obradovi´ca 4, Novi Sad (5/38/4/0/12/0/0) (chapters/pages/literature/tables/ pictures/graphs/appendix) Informatics

Scientific discipline: SD Subject/Key words: SKW UC Holding data: HD Note: N Abstract:

AB Accepted by the Scientific Board: ASB Defended on: DE Thesis defend board: DB President:

Information Systems Java, Hibernate, JSF, JSP, CSS, HTML,Persistent

Library of Department of Mathematics and Informatics, Trg Dositeja Obradovi´ca 4 None The paper describes development of a Web application for selecting topics for graduate thesis. The application enables professors to publish available topics and students to search and select topics. The paper provides UML model and details of the system implementation using Hibernate and Java Server Faces technologies. May 10,2011

Ph.D. Miloˇs Rackovi´c, full proffesor, Faculty of Sciences, Novi Sad

Member:

Ph.D. Dragan Ivanovi´c, assistent professor, Faculty of Technical Sciences, Novi Sad

Member:

Ph.D. Bojana Dimi´c Surla, assistent professor, Faculty of Science, Novi Sad

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF