Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

Embed Size (px)

Citation preview

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    1/131

    UNIVERZITET U BEOGRADU

    FAKULTET ORGANIZACIONIH NAUKA

    ZAVRNI (MASTER) RAD

    Razvoj generatora Spring aplikacija primenom

    Freemarker ablona i Hibernate okvira

    Strahinja Laeti

    BeogradNovembar, 2010

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    2/131

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    3/131

    i

    UNIVERZITET U BEOGRADU

    FAKULTET ORGANIZACIONIH NAUKAOdsek za informacione sisteme i tehnologije

    ZAVRNI (MASTER) RADRazvoj generatora Spring aplikacija primenom

    Freemarker ablona i Hibernate okvira

    Mentor: Kandidat:dr Sinia Vlaji, doc. Strahinja Laeti5/2008

    BeogradNovembar, 2010

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    4/131

    ii

    Komisija koja je pregledala rad

    kandidata LAETI(NEBOJA) STRAHINJE

    pod naslovom RAZVOJ GENERATORA SPRING APLIKACIJA PRIMENOMFREEMARKER ABLONA I HIBERNATE OKVIRA i odobrila odbranu:

    Mentor: dr Sinia Vlaji, docent

    _________________________________________

    lan: dr Saa Lazarevi, docent

    _________________________________________

    lan: dr Dragana Beejski Vujaklija, vanredni profesor

    _________________________________________

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    5/131

    iii

    Abstrakt:

    U ovom radu e biti predstavljen razvoj generatora web aplikacija realizovanih u Spring

    tehnologiji. Generator e biti projektovan korienjem Freemarker ablona i Hibernate okvira.

    Pored prikaza ovih tehnologija bie opisane i koristi i nedostaci korienja generatora kao

    metode razvoja softvera. Na kraju e detaljno biti prikazan ceo proces razvoja sopstvenog

    generatora aplikacija.

    Kljune rei: Generator web aplikacija, Spring, Freemarker, Hibernate

    Abstract:

    This paper will present development of Spring based web applications generator. The

    generator will be designed using Freemarker template and Hibernate framework. In addition,

    there will be described advantages and disadvantages of generator using as a software

    development method. In the final chapter the whole process of generator design will be

    presented in details.

    Keywords: Web applications generator, Spring, Freemarker, Hibernate

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    6/131

    iv

    Curriculum Vitae

    Osnovni podaci

    Ime: Strahinja Laeti Datum i mesto roenja: 28.06.1984, Beograd, Srbija Kuna adresa: Borivoja Stevanovia 37, 11050 Beograd, Srbija

    Telefon: 063/852-8621 E-mail: [email protected]

    Obrazovanje

    2008 - Fakultet organizacionih nauka, Odsek za informacione sisteme i tehnologije,Univerzitet u Beogradu, Diplomske (Master) studije

    2003 - 2008: Fakultet organizacionih nauka, Odsek za informacione sisteme i tehnologije,Univerzitet u Beogradu, diplomirao sa srednjom ocenom 9.23. Diplomski rad: Uporednipregled platformi za Data Mining, ocena 10

    1999 - 2003: III Beogradska gimnazija, prirodno-matematiki smer

    Radno iskustvo

    Decembar 2008 -

    Firma: Comtrade ITSSPozicija: Software developer

    Opis posla: Razvoj web aplikacija korienjem JavaEE, JBoss Seam i Hibernate tehnologija

    Jul 2007-Septembar 2007

    Firma: Politehniki Univerzitet Hong Kong (IASTE studentska praksa)Pozicija: Student pomonikOpis posla: Razvoj web aplikacija za potrebe Univerziteta korienjem MySQL, PHP iJavaScript tehnologija

    Sertifikati

    IBM InfoSphere Information Server Technical Professional

    TOEFL sertifikat (iBT 100/120)

    Tehnika znanja

    Programski i skript jezici : Java2SE, JEE, PHP, Freemarker, HTML, JavaScript, CSS

    Softverski okviri: JSF, RichFaces, Facelets, Hibernate, JBoss Seam, Spring

    Aplikacioni i web serveri: Apache web server, Tomcat, JBoss, GlassFish

    SUBP: Oracle, SQLServer, MySQL, PostgreSQL

    Razvojna okruenja: Eclipse IDE, NetBeans Operativni sistemi: Windows (XP, 7), Linux (Ubuntu)

    Ostali alati: Maven 2, SVN, Apache Ant, JasperReports, iReport, Pentaho Data Integration,IBM WebSphere Integration Developer, SPSS Clementine, Dreamweaver, MathLab

    Profesionalna interesovanja

    Projektovanje web aplikacija Dizajn baza podataka

    Analiza poslovnih procesa

    Data Mining

    Strani jezici

    Engleski (napredni nivo)

    Nemaki (poetninivo)

    Line osobine

    Ambiciozan, odgovoran, sistematian, komunikativan

    Ostale vetine i interesovanja

    Vozaka dozvola B kategorije, aktivan voza Atletika (prethodno profesionalno, dravni prvak 2005. godine), plivanje, klasina gitara,

    putovanja

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    7/131

    v

    SADRAJ:

    1. UVOD ................................................................................................................... 1

    2. GENERATORI APLIKACIJA ............................................................................... 3

    2.1. Osnovni elementi generatora .................................................................................................... 3

    2.2. Opravdanost pravljenja generatora .......................................................................................... 4

    3. SPRING WEB MVC .............................................................................................. 7

    3.1. Konfigurisanje i pokretanje kontejnera .................................................................................... 9

    3.2. MVC uzor ...................................................................................................................................10

    3.2.1. Klasa DispatcherServlet .....................................................................................................123.2.2. Kontroler .............................................................................................................................14

    3.2.3. Model i View .......................................................................................................................15

    3.2.4. Spring web MVC forme ......................................................................................................16

    4. FREEMARKER ABLON .................................................................................. 20

    4.1. ablon stranica .........................................................................................................................214.1.1. Oznake za umetanje ...........................................................................................................21

    4.1.2. FTL oznake .........................................................................................................................22

    4.1.3. Korisniki definisane direktive ............................................................................................25

    4.1.4. Funkcije ..............................................................................................................................264.1.5. Promenljive u Freemarker ablonu ....................................................................................274.1.6. Izrazi ...................................................................................................................................27

    4.1.6.1. Pristupanje promenljivim ............................................................................................27

    4.1.6.2. Operacije nad promenljivim ........................................................................................28

    4.1.6.3. Ugraene operacije....................................................................................................28

    4.2. Model podataka ........................................................................................................................30

    4.2.1. Tipovi promenljivih u modelu podataka ..............................................................................31

    4.3. Pokretanje Freemarker procesora ..........................................................................................32

    5. HIBERNATE OKVIR........................................................................................... 34

    5.1. Perzistencija..............................................................................................................................34

    5.2. ORM alati ...................................................................................................................................34

    5.3. Hibernate ORM ..........................................................................................................................35

    5.3.1. Arhitektura okvira ................................................................................................................35

    5.3.2. Konfiguracija okvira ............................................................................................................37

    5.4. Hibernate arhitektura generisanja proizvoda ........................................................................40

    5.4.1. Hibernate meta model ........................................................................................................40

    5.4.1.1. Konfiguracije ...............................................................................................................42

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    8/131

    vi

    5.4.2. Pokretanje Hibernate generatorabiblioteka hibernate-tool.............................................425.4.3. Ant ......................................................................................................................................43

    5.4.3.1. Datoteka za izgradnju .................................................................................................43

    5.4.3.2. Pokretanje Anta ..........................................................................................................46

    5.4.4. Ant zadatak ..............................................................................................46

    6. RAZVOJ SOPSTVENOG GENERATORA ......................................................... 49

    6.1. Razvoj Freemarker ablon stranica ........................................................................................506.1.1. Korisniki zahtevi ................................................................................................................50

    6.1.1.1. Sluajevi korienja ....................................................................................................506.1.1.2. Opis sluajeva korienja ...........................................................................................51

    6.1.2. Analiza ................................................................................................................................53

    6.1.2.1. Ponaanje sistema.....................................................................................................536.1.2.2. Struktura sistema ........................................................................................................57

    6.1.3. Projektovanje ......................................................................................................................59

    6.1.3.1. Arhitektura softverskog sistema .................................................................................59

    6.1.3.2. Projektovanje strukture softverskog sistemaDomenske klase ...............................606.1.3.3. Projektovanje poslovne logikesistemske operacije ................................................656.1.3.4. Projektovanje sloja za pristup podacimaDao klase ................................................726.1.3.5. Projektovanje kontrolera korisnikog interfejsa..........................................................826.1.3.6. Projektovanje korisnikog interfejsa ekranske forme ..............................................906.1.3.7. Projektovanje konfiguracionih datoteka ....................................................................107

    6.1.4. Implementacija .................................................................................................................115

    6.2. Razvoj generatora meta modela ...........................................................................................115

    6.3. Pokretanje generatora ...........................................................................................................117

    7. ZAKLJUAK.................................................................................................... 119

    LITERATURA ......................................................................................................... 121

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    9/131

    vii

    Lista slika:

    Slika 1: Opti model generatora aplikacija........................................................................................ 3Slika 2: Ulazi i izlazi iz generatora aplikacija ..................................................................................... 4

    Slika 3: Spring moduli [2]...................................................................................................................... 8

    Slika 4: JSP Model 2...........................................................................................................................11

    Slika 5: Prikaz procesa rada komponenti u Spring web MVC [6].................................................12

    Slika 6: Princip rada Freemarker ablona.......................................................................................20

    Slika 7: Arhitektura Hibernate okvira [9]...........................................................................................36

    Slika 8: Konfigurisanje Hibernate okvira..........................................................................................38

    Slika 9: Hibernate meta model [8].....................................................................................................40

    Slika 10: Dijagram zavisnosti u build.xml datoteci..........................................................................45

    Slika 11: Dijagram generikih sluajeva korienja poslovnih aplikacija....................................51Slika 12: Apstraktni domenski objekat i njegove veze...................................................................58

    Slika 13: Tronivojska arhitektura softverskog sistema...................................................................59

    Slika 14: ema baze podataka worldcup .........................................................................................60

    Slika 15: Arhitektura sloja poslovne logike......................................................................................68

    Slika 16: Struktura Dao uzora u generikoj aplikaciji.....................................................................73

    Slika 17: Funckionalnosti Spring kontrolera....................................................................................83

    Slika 18: Prikaz generike strukture jsp strana u Spring web aplikacijama...............................90

    Slika 19: Struktura i funkcije dispatcher-servlet.xml datoteke....................................................107

    Slika 20: Dijagram komponenti Spring aplikacije.........................................................................114

    Slika 21: Pikaz strukture direktorijuma za izvorne datoteke.......................................................118

    Slika 22: Pikaz strukture direktorijuma za pakovanje u war datoteku.......................................118

    Lista tabela:

    Tabela 1: Opis Sping oznaka za rad sa formama..........................................................................17

    Tabela 2: Atributi za definisanje kontroler bean-a..........................................................................19

    Tabela 3: Predefinisane direktive u Freemarker ablonu..............................................................24Tabela 4: Mapiranja veza u bazi podataka u veze u domenskim objektima ..............................62

    Tabela 5: Mapiranja tipova atributa i veza u HTML elemente......................................................91

    Tabela 6: Karakteristini atributi za tipove bean komponenti.....................................................108

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    10/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    1

    1. Uvod

    U vreme kada informacione tehnologije predstavljaju jednu od oblasti poslovanja koje se

    razvijaju velikom brzinom, postoji veliki broj firmi koje se bave razvojem softvera i koje sa

    istim kvalitetom mogu ispuniti zahteve klijenata. Presudan fakor za dobijanje posla postaje

    vreme (i cena koja opet zavisi od vremena) koje je potrebno da se projekat realizuje.

    Postavlja se pitanje kako vreme za izradu softvera skratiti, poveati produktivnost i tako biti

    ispred konkurencije.

    Na naem tritu softvera, veinu aplikacija koje se prave po porudbini klijenta ine

    poslovne aplikacije. Poslovne aplikacije predstavljaju informacioni sistem odreene firme, koji

    sadri poslovne podatke i operacije za manipulisanje tim podacima. Poslovni podaci su

    smeteni u nekoj od baza podataka i gotovo uvek postoji potreba za pregled, unos i izmenu

    tih podataka. Ove operacije nad podacima predstavlljaju osnovu za druge, sloenije

    operacije. Odatle se vemoe zakljuiti da su poslovne aplikacije donekle standardizovane i

    pojavljuje se tenjada se njihov razvoj automatizuje na odreeni nain.

    Ovaj rad e se fokusiratina razvoj softverske komponente koja e standardizovane operacije

    pregleda, unosa i izmene podataka generisati i tako znatno olakati i ubrzati proces razvoja

    softvera.

    U uslovima poslovanja velikih firmi poslovne aplikacije su obino distribuirane. Takoe

    Internet i posebno web, olakavaju upotrebu takvih aplikacija korienjem internet

    pretraivaa. Jedna od brzo razvijajuih i esto korienih tehnologija za razvoj web

    distribuiranih aplikacija je Spring okvir. Zbog toga e ova tehnologija biti upotrebljena u

    arhitekturi generisanih aplikacija.

    Predmet istraivanja ovog rada predstavlja proces razvoja sopstvenog generatora web

    aplikacija realizovanih u Spring tehnologiji. Tehnologije koje e se koristiti za razvoj

    generatora su Freemarker ablon i Hibernate okvir. Takoe postoji i potreba da se ispita

    opravdanost takvog pistupa razvoju softvera, tj. prednostii i nedostaci generisanja aplikacija

    nasuprot runom (manual) razvoju softvera.

    Iz predmeta istraivanjase mogu izvesti osnovni ciljevi istraivanja:

    Opisati tehnologiju Spring okvira

    Opisati tehnologiju Freemarker ablona

    Opisati tehnologiju Hibernate okvira

    Opisati proces razvoja sopstvenog generatora primenom opisanih tehnologija

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    11/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    2

    Ispitati potrebu i opravdanost za razvoj generatora aplikacija kao metode razvoja

    softvera

    Rad e biti organizovan u sedam poglavlja:

    U prvom poglavlju je dat Uvod u kojem su opisani predmet i ciljevi istraivanja.

    U drugom poglavlju rada bie ukratko opisani generalni principi na kojima se zasnivaju svi

    generatori aplikacija. Takoe e biti opisane i koristi od razvoja generatora i uslovi pod kojim

    ne bi trebalo da se koriste.

    U treem poglavlju e biti predstavljen Spring okvir (verzija 3.0) sa naglaskom na njegov

    modul web MVCkoji e biti upotrebljen za arhitekturu generisanih aplikacija.

    etvrto poglavlje e biti posveeno Freemarker ablonu kao tehnologiji na kojoj e se baziratiablon stranice upotrebljene u razvoju generatora. Bie detaljno opisan njegov princip rada,

    struktura i najee koriene instrukcije.

    Peto poglavlje e se fokusirati na jo jednu tehnologiju koja e se koristiti za razvoj

    sopstvenog generator. To je Hibernate okvir. Pregled osnovnih karakteristika ove tehnologije

    e biti dat u kratkim crtama dok edetaljnije biti opisana Hibernate arhitektura za generisanje

    razliitih proizvoda.

    U estom poglavlju e biti prikazan procesrazvoja sopstvenog generatora aplikacija. ablon

    stranice e bitiprojektovane korienjem tronivojske arhitekture i Larmanove metode razvoja

    softvera.

    U poslednjem poglavlju su data zakljuna razmatranja o opisanim tehnologijama i o procesu

    razvoja generatora.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    12/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    3

    2. Generatori aplikacija

    2.1. Osnovni elementi generatora

    Generator aplikacija predstavalja softversku komponentu koja slui za automatizovano

    pravljenje drugih softverskih komponenti [1].

    Svaki generator koristi odreeni ulaz i na osnovu definisanih pravila generie izlaz iz

    generatora (slika 1).

    ULAZ GENERATOR IZLAZ

    Slika 1: Opti model generatora aplikacija

    Najee korieni ulazi u generator su model podataka i ablon stranice.

    Model podatakapredstavlja skup podataka, njihovih tipova i meusobnih veza. Moe biti dat

    u vidu xml datoteke u kojoj su definisane tabele i polja baze podataka (xml definicija modela),

    kao fiziki objekti baze podataka sa kojima se ostvaruje konekcija ili proizvoljni domenski

    objekti (npr. Java Entity klase).

    ablon stranicepredstavljaju tekstualne datoteke koje se sastoje iz statikih delova - koje

    iniproizvoljni tekst i dinamikih delova - koji su predstavljeni oznakama specifinim za dati

    ablon i koji se menjaju u zavisnosti od modela podataka. Za ablon stranice se mogu

    koristiti tehnologije kao to su HTML, JSP, ASP, Freemarker, Velocity i mnoge druge.

    Generator, koji se jonaziva i procesor ablona, koristi dati model podataka i ablonske

    stranice, integrie ih na taj nain to odgovarajue podatke modela postavlja u za to

    oznaena mesta na ablon stranicama i proizvodi odgovarajui izlaz. Neki od iroko

    primenjenih procesora ablona su Freemarker template i Apache Velocity. Vie o

    Freemarker-u bie opsiano u poglavlju 4.

    Izlaz iz generatora moe biti HTML stranica, Java izvorni kod, sql skripta, XML definicija ili

    datoteka sa dokumentacijom.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    13/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    4

    Na slici 2 su prikazani najee korieni ulazi i izlazi iz generatora.

    MODEL PODATAKA

    XML DEFINICIJA MODELA

    EMA BAZE PODATAKA

    DOMENSKE KLASE

    GENERATOR

    ABLON STRANICE

    DDL

    DOMENSKE KLASE

    XML DEFINICIJEMODELA

    POSLOVNALOGIKA

    KORISNIKIINTERFEJS

    TEST KLASE

    DOKUMENTACIJA

    Slika 2: Ulazi i izlazi iz generatora aplikacija

    2.2. Opravdanost pravljenja generatora

    Pre nego to se pristupi razvoju generatora potrebno je razmotriti potrebu i opravdanost

    takvog reenja kao i prednosti i nedostatke naspram runog razvoja aplikacije. Takoe u

    sluajevima kad su generatori aplikacija vekorieni na prethodnim projektima potrebno je

    ispitati i mogunost izmene i prilagoavanja postojeih generatora.

    Koristi od korienja generatora naspram runog pravljenja aplikacije se mogu ukratko

    opisati na sledei nain [1]:

    Upotreba generatora znaajno skra

    uje vreme potrebno za razvoj aplikacije i

    poveava produktivnost.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    14/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    5

    Ovo moe biti veoma znaajno kada je vreme kritian faktor realizacije projekta,

    kod projekata sa velikim brojem funkcionalnosti i tabela u bazi podataka.

    Poveava kvalitet programskog koda.

    Dobro napravljen generator generie standardizovani kod i doprinosi

    konzistentnosti imenovanja datoteka, metoda i promenljivih. Standardizacijom

    koda se stvara dobra praksa i pravila kodiranja koja kasnije mogu postati

    standard za razvojni tim. Standardi kodiranja kasnije omoguavaju lake

    snalaenje u programskom kodu i breukljuivanje novih lanova tima u tekui

    projekat.

    Eliminie monotoniju u radu.

    Ovo je veoma bitan faktor koji utie direktno na produktivnost zaposlenih. Pisanje

    velike koliine slinog i ponavljajueg koda dovodi do monotonije u radu i

    nezainteresovanosti. Nasuprot tome projektujui generator, radnici su motivisaniji

    jer rade na zanimljivom, kreativnom i jedinstvenom poslu, time proirujui svoja

    inenjerska znanja i iskustva.

    Mogunost ponovne upotrebe (reusability).

    Jednom dobro napravljen generator se sa odreenim izmenama moe koristiti i u

    novim projektima sline strukture. Veina poslovnih aplikacija zahteva operacije

    itanja, upisivanja i izmene podataka tako da deo generatora koji je zaduen zaove operacije moe ostati neizmenjen. Izmene se najee ogledaju samo u

    dizajnu korisnikog interfejsa, tj. delu aplikacije koji korisnik vidi i sa kojim je u

    interakciji.

    Mogunostviestruke upotrebe.

    Jedan generator snabdeven sa odgovarajuim modelom podaka moe se koristiti

    za generisanje programskog koda, baze podataka (DDL-a), xml datoteka sa

    definicijama modela, dokumentacije i drugih proizvoda.

    Omoguava jedinstvenu ulaznu taku za promene.

    Masovne promene na brojnim mestima u aplikaciji zahtevaju samo izmenu u

    odgovarajuim ablonima i ponovno startovanje generatora.

    Smanjuje mogunost greaka.

    Manuelnim kodiranjem esto nastaju sintaksne greke koje kompajler ne moe, ili

    bar ne dovoljno precizno, da definie (na primer na prezentacionom sloju) i koje

    zahtevaju dosta vremena da bi se oktrile. To je posebno sluaj sa pisanjem koda

    koji ve negde postoji u slinom obliku kada inenjeri obino pribegavaju

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    15/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    6

    copy/pastemetodi. Eliminisanjem sintaksnih greaka, generator koda omoguava

    da se vie vremena posveti funkcionalnom testiranju aplikacije.

    Omoguava uporeivanje razliitih pristupa.

    Generatori omoguavaju da se na brz i lak nain probaju razliite implementacije

    pre samog poetka realizacije projekta i tako testiraju i uporede performanse i to

    samo promenom napravljenih ablona.

    Razdvaja poslovnu logiku od prezentacione tehnologije.

    Konkretna prezentaciona tehnologija predstavljena ablon stranicama je potpuno

    nezavisna od tehnologije kojom je predstavljena poslovna logika. ablon stranice

    mogu ostati nepromenjene u sluaju da se promeni programski jezik, tehnologija

    ili okvir (framework) poslovne logike i tako doprinosi portabilnosti (portability)

    sistema.

    Meutim generatori mogu predstavljati i ma sa dve otrice. Potrebno je obratiti panju na

    sluajeve kada mogu proizvesti vie problema nego koristi. Pre poetka realizacije projekta

    potrebno je izdvojiti odreeno vreme i analizirati da li takav pristup odgovara specifinostima

    samog projekta. Ovde emo se osvrnuti na sluajeve kada generatori ne predstavljaju

    optimalno reenje:

    Kada obim posla nije dovoljno veliki da bi pravljenje generatora bilo isplativo u smislu

    vremena i resursa

    Kada deo aplikacije koji treba generisati nije jedan od slojeva sa dobro poznatom i

    razraenom strukturom. Na primer, generisanje domenskih klasaje olakano poto je

    njihova struktura poznata, tj. zna se da one sadre atribute i metode za pristupanje

    tim atributima. To omoguava konstrukciju generikog domenskog objekta, tj. ablon

    stranice za domenski objekat.

    Kada skup osobina ili dizajn aplikacije nisu dovoljno precizno definisani unapred ili se

    esto menjaju

    Za delove aplikacije koji nisu ablonski, tj. koji su jedinstveni. Tipian primer je

    stranica za logovanje korisnika u web aplikaciju. Logika koja je zaduena za ovu

    stranicu obuhvata validaciju korisnike ifre i lozinke, proveru privilegija korisnika i

    kreiranje web sesije (web session). Ove funkcionalnosti su jedinstvene za login

    stranicu pa bi pravljenje ablona za nju bilo neefikasno.

    Iz svega navedenog moe se zakljuiti da generatori mogu predstavljati veliku vrednost za

    jedan razvojni tim ali da je ipak temeljnom analizom pre svakog projekta potebno ispitati

    razloge za i potiv ovakvog reenja.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    16/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    7

    3. Spring web MVC

    Spring okvir predstavlja Java platformu koja obezbeuje sveobuhvatnu infrastrukturnu

    podrku razvoju kako standardnih tako i web aplikacija [2].

    Spring okvir je lagani (lightweight) kontejner, aspektno orijentisan i zasnovan na IoC

    (Inversion of Control) principu [3]. Znaenje pojedinih karakteristika Spring okvira je sledee:

    Spring je kontejnerto znai da upravlja konfiguracijom i ivotnim ciklusom objekata

    aplikacije.

    Spring je lagani kontejner u smislu da sa poslovnim objektima radi na nenametljiv

    (non-invasive) nain. To znai da poslovni objekti ne zavise od samog kontejnera tj.

    ne moraju da nasleuju klase ili implementiraju interfejse specifine za kontejner.

    IoC principomoguava slabu povezanost izmeu objekata na nivou implementacije.

    To u sluaju Spring okvira znai da poslovni objekti aplikacije kojima upravlja Spring

    kontejner nisu zadueni za kreiranje drugih objekata sa kojima sarauju i od kojih

    zavise veto umesto njih radi kontejner.

    Spring je aspektno orijentisanto znai da omoguava razdvajanje poslovne logike

    aplikacije od sistemskih servisa (npr. upravljanje transakcijama).

    Jedna od najbitnijih karakteristika Spring okvira je njegova modularnost, koja omoguava da

    se prilikom projektovanja aplikacije ne koristi celokupni okvir, ve samo oni moduli koji su

    potrebni u specifinoj situaciji. Spring okvir se sastoji od 20-ak modula smetenih u odreene

    grupe. Na slici 3 je dat gafiki prikaz Spring modula.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    17/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    8

    Slika 3: Spring moduli [2]

    Corekontejnerje najvaniji isadri osnovne module za rad sa Spring okvirom. Core i Beans

    moduli omoguavaju korienje IoC principa. Context modul nasleuje osobine Beans

    modula i omoguava pristupanje objektima kroz kontekst aplikac ije, internacionalizaciju

    aplikacije i podrku za JavaEE komponente. Expression Language modul obezbeuje izrazni

    jezik (expression language) za manipulaciju objektima u vreme izvravanja aplikacije.

    Data Acess/Integration moduli omoguavaju upotrebu JDBC- kroz apstraktne interfejse,integraciju sa ORM alatima, korienje poruka (messages) i upravljanje transakcijama.

    Web moduli obuhvataju Spring implementaciju MVC uzora za web aplikacije, web orijentisan

    aplikacioni kontekst i podrku za integraciju Struts okvira u Spring aplikaciju.

    Test modul omoguava testiranje Spring aplikacije korienjem JUnit i TestNG alata.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    18/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    9

    3.1. Konfigurisanje i pokretanje kontejnera

    U Spring terminologiji, svi objekti aplikacije kojima upravlja Spring IoC kontejner nazivaju se

    bean-ovi (beans).

    Interfejs org.springframework.beans.factory.BeanFactory i njegov podinterfejs

    org.springframework.context.ApplicationContext predstavljaju sr IoC

    mehanizama i zadueni su za kreiranje, konfigurisanje i povezivanje bean-ova na osnovu

    konfiguracionih metapodataka. Metapodaci se mogu predstaviti u obliku xml datoteka,

    anotacija ili Java koda.

    U sledeem delu koda prikazana je osnovna struktura xml datoteka za konfigurisanje bean-

    ova.

    Pokretanje Spring kontejnera vri se na osnovu definisane konfiguracione datoteke i

    konkretne implementacije BeanFactoryili ApplicationContextinterfejsa.

    U delu koda koji je nie naveden prikazan je jedan od naina pokretanja kontejnera

    korienjem klase ClassPathXmlApplicationContext koja implementira

    ApplicationContextinterfejs.

    ApplicationContext spring = new

    ClassPathXmlApplicationContext("appContext.xml");

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    19/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    10

    U appContext.xml datoteci se nalaze konfiguracije bean-ova i pri pokretanju kontejnera ona

    mora da se nalazi u classpath1putanji aplikacije.

    Prilikom pokretanja kontejnera, Spring vri validaciju konfiguracije bean-ova i kreira po jedno

    pojavljivanje za bean-ove iji je opseg oznaen kao singleton2,dok ostale bean-ove kreira na

    zahtev korisnika.

    U web aplikacijama konfigurisanje i pokretanje kontejnera se vri pomou datoteke web.xml.

    Primer ove datoteke je prikazan u sledeem delu koda:

    contextConfigLocation

    /WEB-INF/appContext.xml

    org.springframework.web.context.ContextLoaderListener

    ApplicationContext objekat koji je na ovaj nain kreiran od strane

    ContextLoaderListener klase smeta se u ServletContext objekat web aplikacije.

    Objekat klase ContextLoaderListener prilikom pokretanja web aplikacionog konteksta

    trai datoteku appContext.xml unutar WEB-INF direktorijuma.

    3.2. MVC uzor

    MVC predstavlja softverski uzor i sastoji se od tri osnovne komponente [4]:

    Model (Model) je komponenta koja sadri strukturu poslovnog sistema i njene

    operacije, odnosno, sadri podatke i operacije za obradu podataka.

    Pogled (View) komponenta obezbeuje korisniki interfejs preko koga korisnik

    komunicira sa sistemom. Takoe, on alje korisniku izvetaje koji se dobijaju iz

    modela.

    Kontroler (Controller) je komponenta koja je zaduena da upravlja izvravanjem

    sistemskih operacija. Ona prihvata zahtev od klijenta, nakon toga poziva operaciju

    1classpathputanja na osnovu koje Java virtuelna maina (JVM) pronalazi klase (class datoteke) Java

    aplikacija. Putanja moe da se postavi korienjem classpath opcije prilikom poziva nekog Java alata ilipostavljanjem sistemske CLASSPATH promenljive.2Ukoliko je opseg bean-a definisan kao singleton, kontejner e kreirati samo jedno pojavljivanje bean -a za ivotni

    vek aplikacije, tako da e pri svakom zahtevu za takvim bean-om biti vraeno isto pojavljivanje bean-a. Singletonpredstavlja podrazumevani opseg bean-a

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    20/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    11

    koja je definisana u modelu i kontrolie njeno izvravanje. Rezultat izvrene operacije

    on dalje preko view-a nazad alje do klijenta.

    U kontekstu web aplikacija MVC uzor se grafiki moe predstaviti na sledei nain[5]:

    Web pretraiva

    Pogled

    (JSP)

    Kontroler(Servlet)

    Model(JavaBeans)

    Bazapodataka

    zahtev

    odgovor

    bira iprosleuje

    kreira

    Aplikacioni server Server baze podataka

    Slika 4: JSP Model 2

    Na slici 4 se uoava postojanje kontroler servleta koji presree klijentske zahteve, poziva

    poslovne operacije iz modela i odluuje na koju JSP stranu treba preusmeriti prikaz.

    Spring web MVC funkcionie na slian nain s tim to zahteva postojanje jednog centralnog

    kontroler servleta koji e predstavljati jedinstvenu ulaznu taku u web aplikaciju (slika 5). Ova

    komponenta je realizovana preko klase DispatcherServlet. Centralni kontroler potom

    delegira odgovornosti za obradu klijentskog zahteva (request) ostalim kontrolerima,

    realizovanim preko klase Controller, koji pribavljaju model, izvravaju poslovne operacije

    nad njim i rezultujui model vraaju centralnom kontroleru. Pored modela kontroleri vraaju i

    logiko ime pogleda koji treba prikazati kao rezultat korisniku. Na osnovu logikog imena

    pogleda vri se preslikavanje ka konkretnoj realizaciji pogleda i na taj nain se omoguava

    potpuna razdvojenost poslovne logike i konkretne prezentacione tehnologije. Na kraju se

    korisniku kao odgovor (response) prikazuje konkretna stranica sa atributima sadranim u

    modelu.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    21/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    12

    Slika 5: Prikaz procesa rada komponenti u Spring web MVC [6]

    3.2.1. Klasa DispatcherServlet

    Klasa org.springframework.web.servlet.DispatcherServlet je u stvari servlet(izvedena je iz klase javax.servlet.http.HttpServlet) i to je jedini servlet koji je

    potrebno deklarisati u opisivau rasporeda3 (deployment descriptor) web aplikacije. Takoe

    je potrebno opisati i preslikavanja zahteva ka ovom servletu. Sledi prikaz deklaracije u

    web.xml datoteci:

    contextConfigLocation

    /WEB-INF/conf/applicationContext.xml

    org.springframework.web.context.ContextLoaderListener

    dispatcher

    3Opisivaraposreda je xml datoteka koja opisuje strukturu aplikacije, njene komponente, parametre za

    inicijalizaciju i sigurnosna ogranienja, dakle sve to je potrebno da aplikacioni server zna o aplikaciji

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    22/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    13

    org.springframework.web.servlet.DispatcherServlet

    contextConfigLocation

    dispatcher

    *.htm

    Iz prikazanog dela koda se vidi da e svi zahtevi za stranicama sa ekstenzijom htm biti

    obraeni od strane centralnog kontrolera koji se u ovom sluaju naziva dispatcher i koji

    predstavlja objekat klase org.springframework.web.servlet.DispatcherServlet.

    Spring omoguava hijerarhijsko dekomponovanje aplikacionih konteksta (application

    context), tako to omoguava da se svaki nivo konteksta fokusira na odreeni deo aplikacije.

    Za svaki nivo konteksta potrebna je po jedna xml datoteka za kofiguraciju njegovih bean-ova.

    U prethodnom primeru je prikazano da e datoteka applicationContext.xml biti zaduena za

    bean-ove u poslovnoj logici aplikacije dok e datoteteka [nazivDispatcherServleta]-

    servlet.xml (u naem primeru dispatcher-servlet.xml) biti zaduena za bean-ove u web sloju

    aplikacije.

    U okviru aplikacionog konteksta koji se kreira za klasu DispatcherServlet, u datoteci

    dispatcher-servlet.xml, mogue je definisati jo neke bean-ove koji e se koristiti za

    modelovanje toka obrade zahteva:

    HandlerMapping - Odgovoran je za odreivanje odgovarajueg kontrolera kome e

    zahtev biti prosleen

    ViewResolver - Omoguava preslikavanje logikih imena pogleda (View) u stvarne

    poglede

    LocaleResolver - Komponenta koja omoguava lokalizaciju

    MultipartResolver - Omoguava slanje (upload) datoteka na server korienjem HTTP

    protokola

    ThemeResolver - Omoguava korienje tema

    HandlerExceptionResolver - Prua podrku za preslikavanje izuzetaka

    Controller - Predstavlja komponentu MVCokvira

    HandlerInterceptor - Omoguavapresretanje dolazeeg HTTP zahteva

    Validator - Omoguava validaciju polja na formi

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    23/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    14

    3.2.2. Kontroler

    Kontroler je komponenta Spring web MVC okvira koja implementira interfejs

    org.springframework.web.servlet.mvc.Controller. Ona je zaduena za

    izvravanje konkrentne poslovne operacije, odreivanje koji e pogled (View) biti prosleen

    korisnkiu i slanje rezultujueg modela tom pogledu. U sledeem delu koda je prikazan

    interfejs Controller:

    package org.springframework.web.servlet.mvc;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.ModelAndView;

    public interface Controller

    {

    public abstract ModelAndView handleRequest(HttpServletRequest request,

    HttpServletResponse response) throws Exception;

    }

    U najveem broju sluajeva je dovoljno samo implementirati metodu handleRequestkoja

    kao parametre prihvata HttpServletRquest i HttpServletResponse objekte. Odatle

    se primeuju zajednike osobine obinih servleta i konrolera. Kao i obian servlet i kontroler

    moe da vrati direktno odgovor korisniku, postavljanjem nullkao povratne vrednosti umesto

    pojavljivanja klase ModelAndView.

    Svaki od kontrolera u aplikaciji je zaduen za rukovanje jednom ili vie web stranica.

    Preslikavanje zahteva za stranicama ka odgovarajuim kontrolerima vri se u odgovarajuoj

    xml datoteci za definiciju bean-ova, korienjem neke od implementacija interfejsa

    HandlerMapping.

    loginController

    viewMatchesController

    editMatchController

    viewTeamsController

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    24/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    15

    editTeamController

    viewRefereesController

    editRefereeController

    U prethodnom delu koda je koriena klasa SimpleUrlHandlerMappingkoja je najea

    implementacija interfejsa HandlerMapping. Ona omoguava preslikavanje zahteva za

    stranicama ka kontrolerima eksplicitnim mapiranjem naziva stranica u identifikator bean-a

    koji definie kontroler.

    Tako na primer, zahtev za stranicom login.htme biti obraen od strane kontrolera koji je

    definisan bean-om sa identifikatorom loginController.

    3.2.3. Model i View

    Model i View u Spring MVC-u su predstavljeni klasom

    org.springframework.web.servlet.ModelAndView koju kontroleri definiu kao

    povratnu vrednost nakon obrade korisnikog zahteva. Ova klasa sadri informacije o pogledu

    koji e biti vraen korisniku i podacima koji e mu se prikazati.

    Model je predstavljen mapom (klasa java.util.Map) koja sadri nazive poslovnih objekata

    i njihove vrednosti. Zavisno od konkretne tehnologije prikaza model je kao atribut dostupan

    na korisnikoj strani u odreenom formatu.

    Pogled (View) moe predstavljati objekat kao konkretnu implementaciju interfejsa

    org.springframework.web.servlet.Viewili logiki naziv pogleda koji se preslikava u

    konkretan pogled na osnovu bean-ova za preslikavanje logikih naziva pogleda

    (ViewResolver).

    U prethodnom delu koda je dat prikaz preslikavanja logikih naziva pogleda u konkretan

    pogled, iz dispatcher-servlet.xml datoteke, korienjem klase

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    25/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    16

    InternalResiurceViewResolver. Logikim nazivima pogleda se dodaju vrednosti prefix

    i suffix elemenata tako da e na primer logiko ime login biti preslikano u stranicu /WEB-

    INF/login.jsp

    3.2.4. Spring web MVC forme

    U web aplikacijama prikaz i unoenje podataka se ostvaruje korienjem HTML formi. Spring

    web MVC nudi mnotvo razliitih, hijerarhijski povezanih kontrolera koji omoguavaju

    automatizaciju procesa rada sa formama: preuzimanje podataka sa forme, direktno

    povezivanje polja na formi sa atributima Java objekata, validaciju i transformaciju podataka

    itd. U standardnim web aplikacijama najee korien kontroler je SimpleFormController.

    Jedan kontroler koji nasleuje klasu SimpleFormController zaduen je za rukovanje

    jednom HTML formom. Jedna HTML forma je zaduena za operacije nad jednim Java

    objektom koji se u kontekstu Spring web MVC-a naziva komandni bean. Nakon potvrivanja

    forme (submit) vrednosti polja sa forme postaju parametri HTTP zahteva (HTTP request).

    Jedna od najbitnih karakteristika koje SimpleFormController omoguava je direktno

    povezivanje atributa (data binding) komandnog bean-a sa HTML poljima na formi. Ovakvo

    povezivanje podataka u Springu se realizuje pomou klaseorg.springframework.validation.DataBinder. Proces povezivanja polja sa forme

    sa atributima komandnog bean-a podrazumeva transformaciju parametara iz zahteva, koji

    mogu da budu jedino tipa String, u odgovarajui tip atributa komandnog bean-a. Ova

    transformacija se uglavnom deava automatski osim kod korisniki definisanih klasa i

    datumskih klasa kada je potrebno koristiti neki od Springovih ili korisniki definisanih editora

    osobina (property editors).

    Za korienje formi Spring nudi podrku u vidu dodatnih oznaka (tag) u formatu

    . Njihov opis je dat u tabeli 1:

    bind Omoguava povezivanje jednog polja na HTML formi sa jednim

    atributom komandnog bean-a. Atribut se specificira parametrom path,

    kaopath = nazivKomandnogBeana.nazivAtributa.

    Tom prilikom kreira se objekat klase BindStatus, koji je na stranici

    dostupan pod imenom status. Objekat status sadri parametre

    expression, value i errorMessages koji pruaju informacije o imenu,

    vrednosti i eventualnim grekama vezanim za atribut koji se povezuje

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    26/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    17

    nestedPath Definie komandni bean-a za koji e biti vezani svi bind elementi, tako

    to se vrednost path atributa nestedPath elementa koristi kao prefiks

    path atributa bind elementa

    hasBindErrors Proverava da li komandni objekat ili njegov atribut sadre validacionu

    grekutransform Daje mogunost ne-komandnim objektima da budu transformisani

    pomou editora osobina na isti nain kao i komandni objekti

    messages Omoguava korienje poruka definisanih u eksternim datotekama na

    odgovarajuem jeziku zavisno od lokala

    theme Koristi se za pronalaenje teme (theme) na osnovu kljua definisanog

    kao parametar elementa

    Tabela 1: Opis Sping oznaka za rad sa formama

    Korienje ovih oznaka zahteva dodavanje sledee direktive koja ukljuuje potrebne

    biblioteke oznaka na vrh jsp strane:

    Na sledeem primeru je dat prikaz dela jsp strane koja sadri formu za unos novog Team

    domenskog objekta i koja koristi opisane Spring oznake.

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

    -name : String

    Team

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    27/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    18

    Kontroler koji proiruje SimpleFormController i koji je zaduen za manipulaciju Team

    komandnim bean-om prikazan je u sledeem delu koda:

    public class EditTeamController extends SimpleFormController {

    private TeamManager teamManager;@Override

    protected ModelAndView onSubmit(HttpServletRequest request,

    HttpServletResponse response, Object command, BindException errors) {

    ModelAndView mav = new ModelAndView(getSuccessView());

    Team t;

    String param = request.getParameter("teamId");

    if (param != null && !param.equals("")) {

    t = teamManager.update((Team) command);

    } else {

    t = teamManager.create((Team) command);

    }

    mav.addObject(t);

    return mav;

    }

    protected Object formBackingObject(HttpServletRequest request)

    throws Exception {

    Team team;

    String param = request.getParameter("teamId");

    if (param != null && !param.equals("")) {

    Long teamId = Long.parseLong(param);

    team = teamManager.findTeamById(teamId);

    } else {

    team = new Team();

    }

    return team;

    }

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

    Dve najvanije metode ovog kontrolera su onSubmiti formBackingObjectmetode.

    Metoda formBackingObject se automatski poziva neposredno pre nego to se stranica

    uita i koristi se za inicijalizaciju komandnog bean-a i povezivanje njegovih vrednosti sa

    poljima na formi. Atributi ovog bean-a mogu biti postavljeni na podrazumevane (default)

    vredosti (u sluaju kad je forma za kreiranje novog objekta) ili na ve postojee vrednosti

    uitane iz tabele baze podataka (u sluaju da je forma za izmenu postojeeg objekta).Metoda onSubmit se automatski poziva nakon potvrivanja forme. Ona kao parametar prima

    komandni objekat sa ve postavljenim vrednostima atributa preuzetih iz paremetara HTTP

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    28/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    19

    zahteva. Obino se koristi za snimanje komandnog bean-a u bazu podataka a kao povratnu

    vrednost vraa pogled koji e korisniku biti prikazan nakon potvrivanja forme.

    Definicija prikazanog kontrolera u dispatcher-servlet.xml datoteci je data u sledeem delu

    koda:

    U tabeli 2 su objanjene nejee korienih atributa za definiciju kontrolera kao bean-a:

    id Jedinstveni identifikator kontroler bean-a

    class Java klasa kojom je implementiran kontroler

    sessionForm Mogue vrednosti su true i false. Pokazuje da li komandni

    bean treba da bude sauvan u sesiji izmeu prikaza forme i

    potvrivanja forme

    commandName Naziv komadnog bean-a za iju manipulaciju je kontroler

    zaduen

    commandClass Java klasa kojom je implementiran komandni bean

    formView Logiko ime stranice sa formom koja je inicjialno prikazana

    korisniku

    successView Logiko ime stranice koja e biti prikazana korisniku nakon

    uspenog potvrivanja forme

    [nazivAtributaKontrolera]-ref Identifikator bean-a komponente na koju kontroler referencira.

    Moe ih biti vie

    Tabela 2: Atributi za definisanje kontroler bean-a

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    29/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    20

    4. Freemarker ablon

    Freemarker je procesor ablona (template engine) zasnovan na Java programskom jeziku

    koji podrava upotrebu MVC softverskog uzora. Procesor ablona predstavlja softversku

    komponentu koja generie tekst (HTML, sql skripte, Java izvorni kod, itd) zasnovan na

    ablonu.

    Iako moe da generie razliite teskstualne izlaze, Freemarker se najee koristi za

    generisanje HTML stranica kod web aplikacija zasnovanih na MVC uzoru. Time je

    omogueno dizajnerima da menjanju izgled stranica bez potrebe da softver inenjeri menjaju

    kod aplikacije, poto su na taj nain aplikaciona logika (Java kod) i izgled stranica

    (Freemarker abloni) razdvojeni i nezavisni.

    Na slici 6 je prikazana osnovna ema transformacije Freemarker procesora kod

    projektovanja web aplikacija zasnovanih na MVC uzoru. Sa jedne strane se nalaze ve

    napravljene Freemarker ablonske stranice a na drugoj Java programski kod. Java kod

    predstavlja model podataka koji sadri atribute i njihove vrednosti. Freemarker procesor

    koristi pripremljene promenljive prosleene iz Java klasa, umee njihove vrednosti u

    ablonske stranice i kao rezultat prikazuje statike HTML stranice [7]. Ova transformacija je

    prikazana na slici 6.

    .. Zdravo ${ime}!...

    .. osoba.ime = Pera;...

    .. Zdravo Pera!...

    Slika 6: Princip rada Freemarker ablona

    ablon stranice se uvaju na web serveru, bakao to bi se uvao i statiki HTML i svaki put

    kada se pristupi web stranici Freemarker procesor e ablon stranu transformisati u HTMLstranu, zamenjujui deo oznaen sa ${ . . .} odgovarajuim sadrajem.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    30/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    21

    Iz navedenog se moe zakljuiti da se osnova rada svakog ablonskog procesora pa i

    Freemarker ablona moepredstaviti izrazom:

    ablon stranica + Model podataka = Izlaz

    4.1. ablon stranica

    Osnovni gradivni elementi Freemarker ablona su:

    Oznake za umetanje ija je sintaksa predstavljena izrazom ${ . . . } mesta sa

    ovakvim oznakama u ablonu e u vreme procesiranja ablona biti zamenjenaizraunatim vrednostima prosleenim iz modela podataka.

    FTL4oznake poinju # karakterom. One predstavljaju ili neke od Freemarker-ovih

    ugraenih instrukcija ili korisniki definisane instrukcije. Nakon procesiranja ablona,

    FTL oznake nee biti prikazane na stranici vesamo rezultat njihovog izvrenja. FTL

    oznake se jozovu i direktive.

    Komentari u Freemarker ablonu su slini HTML komentarima. Oni se predstavljaju

    oznakama . Sve to se nalazi izmeu ove dve oznake kao i same oznake

    nee biti obraene od strane procesora niti prikazani na izlaznoj stranici.Statiki tekstkoji e biti prikazan na stranici kao takav predstavlja sve ostalo to nisu

    FTL oznake, direktive i komentari i on nee biti interpretiran od strane Freemarker-a.

    4.1.1. Oznake za umetanje

    Format oznaka za umetanje je ${izraz}, gde izraz mogu predstavljati razliite vrste izraza

    (npr. ${100 + x}) ili promenljive prosleene iz modela (npr. ${property.name}).

    Oznake za umetanje se koriste za tampanje vrednosti izraza pretvorene tekst (string) na

    stranici. Osnovno ogranienje ovih oznaka je da se ne smeju koristiti unutar FTL oznaka. Na

    primer, sledei izraz je sintaksno pogrean jer se unutar FTL oznaka koriste oznake za

    umetanje:

    [#if ${property.name != idField}]

    [/#if]

    4FTL je skraenica od Freemarker Teamplate Language

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    31/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    22

    Umesto toga treba koristiti:

    [#if property.name != idField]

    [/#if]

    Rezultat izraza, kada eli da se tampa na stranici, mora biti string, broj ili datum zato to se

    jedino brojevi i datumski tipovi mogu transformisati u string automatski. Ostali tipovi kao to

    su boolean ili kolekcije moraju se na neki nain runo pretvoriti u string. U suprotnom e

    Freemarker prijaviti greku i zaustavie procesrianje ablona.

    Na primer, sledei izraz e prouzrokovati greku i nee prikazati vrednost tipa trueili false.

    ${property.name == idField}

    Da bi se ovo ispravilo moe se koristiti Freemarkerova ugraena funkcija za pretvaranje

    boolean vrednosti u string, na sledei nain:

    ${(property.name == idField)?string(true, false)}

    4.1.2. FTL oznake

    FTL oznake ili direktive imaju sledeu strukturu:

    U sluaju da direktiva nema ugnjedeni sadraj krajnja oznaka se ne koristi. Primer

    korienja direktivi dat je u sledeem delu koda:

    5

    Pojoprestavlja Hibernate referencu na apstraktni omenski objekat koji de obiti svoju konkretnu vrednostnakon procesiranja ablona oreenim moelom poataka. Metoa getAllPropertiesIterator() vrada sve

    atributepojo objekta. Metodepojo objekta se po potrebi mogu ugnjeiti u Freemarker ablon ali nede biti

    detaljnije razmatrane u ovom poglavlju jer nisu deo Freemarker instrukcija.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    32/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    23

    FT

    FTL oznake moraju biti pravilno ugnjedene. Tako da na gornjem primeru i poetna i krajnja

    oznaka direktive moraju biti unutar oznaka. HTML oznake ne moraju biti

    pravilno ugnjedene u FTL oznake jer ih Freemarker procesor ne obrauje.

    Neke od najee korienih predefinisanih direktiva u Freemarker ablonu su prikazane u

    tabeli 3:

    Opis direktive Primer korienja

    ...

    ...

    ...

    - koristi se za opciono prikazivanje delova

    ablona

    - uslov1, uslov2 su izrazi koji imaju boolean

    vrednost

    x je tipa Double

    x je tipa Date

    x nije ni Double ni Date tipa

    -Omoguava kreiranje nove ili zamenu

    postojee promenljive

    -naziv: naziv promenljive

    -vrednost: vrednost promenljive

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    33/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    24

    ...

    - omoguava iteraciju kroz elemente kolekcije.

    omoguava izlazak iz iteracije

    - kolekcija: izraz koji predstavlja kolekciju

    elemenata

    - var: naziv iteracione promenljive

    ${team}

    - koristi se za umetanje drugog Freemarker

    ablona u tekui ablon.

    - putanja: putanja datoteke koja se umee u

    String formatu

    functions.ftl

    main.ftl

    . . . . . . . . . . .

    property je tipa String!

    ...

    - Freemarker nee parsirati FTL oznake i

    oznake za umetanje unutar ovih oznaka, ve

    e ih prikazati kao takve

    ablon

    Izlaz

    Tabela 3: Predefinisane direktive u Freemarker ablonu

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    34/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    25

    4.1.3. Korisniki definisane direktive

    Korisniki definisane direktive se jonazivaju makrodirektive i imaju sledeu strukturu:

    ...

    Gde su:

    naziv: naziv makro promenljive.

    param1,param2,: nazivi lokalnih promenljivih koji predstavljaju parametre makroa.

    Mogu imati podrazumevane vrednosti koje su dodeljene sa

    param=podrazumevanaVrednost.

    Makro predstavlja deo ablona koji je povezan sa odreenom promenljivom. Toj promenljivoj

    se kasnije moe pristupiti iz drugog ablona i njenim pozivom e biti odtampan tekst

    definisan unutar makroa. Na taj nain on omoguava redukovanje ponavljajueg koda u

    ablonu. Makro promenljivoj se pristupa pomou @oznake.

    Na sledeem primeru je prikazana instrukcija za kreiranje makro promenljive nazvaneinputValue:

    Pozivom makroa komandom

    za svaki od string atributa domenskog objektapojo bie prikazan tekst

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    35/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    26

    Poto deo koda izmeu i oznaka predstavlja takoe deo Freemarker

    ablona, on moe sadrati HTML, Freemarker direktive, oznake za umetanje itd.

    4.1.4. Funkcije

    Pored korisniki definisanih direktiva mogue je definisati i korisnike funkcije.

    ...

    ...

    Gde su:

    naziv: naziv funkcije

    param1,param2: nazivi lokalnih promenljivih koje predstavljaju parametre funkcije.

    Svakom parametru je opciono mogue dodeliti podrazumevanu vrednost kao

    param=podrazumevanaVrednost.

    povratnaVrednost: izraz koji izraunava vrednost koja e biti vraena iz funkcije

    Ova direktiva je slina makro direktivi sa razlikama to mora sadrati povratnu vrednost

    (return direktiva) koja e biti prikazana pozivom funckije i nee tampati unutranjost

    direktive.

    Korisniki definisane funkcije se u ablonu pozivaju na sledei nain:

    ${nazivFunkcije(param1, param2,,paramN)}

    Na sledeem primeru je prikazana definicija funkcije pod nazivom isStringkoja proverava da

    li je prosledjeni atribut tipa String:

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    36/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    27

    property.value.typeName == "java.lang.String"/>

    4.1.5. Promenljive u Freemarker ablonu

    Postoji tri tipa promenljih koje se mogu definisati u ablonu:

    Plain promenljive: One su dostupne sa bilo koje lokacije u ablonu ili iz ablona

    umetnutih sa include direktivom. Mogu se kreirati ili zameniti korienjem assign ili

    macrodirektive.

    Lokalne promenljive: Lokalne promenljive se mogu postaviti samo unutar makro

    definicije i definicije funkcija i vidljive su samo unutar njih. Ove promenljive postoje

    samo dok traje izvravanje makroa ili funkcije i mogu se kreirati sa localdirektivom

    Iteracione promenljive: Ove promenljive se kreiraju automatski deriktivom listi postoje

    samo izmeu poetne i krajnje oznake direktive.

    4.1.6. Izrazi

    Izrazi su na ablon stranicama definisani pravilnim kombinovanjem prethodno opisanih

    elemanata.

    4.1.6.1. Pristupanje promenljivim

    Promenljivim koje su definisane u modelu podataka i prosleene ablonu moe se pristupi

    na jednostavan nain preko njihovog naziva:

    ${nazivPromenljive}

    Hepromenljive se u Freemarker ablonu mogu definisati kao niz parova [naziv, vrednost]:

    Elementima hea se moe pristupiti po nazivu kao hash.naziv1 ilihash[naziv1].

    Sekvence u Freemarkeu u stvari predstavljaju niz vrednosti:

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    37/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    28

    Elementima sekvence se pristupa pomou njihovog indeksa: sekvenca[0], sekvenca[1]

    4.1.6.2. Operacije nad promenljivim

    Freemarker podrava razliite operacije nad promenljivim:

    Nad promenljivim se mogu izvravati 4 osnovne aritmetikeoperacije: sabiranje (+),

    oduzimanje (-), mnoenje (*) i deljenje (/) plus izraunavanje ostatka pri deljenju -

    modul (%). Pri ovim operacijama oba operanda moraju biti izrazi koji se sraunavaju

    u numeriku vrednost.

    U Freemarkeru se mogu korisiti sve standardne operacije poreenja: (=) i (!=) se

    mogu koristiti za stringove, numerike vrednosti i datume dok se (>),(=) i (

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    38/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    29

    Kapitalizacija var?cap_firstprvo slovo kapitalizovano

    var?uncap_first - prvo slovo dekapitalizovano

    var?upper_casesva slova kapitalizovana

    Pretvaranje stringa u datum sa

    zadatim formatom

    "10/25/1995"?date("MM/dd/yyyy")

    "15:05:30"?time("HH:mm:ss")

    "1995-10-25 03:05 PM"?datetime("yyyy-MM-dd hh:mm a")

    Operacije nad sekvencama

    Opis operacije Primer

    Spajanje sekvenci ["vrednost1", " vrednost 2"] + ["vrednost3", " vrednost 4"]

    Provera da li sekvenca sadriodreeni element, vraa boolean

    vrednost

    seq?seq_contains(vrednost)

    Pronalaenje indeksa odreenog

    elementa

    seq?seq_index_of(vrednost)

    Veliina sekvence seq?size

    Operacije nad brojevima

    Opis operacije Primer

    Pretvaranje broja u string sa

    odreenim formatom

    x?string(",##0.00")

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    39/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    30

    Zaokruivanje x?roundna najblii ceo broj

    x?floorna niu vrednost

    x?ceilingna viuvrednost

    Operacije nad logikim promenljivim

    Opis operacije Primer

    Pretvaranje logike vrednosti ustring

    bool?string("yes", "no")

    4.2. Model podataka

    Model podataka u Freemarkeru moe sadrati razliite tipove Java objekata, od prostih

    tipova do korisniki definisanih klasa (npr. Entity klase). Sam model podataka se priprema u

    Java kodu i prosleuje odreenom ablonu koji Freemarker procesor transformie u statiku

    stranu. Primer modela je dat u sledeem delu koda:

    // Kreira worldcup hash mapu

    Map worldcup = new HashMap();

    // Dodaje String nazivFunkcionalnosti u mapu

    worldcup.put("nazivFunkcionalnosti , "Timovi");

    // Kreira objekat klase Team

    Team team = new Team();

    // Postavlja vrednosti za polja name i rank objekta team

    team.setName(Serbia);

    team.setRank(12);

    // Dodaje objekat teamu mapu

    worldcup.put("team", team);

    Ovaj model podataka se sa gledita ablon stranice vizuelno moe predstaviti kao struktura uobliku drveta:

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    40/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    31

    (worldcup)

    |

    +- nazivFunkcionalnosti = "Timovi"

    |

    +- team

    |

    +- name = "Serbia"

    |

    +- rank = 12

    Kada je potrebno pristupiti nekoj od podpromenljivih na ablon stranici navodi se putanja od

    worldcup elementa i svaki korak se razdvaja takom. Na primer da bi se pristupilo

    podelementu name elementa team, potrebno je napisati team.name. Kada se ta putanja

    postavi u oznaku ${ . . . }dobija se tekstualna vrednost elementa name.

    4.2.1. Tipovi promenljivih u modelu podataka

    Freemarker razlikuje tri tipa promenljivih u svom modelu podataka:

    Hepromenljive koje uvaju u sebi druge promenljive, svaku pod odreenim nazivom

    U Javi su hepromenljive predstavljene pomou klasa Map, HashMapitd.

    Skalari su promenljive koje uvaju pojedinane vrednosti. U Javi su ove vrednosti

    predstavljene brojnim tipovima i klasama poput String, Date/Time i Boolean

    klasa.

    Sekvence su sline hepromenljivim osim to ne uvaju naziv svojih podpromenljivih.

    Umesto toga ih uvaju sekvencijalno i njima se moe pristupiti po indeksu. U Javi su

    one predstavljene listama i nizovima.

    Promenljive koje su dostupne na ablon stranicama su Java objekti koji implementiraju

    freemarker.template.TemplateModelinterfejs. Softver inenjeri ipak mogu da koriste

    standardne Java objekte u svom modelu podataka poto e Freemarker ove objekete

    automatski zameniti odgovarajuuim TemplateModel objektima iza scene. Ovo svojstvo se

    naziva umotavanje objekata (object wrapping).

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    41/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    32

    4.3. Pokretanje Freemarker procesora

    Za pokretanje Freemarker procesora prvo je potrebno napraviti odgovarajue pojavljivanje

    konfiguracije. Freemarker konfiguracija se uva u objektu klase

    freemarker.template.Configuration. On predstavlja centralno mesto za uvanje

    parametara za pokretanje generatora i najee se podeava samo jednom, na poetku

    ivotnog ciklusa generatora. Ovaj postupak je prikazan u sleem delu koda:

    Configuration cfg = new Configuration();

    // Postavljanje putanje do direktorijuma gde se uvaju ablon datoteke

    cfg.setDirectoryForTemplateLoading(

    new File("/putanja do direktorijuma u kome se nalaze sabloni"));

    // Odreuje se kako e ablon videti model podataka:

    cfg.setObjectWrapper(new DefaultObjectWrapper());

    Nakon postavljanja parametara Configurationobjekta potrebno je uitati odreeni model

    podataka na nain kako je to prikazano u sledeemdelu koda:

    Map worldcup = new HashMap();

    worldcup.put("nazivFunkcionalnosti , "Timovi");

    Team team = new Team();

    team.setName(Serbia);

    team.setRank(12);

    worldcup.put("team", team);

    ablon je u Freemarker-u predstavljen pojavljivanjem klase

    freemarker.template.Template. On se obino kreira pomou pojavljivanja klase

    Configuration kreiranog u prethodnom koraku i to pozivanjem metode getTemplate

    kako je prikazano u sledeemdelu koda:

    Template temp = cfg.getTemplate("teams.ftl");

    Ovom komandom Freemarker kreira pojavljivanje klase Template koja je zaduena za

    ablon stranicu teams.ftl. Stranicu uitava iz putanje /putanja do direktorijuma u kome se

    nalaze abloni/teams.ftl i nakon toga je parsira (kompajlira).

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    42/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    33

    Configuration pojavljivanje keira Template pojavljivanje, tako da kada se ponovo

    pozove test.ftl nee se kreirati novo pojavljivanje Templateklase

    Kao to je u uvodu napomenuto, integracija modela podataka i ablon stranica proizvodi

    izlaz iz generatora (modelpodataka + ablon stranica = izlaz). Do sada je napravljen model

    podataka (worldcup) i ablon (temp), tako da je sad potrebno integrisati ih. To se postie

    korienjem process metode klase Template. Ona koristi model podataka worldcup i

    objekat klase Writerkao parametre. Sledei kod e radi jednostavnosti ispisati proizvedeni

    rezultat obrade ablona na standardni izlaz:

    Writer out = new OutputStreamWriter(System.out);

    temp.process(worldcup, out);

    out.flush();

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    43/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    34

    5. Hibernate okvir

    5.1. Perzistencija

    Perzistencija podataka predstavlja jedan od fundamentalnih koncepata u razvoju softverskih

    sistema. Uopteno, podaci su perzistentni ako nastave da postoje i nakon zavretka rada

    programa koji ih je kreirao.

    Postoji vie definicija perzistentnosti u kontekstu objektno orijentisanog razvoja softvera [4]:

    Objekat je perzistentan ukoliko se moe materijalizovati i dematerijalizovati.

    Objekat je perzistentan ukoliko nastavi da postoji i nakon prestanka rada programa

    koji ga je stvorio (G.Booch).

    Materijalizacija predstavlja proces transformacije slogova baze podataka u objekte

    programa.

    Dematerijalizacija predstavlja proces transformacije objekta iz programa u slogove

    baze podataka.

    Perzistentni okvir je skup interfejsa i klasa koji omoguava perzistentnost objektima

    razliitih klasa.

    Pod perzistencijom podataka u Javaaplikacijama najee se podrazumeva uvanje Java

    objekata u relacionoj bazi podataka. Transformancije koje se odnose na pretvaranje Java

    objekata u relacije baze podataka i obrnuto nazivaju se objektno-relaciono mapiranje (ORM).

    5.2. ORM alati

    Pod ORM alatima podrazumevaju se softverske komponente koje omoguavaju

    automatizaciju procesa transformacije izmeu relacionog i objektnog modela. Ovi alati

    obezbeuju automatsko generisanje SQL upita na osnovu pripremljenih meta podataka,

    upravljanje transakcijama, upravljanje konekcijama ka bazi podataka, objektno orijentisan

    upitni jezik itd. ORM alati nude odgovarajuiAPI koji softver inenjerima omoguava rad sa

    objektima i ne zahtevaju direktno korienje JDBC-a6 ve je to prepuetno samom alatu.

    Meu najkorienijim ORM alatima su Hibernate, TopLink i iBatis.

    6JDBC - Java Database Conectivity je Java API koji omoguava metode za pristup specifinoj bazi podataka.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    44/131

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    45/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    36

    Interfejsi i klase koje aplikacija poziva da bi konfigurisala Hibernate okvir. To je pre

    svega klasa Configuration.

    Interfejsi koji omoguavaju aplikaciji da reaguje na dogaaje unutar okvira (callback

    interfaces) kao to su Interceptor, Lifecyclei Validatable

    Interfejsi koji omoguavaju nadogradju (extension) Hibernate funkcionalnosti zamapiranje kao sto su UserType, CompositeUserTypei IdentifierGenerator.

    Ovi interfejsi se implementiraju po potrebi u samoj aplikaciji.

    Veze izmeu ovih komponenti su prikazane na slici 7:

    Slika 7: Arhitektura Hibernate okvira [9]

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    46/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    37

    5.3.2. Konfiguracija okvira

    Konfiguracija okvira se moe podeliti u dve faze. U prvoj je potrebno obezbediti podatke koji

    su potrebni okviru da se povee sa odgovarajuom bazom podataka a u drugoj podatke

    kojima se opisuje preslikavanje izmeu perzistentnih objekata itabela baze podataka.

    Centralna klasa pomou koje se vri konfigurisanje i pokretanje Hibernate okvira je klasa

    org.hibernate.cfg.Configuration. Ovoj klasi se prosleuju konfiguracioni podaci na

    osnovu kojih ona kreira pojavljivanje klase SessionFactory. Ovo pojavljivanje je

    jedinstveno za konekciju sa jednom bazom podataka i njegovo stanje se ne moe menjati

    nakon kreiranja. Na ovaj nain okvir je potpuno konfigurisan. Pojavljivanje klase

    SessionFactoryje zadueno i za manipulisanje objekatima klase Session pri svakoj

    interakciji sa bazom podataka.

    Klasa Session predstavlja osnovnu jedinicu rada sa bazom podataka i manipulacije nad

    podacima. Odravanje stanja Java objekata, upravljanje transakcijama i izvravanje upita su

    pod kontrolom ove klase.

    Jedan od moguih naina konfigurisanja i pokretanja okvira je prikazan sledeim kodom:

    Configuration cfg = new Configuration();SessionFactory factory =

    cfg.configure(/hibernate.cfg.xml).buildSessionFactory();

    Pozivom configuremetode, uitavaju se podaci iz datoteke hibernate.cfg.xml a zatim se

    pozivom buildSessionFactorymetode kreira objekat SessionFactoryklase.

    Pojavljivanje klase Session pri pristupu bazi podataka se moe napraviti pozivanjem

    metode openSession nad kreiranim jedinstvenim pojavljivanjem klase SessionFactory

    na sledei nain:

    Session session = factory.openSession();

    Opisani postupak je prikazana na slici 8.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    47/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    38

    Session

    SessionFactory

    Configuration

    hibernate.cfg.xml hibernate.hbm.xml hibernate annotationshibernate.properties

    configure()

    openSession()

    Slika 8: Konfigurisanje Hibernate okvira

    Konfiguracioni podaci potrebni za povezivanje okvira sa bazom podataka se mogu

    obezbediti na dva naina: pomou datoteke za definisanje osobina (properties datoteke) pod

    nazivom hibernate.properties ili pomou xml datoteke pod nazivom hibernate.cfg.xml.

    U sledeem kodu je dat prikaz hibernate.cfg.xml datoteke:

    com.mysql.jdbc.Driver

    root

    jdbc:mysql://127.0.0.1:3306/world_cup

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    48/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    39

    root

    org.hibernate.dialect.MySQLDialect

    Obavezni podaci koje ova datoteka mora da sadri su:

    connection.driver_class: upravljaki program (driver) za izabrani sistem za upravljanje

    bazom podataka (SUBP);

    connection.url: JDBC URLdo baze podataka. JDBC URLse sastoji iz simbolikog

    imena upravljakog programa (jdbc:mysql), IP adrese maine na kojoj se nalazi

    SUBP (localhost=127.0.0.1), porta na kome je podignut SUBP (3306) i imena baze

    podataka sa kojom program treba da uspostavi konekciju (worldcup). Na taj nain

    dobija se URL prikazan u prethodnom sprimeru;

    connection.username : Korisniko ime za pristup bazi podataka;

    connection.password : Lozinka za pristup bazi podataka;

    dialect : Naziv SQL dijalekta za specifinu bazu podataka

    Podaci kojima se opisuje preslikavanje izmeu perzistentnih objekata i relacija u bazi

    podataka se mogu obezbediti ili xml datotekama za preslikavanje (hbm.xml) ili pomou

    anotacija koje koriste Hibernate Annotations modul i koje su postale dostupne poev od JDK

    1.5. Sledeim kodom jeprikazan deo Entity klase sa odgovarajuim anotacijama:

    @Entity

    @Table(name = "match", catalog = "world_cup")

    public class Match implements java.io.Serializable {

    private Long id;

    private Team teamGuest;

    @Id

    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "id", unique = true,

    nullable = false)

    public Long getId() {

    return this.id;

    }

    public void setId(Long id) {

    Mapira naziv Entity klase u

    naziv tabele bazepodataka

    Mapira naziv atr ibuta klase

    u naziv kolon e u tabeli

    baze podataka

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    49/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    40

    this.id = id;

    }

    @ManyToOne(fetch = FetchType.EAGER)

    @JoinColumn(name = "team_guest_id",nullable = false)

    public Team getTeamGuest() {

    return this.teamGuest;

    }

    public void setTeamGuest(Team teamGuest) {

    this.teamGuest = teamGuest;

    }

    5.4. Hibernate arhitektura generisanja proizvoda

    5.4.1. Hibernate meta model

    Hibernate meta model je koncept koji Hibernate Core modul koristi da bi izvrio objektno

    relaciono mapiranje. Model sadri informacije o tabelama i kolonama baze podataka,

    domenskim klasama i atributima i ostalim komponentama relevantnim za ovo mapiranje.

    Ulazna taka za model predstavlja klasa Configuration. Na slici 9 je prikazan Hibernate

    meta model, naini na koje moe da se izgradi kao i izlazi koje moe da proizvede.

    Slika 9: Hibernate meta model [8]

    Mapira vezu izmeu

    objekata u vezu izmeu

    tabela baze podataka

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    50/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    41

    Sa slike se mogu izdvojiti tri grupe elemenata. Prvu ine ulazi i izlazi iz meta modela:

    Java perzistente klase (izvorni kod)

    Java Dao klase (izvorni kod)

    Metapodaci za mapiranje u obliku anotacija

    Metapodaci za mapiranje u obliku xml datotetaka

    DDL ema baze podataka

    XML datoteke za konfiguraciju okvira

    HTML datoteke za dokumentaciju

    Freemarker abloni

    Drugu grupu ine konfiguracije. Konfiguracije slue za izgradnju meta modela na osnovu

    odreenog ulaza. Pored standardne Hibernate konfiguracije (klasa Configuration) mogu

    se koristiti i izvedene konfiguracije:

    JDBC konfiguracija,

    Konfiguracija pomouanotacija (klasa AnnotationConfiguration)

    JPA konfiguracija

    Treu grupu ine generatori (exporter). Oni slue za generisanje izlaza u odgovarajuem

    obliku na osnovu informacija sadranih u meta modelu. To su:

    hbm2java - generie Java perzistente klase

    hbm2ddl - generie emu baze podataka

    hbm2hbmxml - generie xml datoteke za preslikavanje

    hbm2cfgxml - generie xml datoteke sa konfiguracionim podacima

    hbm2doc - generie HTML dokumentaciju

    hbmtemplate - generie korisniki definisane stranice pomou Freemarker ablona

    Proces generisanja koda primenom Hibernate meta modela se moe opisati na sledei

    nain. Hibernate konfiguracija predstavljena klasom Configuration (ili nekom od

    pomenutih podklasa) uitava konfiguracionu datoteku i datoteke za mapiranje i na osnovu

    njih proizvodi interni meta model. Izabrani generator nakon toga procesira ovaj meta model i

    proizvodi odgovarajui izlaz iz modela.

    Hibernate meta model moe da se izgradi na osnovu nekog od opisanih ulaza. Njegova

    glavna vrednost kod generisanja koda je to nakon toga moe da proizvodi razliite izlaze

    koristei neki od gore navedenih generatora. Proces generisanja koda je na taj nain

    nezavistan od izvora meta modela.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    51/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    42

    5.4.1.1. Konfiguracije

    Osnovna klasa pomou koje se kreira konfiguracija u Hibernate okviru je klasa

    org.hibernate.cfg.Configuration. Ona se nalazi u Hibernate Core modulu. Za

    izgradnju meta modela kao ulaz koristi xml mapirajue datoteke (hbm.xml) ixml datoteku sa

    konfiguracionim podacima (hibernate.cfg.xml).

    AnnotationConfigurationje klasa koja nasleuje klasu Configuration. Zasniva se

    na Hibernate Annotations modulu. Ona omoguava itanje mapirajuih metapodataka iz

    EJB3/Hibernate anotacija koje se nalaze u Java klasama. Takoe podrava i xmlmapirajue

    datoteke. Da bi proizvela meta model pored mapirajuih metapodataka koristi i

    konfiguracionu datoteku.

    JPA konfiguracija se zasniva na Hibernate EntityManager modulu i zahteva da projekat ima uclasspath-u definisanu perzistentnu jedinicu u obliku META-INF/persistence.xml datoteku i

    nju koristi kao konfiguracionu datoteku. JPA konfiguracija za mapiranje koristi hbm.xml

    datoteke ili Java klase sa anotacijama.

    JDBC konfiguracija se koristi za generisanje meta modela iz eme baze podataka (reverse

    engeneering) koristei JDBC konekciju. Ona koristi JDBC konfiguracione podatke definisane

    u datotekama hibernate.cfg.xml ili hibernate.properties i opcione xml datoteke za dodatno

    podeavanje preslikavanja (hibernate.reveng.xml).

    5.4.2. Pokretanje Hibernate generatorabiblioteka hibernate-tool

    Korienje Hibernate generatora koji su opisani u prethodnom poglavlju omogueno je

    bibliotekom koja se zove hibernate-tool. Ova biblioteka omoguava to na dva naina:

    Pomou dodatka (extension) za Eclipse razvojno okruenje koji omoguava

    vizualizaciju procesa generisanja koda. On sadri razliite grafike editore za

    mapiranje i kreiranje konfiguracija i razliite tipove arobnjaka (wizards) za kreiranje

    standardnih Hibernate datoteka (hbm.xml, cfg.xml, revenge.xml). Takoe omoguava

    lako i intuitivno pokretanje napravljenih generatora.

    Definisanjem Ant zadatka za generisanje koda, eme baze podataka i ostalih izlaza

    koji se kao i standardni Ant zadaci zatim moe ukljuiti u proces izgradnje (build)

    aplikacije.

    U ovom radu generator koda e biti pokretan kao Ant zadatak.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    52/131

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    53/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    44

    password="${ftp.lozinka}">

    Kao to se vidi iz prikazanog primera koreni element ove datoteke je project element koji

    opisuje konkretni projekat, sadri ime projekta - atribut name i podrazumevani cilj atribut

    default. Projekat se sastoji iz skupa ciljeva (target). Unutar svakog cilja se nalaze zadaci koje

    Ant treba da izvri da bi ispunio odgovarajui cilj. Ovo predstavlja osnovnu strukturu svake

    build.xml datoteke.

    Primer standardnog Ant zadatka je zadatak oznaen komandom javac u okviru cilja

    kompajliranje. On izvrava kompajliranje java izvornih datoteka koje se nalaze u

    direktorijumu pod atributom src i nakon toga class datoteke smeta u direktorijum pod

    atributom destdir. Komandajavaci atributi srci destdirsu Ant rezervisane rei.

    U svakom ciljnom elementu se nalazi i atribut depends(zavisi) koji referencira na drugi ciljni

    element i tako oznaava da se ne moe izvriti pre cilja od kojeg zavisi. Na primer cilj

    kompajliranjese ne moe izvriti dok se za to ne steknu odgovaraju i uslovi, tj. dok se ne

    izvri cilj inicijalizacija u okviru kojeg se kreiraju odgovarjui direktorijumi u koje e biti

    smeteni rezultati cilja kompajliranje (class datoteke). Ove zavisnosti su u obliku dijagrama

    prikazane na slici 10.

  • 7/21/2019 Strahinja Lazetic Razvoj Generatora Spring Aplikacija Primenom Freemarker Sablona i Hibernate Okvira

    54/131

    Razvoj generatora Spring aplikacija primenom Freemarker ablona i Hibernate okvira Strahinja Laeti

    45

    inicijalizacija : target

    : task : task

    testProjekat : project

    kompajliranje : target

    : task

    dokumentacija : target

    : task

    postavkaNaServer : target

    : task : task

    Slika 10: Dijagram zavisnosti u build.xml datoteci

    Kada se pokrene Ant prvo skenira ceo dokument build.xml i utvruje njegovu strukturu i

    zavisnosti. Nakon toga izgrauje interno drvo zavisnosit izmeu ciljeva (neto nalik

    prethodnoj slici) i tako utvruje koji cilj treba prvo da izvri. Redosled kojim su ciljevi navedeni

    u xml datotetci nema nikakav uticaj na to. Ant prvo pokree cilj koji je na vrhu drvetazavisnosti (ne zavisi ni od jednog drugog cilja), izvrava njegove zadatke izatim prelazi na

    s