2. COBISS - Kooperativni online bibliografski sistem in servisi
• knjižnični informacijski sistem
• deluje že skoraj 30 let (od 1987)
• vključenih več kot 700 knjižnic
COBISS/OPAC je spletna aplikacija za iskanje in prikaz
gradiva v knjižnicah ter izvajanje različnih postopkov v zvezi
z izposojo gradiva.
3. Programska oprema COBISS/OPAC (1/2)
• iskanje po lokalnih bazah podatkov knjižnic in po vzajemni
bibliografski bazi podatkov COBIB.SI
• prikaz bibliografskih podatkov v različnih formatih
• prikaz podatkov o stanju zaloge na vzajemnem nivoju
• uporabniki lahko za posamezno publikacijo na enem mestu preverijo
celotno zalogo vseh knjižnic
• prikaz podatkov o stanju zaloge na lokalnem nivoju
• uporabniki lahko preverijo natančno zalogo za posamezno publikacijo v
knjižnici, vključno s statusom izposoje in možnostjo rezervacije gradiva
• možnost rezervacije gradiva
4. Programska oprema COBISS/OPAC (2/2)
• storitev Moja knjižnica uporabnikom omogoča
• podaljšanje gradiva
• preklic rezervacije gradiva
• vpogled v svojo zgodovino izposoje
• vpogled v stanje omejitev in dolgov z možnostjo poravnave terjatev s
spletnim plačilom preko Monete
• naročanje medknjižnične izposoje
• spremljanje naročil v medknjižnični izposoji
• nastavitve e-obveščanja
• košarica zapisov
• uporabniki lahko v košarico zapisov shranijo bibliografske zapise za namen
izvoza zapisov v različnih formatih
• dostop do številnih specialnih in tujih baz podatkov.
5. Uporaba COBISS/OPAC v Sloveniji v letu 2012
• 16 mio poizvedb
• 38 mio prikazov bibliografskih podatkov.
• preko 3 mio podaljšanj roka izposoje
• preko 500.000 rezervacij gradiva
• več kot 100.000 članov uporablja storitev Moja knjižnica
• okrog 1.000 hkratnih uporabnikov v konici delovnega dneva
(občasno tudi do 1.400 hkratnih uporabnikov)
6. Razlogi za prenovo programske opreme COBISS/OPAC
• menjava strežniške platforme
• aplikacije teče na operacijskem sistemu OpenVMS,
podpora zanj pa počasi ugaša
• OpenVMS trenutno deluje le na strežnikih ITANIUM,
kar zaradi visokih cen strežniške strojne opreme znatno podraži
obratovalne stroške aplikacije
• izboljšati podporo naboru znakov Unicode (UTF-8)
• trenutno uporabljamo pretvornike med posameznimi nabori znakov,
kar precej otežuje pripravo predlog strani za vključitev v aplikacijo
• omogočiti lažji razvoj
• proces razhroščevanja je na obstoječi arhitekturi otežen in neučinkovit
7. Izhodišča prenove programske opreme COBISS/OPAC
• Programski jezik naj bo java.
• Uporabniki programske opreme COBISS/OPAC so številni in
heterogeni, za dostop uporabljajo različne naprave.
• Podpora mora biti dobra in zanesljiva, saj je programska oprema
živ sistem, ki se prilagaja zahtevam uporabnikov, zato potrebuje
dolgoročno vzdrževanje.
• Zagotovljena mora biti skalabilnost. Tehnologija mora podpirati
delo nekaj tisoč uporabnikov hkrati in namestitev na več
strežnikih hkrati.
• Zagotovljena mora biti vključenost oblikovalca.
• Zagotovljena mora biti varnost. tehnologija mora omogočati
izdelavo varnih spletnih aplikacij.
8. Prototip spletne aplikacije z gradniki JSF
JSF je z bogato ponudbo komponent, ki omogočajo različne
implementacije (Oracle Mojarra, PrimeFaces, JBoss RichFaces,
Apache MyFaces itd.), dokaj privlačna tehnologija, saj omogoča hitro
in enostavno kreiranje oblikovnih predlog.
Čeprav so komponente lahko zelo kompleksni gradniki in se v ozadju
izvajajo dokaj kompleksne operacije, je uporaba te tehnologije
sorazmerno enostavna.
Kadar je potrebna interakcija odjemalca, je v komponente že
vključena tudi potrebna koda JavaScript.
9. Slabosti JSF
• Vključevanje oblikovalca v razvojni proces je težavnejše.
• Tehnologija narekuje, da so obrazci sestavljeni iz komponent JSF,
kar otežuje oblikovanje zahtevnejših obrazcev.
• Priložene knjižnice JavaScript so ozko specializirane, npr. Mojarra
ponuja le AJAX za podatke v formatu XML, ne pa tudi za JSON.
• Za usklajevanje stanja med strežnikom in odjemalcem se morajo
neprestano izvajati težke in kompleksne metode, ki vključujejo
preračunavanje skladiščenih podatkov v seji, obravnavanje
trenutnega zahtevka in pripravljanje nove vsebine v xhtml.
10. Hibridna rešitev s krmilniki Spring MVC
Da bi odpravili slabosti ogrodja JSF, smo zgradili hibridno rešitev, ki je
kombinacija JSF in ogrodja Spring MVC. Značilnosti te hibridne
rešitve so:
• Za upravljanje spletne aplikacije uporabljamo krmilnike
Spring MVC.
• V celoti smo zavrgli nefleksibilne komponente JSF za obrazce.
• JSF smo obdržali za oblikovanje oblikovnih predlog in postavitev.
12. Konfiguracija JSF - faces-config.xml
SpringBeanFacesELResolver omogoča, da lahko
komponente JSF uporabljajo Springova zrna, če gre za
upravljana zrna (@ManagedBean).
V našem primeru smo uporabili Springova zrna in Springove
dosege, zato ta nastavitev niti ni potrebna.
15. Krmilniki Spring MVC
• S krmilniki Spring MVC je upravljanje aplikacije centralizirano,
pregledno in fleksibilno.
• Na enem mestu imamo informacije o vseh akcijah in spletnih naslovih.
• Z anotacijami @RequestMapping definiramo preslikave URL-
naslovov v akcije.
• Običajno najprej definiramo preslikave na nivoju razreda, nato pa jih
dopolnimo na nivoju metod.
• V preslikave so lahko zajete specifične metode poizvedbe (GET, POST …),
deli URL-naslova, deli glave zahtevka, vrste medijskih tipov (npr.
»application/json«).
• Uporabimo lahko tudi regularne izraze.
• S temi preslikavami lahko uporabnikom ponudimo lepe in prijazne URL-
naslove akcij in vsebin.
17. Oblikovanje predlog in postavitev z JSF
• Glede na to, da se bodo na strežniku pripravljale le osnovne
vsebine in postavitve strani, je JSF s svojim sistemom za predloge
solidna izbira za gradnjo prikaza.
• Z elementi JSF Facelets (ui:composition, ui:inlcude, ui:define,
ui:insert, ui:decorate, ui:repeat, ui:fragment, ui:param) brez težav
sestavimo želeno vsebino za odjemalca.
• Končna podoba predstavitve se s podporo tehnologije AJAX
dopolni pri odjemalcu.
18. Primer: search.xhtml
Prikazana poenostavljena predloga JSF za iskanje. Vključuje obrazec za izbran iskalni
način (enostavno, napredno ali ukazno iskanje), prikaz rezultata z želeno predlogo in
izpis zgodovine iskanja, na koncu pa je definiran še skriptni blok, ki se v predlogi
postavitve vstavi na dno strani.
19. JSF brez h:form
S tem ko smo zavrgli nefleksibilne komponente JSF za obrazce ter
namesto h:form, h:inputText, h:commanButton in podobnih
sorodnih oznak začeli neposredno vključevati ustrezno kodo html,
smo zelo poenostavili oblikovanje zahtevnejših obrazcev.
20. Brez @ViewScope (1/2)
Ker ne uporabljamo več h:form, ni več avtomatsko
generiranega skritega polja javax.faces.ViewState, s
katerim se je ohranjalo stanje komponent JSF.
Ni več možno oziroma smiselno vključevati zrna z
obsegom pogleda (ViewScope).
• Ali smo s tem kaj na slabšem?
21. Brez @ViewScope (2/2)
Spletna aplikacija postane lažja in hitrejša.
• Vzdrževanje stanja uporabniškega vmesnika na strežniku je
problematično z vidika skalabilnosti aplikacije.
• Pri velikem številu uporabnikov je shranjevanje in nenehno
posodabljanje stanja precej obremenjujoče za strežnik, tako z
vidika procesiranja kot z vidika porabe spomina.
Alternativa?
• Asinhrono posodabljanje strani.
Trendi razvoja modernih spletnih aplikacija kažejo, da se
procesiranje podatkov in generiranje prikaza v vse večji meri
izvajata na odjemalcu.
22. Alternativa jsf.ajax: jQuery in RequireJS
Zamenjava ozko specializirane knjižnice jsf.ajax z bolj splošno in
široko uveljavljeno knjižnico jQuery prinese precej več prednosti kot
slabosti:
• Pretok podatkov s strežnika ni več omejen le na format XML,
podatki so lahko tudi v formatu JSON.
• Sami kontroliramo in optimiziramo obseg podatkovne
komunikacije.
• Spletni aplikaciji lažje dodamo potrebno stopnjo interakcije z
uporabnikom.
• Lažje vključujemo različne vnaprej pripravljene oblikovalske
rešitve in gradnike.
• Koda JavaScript je napisana modularno. Zahtevani moduli se
naložijo asinhrono z RequireJS.
24. Zaključek
• S kombinacijo Spring MVC in JSF smo postavili razvojno ogrodje s
številnimi dobrimi lastnostmi.
• S krmilniki Spring MVC smo povečali skalabilnost aplikacije.
• S fleksibilnim mehanizmom za preslikave URL-naslovov v akcije lahko
uporabnikom prikažemo lepe in prijazne URL-naslove.
• S polnim izkoriščanjem potenciala, ki ga omogoča AJAX, bomo razvili
moderno interaktivno in uporabniku prijazno spletno aplikacijo.
• Za oblikovanje predlog in postavitev uporabljamo JSF Facelets. V celoti
smo zavrgli nefleksibilne komponente JSF za obrazce. Sedaj brez težav
vključujemo uveljavljene oblikovalske rešitve in skriptne knjižnice.
• S centraliziranim sistemom upravljanja s krmilniki MVC, redukcijo JSF na
najnujnejše oznake ter modularizacijo kode JavaScript razvijamo
programsko opremo z dolgoročnim potencialom, ki jo bomo lahko brez
težav vzdrževali in nadgrajevali tudi v prihodnje.