TEMA:
RAZGLEDNICA SA JAVA2DAYS KONFERENCIJE
AUTOR:
IGOR POPOV
12. NOVEMBAR 2009.
JavaSvet - otvorena java zajednica
Sadržaj Sadržaj..................................................................................................................2 Uvod......................................................................................................................2 O konferenciji.........................................................................................................3 Java Enterprise Edition 6..........................................................................................3 Ostale specifikacije..............................................................................................4 Enterprise Java Beans 3.1........................................................................................4 Asinhrono izvršavanje..........................................................................................4 Singleton bean....................................................................................................5 Cronoliki timer servis...........................................................................................5 Svi smo mi POJO.................................................................................................5 EJB Lite..............................................................................................................6 JNDI..................................................................................................................6 Proširivost EJB-a..................................................................................................6 GlassFish v3...........................................................................................................6 OSGi Arhitektura.................................................................................................7 GlassFish Profili...................................................................................................7 Embedovanje GlassFish-a.....................................................................................8 Portabilnost enterprise aplikacije...............................................................................8 Clouds and clusters.................................................................................................9 Hazelcast............................................................................................................9 DMTF standardizacija...........................................................................................9 Prezentacioni sloj...................................................................................................10 Apache Wicket...................................................................................................10 Popravka JSF-a..................................................................................................10 Zaključak.............................................................................................................11
Uvod Java2Days konferencija se po prvi put organizovala ove godine i jedna je među retkima, ako ne i jedina, pored IT Dana održanog u organizaciji JavaSveta, koja se u ovom delu Evrope bavi trendovima Java razvoja. Održala se tokom dva dana, 8. i 9. oktobra ove, 2009. godine u Inter Expo centru lociranom na periferiji Sofije, glavnog grada Bugarske. Kao registrovana Java korisnička grupa, JavaSvet je dobio pozivnicu da učestvuje u ovom događaju, tako da su domaći javaši imali svoje „predstavnike” u Bugarskoj. Rezultat odlaska jeste i ovaj izveštaj kojim konferenciju želimo da približimo i onima koji možda nisu bili u mogućnosti da je posete. U nastavku će biti predstavljena sama konferencija, tematske celine koje su obrađene, kao i predavači koji su svoje znanje i iskustvo podelili sa prisutnima. Biće prikazani najzanimljiviji aspekti predavanja koja su prikazala kako nova rešenja iz Java sveta mogu da nam olakšaju svakodnevni rad obezbeđujući nove, prirodnije i efikasnije načine za rešavanje poznatih problema.
O konferenciji Može se reći da je konferencija imala za cilj da obradi tri oblasti za koje se pretpostavlja da će biti relevantne Java zajednici u narednom periodu. Na prvom mestu se našla Java Enterprise u svom šestom izdanju. Ovu oblast su Razglednica sa Java2Days konferencije – Igor Popov
2
JavaSvet - otvorena java zajednica
predstavili, između ostalih, Reza Rahman kao član Java EE 6 i EJB 3.1 ekspertske grupe i jedan od autora poznate knjige EJB 3 in Action, kao i Alexis Moussine Pouchkin ispred Sun-a sa zvanjem GlassFish evanđeliste. Imajući na umu da je Java EE 6 najavljena za decembar ove godine i da je GlassFish v3 njena referentna implementacija, moglo se i unapred zaključiti da će ova predavanja biti veoma aktuelna. Druga oblast koja je dobila dosta pažnje na Java2Days konferenciji jeste Cloud Computing u okviru koje je obrađeno i nekoliko rešenja za klastere. Pošto trenutno popularno tumačenje cloud-a isti predstavlja kao još jedan hype, bilo je zanimljivo čuti John Willis-a, jednog od predavača, kako izjavljuje, da parafraziram, „Ako vam bilo ko iz firme sa Fortune 500 liste kaže da ne koriste cloud... jednostavno lažu.” Treća oblast je bila posvećena rešenjima za prezentacioni sloj što je, razumljivo, izazvalo najveće interesovanje u publici i tome proporcionalni broj pitanja. Možda je najzapaženije bilo predavanje Andrew Lombardi-a o Wicket framework-u tokom kojeg se neprestano osvrtao na nedostatke konkurentskih rešenja, na šta se kasnije prirodno nadovezao Josh Long dajući savete kako od JSF ideje napraviti nešto što se i može koristiti u praksi. Jedan od zanimljivijih momenata na celoj konferenciji se desio tokom FAQ sesije kada je Andrew izneo zapažanje da Google Web Toolkit, o kojem je prethodno pričao Heath Kesler, usled nemogućnosti korektnog indeksiranja strana u stvari nije kompatibilan sa search engine-om iste kompanije. Usledilo je par momenata tišine tokom koje je Heath zamišljeno gledao u daljinu, da bi potom iskreno klimnuo glavom i pridružio se opštem smehu koji je nakon toga usledio. Tokom dva dana Java2Days konferencije tempo predavanja je bio veoma intenzivan, tako da su se do ručka mogla čuti tri predavanja, između ručka i predugo iščekivane kafe pauze još dva i konačno u trećem delu maratona i dodatna četiri. I tako u dve sale paralelno, barem tokom prvog dana. Ukupan saldo konferencije bio je 25 tema iz pomenute 3 oblasti koje je za zainteresovane uši preko 400 javaša približilo 18 predavača iz Francuske, Amerike, Britanije, Turske i naravno, zemlje domaćina, Bugarske. Možda je zanimljivo, ali i isto toliko neupotrebljivo, napomenuti da je jedan od predavača došao iz američkog gradića koji se nalazi na svega par kilometara od South Park-a koji očigledno stvarno postoji!
Java Enterprise Edition 6 Predavanja koja su se bavila novom verzijom Java Enterprise su „Java EE 6 Preview”, „EJB 3.1 Preview”, „Get real with Java EE 6 – GlassFish v3 is swimming your way” i „Is my J2EE/JavaEE application portable - Should I care?” Ključne reči ovde su bile Java EE 6, EJB 3.1, GlassFish v3 i portabilnost. Java EE 6 sadrži nova verziju EJB-a - EJB 3.1 koja donosi još lakši razvoj, približava enterprise logiku malim i srednjim aplikacijama i razbija iluziju da je ista namenjena samo za velike sisteme i ozbiljnije kompanije. Sada je moguće napraviti običnu web aplikaciju, odnosno WAR artifakt govoreći Maven jezikom, tako da u sebi uključuje i EJB bean-ove koji više nisu ekskluzivno vlasništvo EAR-a. Takođe, bean je sada dodatno smršao time što u određenim situacijama može biti definisan bez upotrebe interfejsa, koji u velikom procentu slučajeva ne donose nikakvu dodatnu vrednost konačnom dizajnu sistema. Još jedna od promena jeste ta da se konačno iz upotrebe izbacuju, odnosno – čine se opcionim, XML konfiguracioni fajlovi. Kada se XML pojavio kao veliki „izum“, prva ideja je bila primeniti ga svugde, jer je on „savršeno” rešenje za sve probleme. Vremenom se ispostavilo da to i nije baš tako i da cepkanje jedne logičke celine na više fajlova, na primer na EJB klasu i na EJB deskriptor ili na servlet klasu i web deskriptor, nije najpraktičniji pristup. Sada @WebServlet, @WebFilter sa još par drugih anotacija mogu u Razglednica sa Java2Days konferencije – Igor Popov
3
JavaSvet - otvorena java zajednica
potpunosti zameniti informacije do sada čuvane u web.xml fajlu. Kao što je u prethodnoj verziji EJB-a entity bean izmešten u sopstvenu specifikaciju – JPA (Java Persistance API), tako je i u ovoj verziji porodica bean-ova pretrpela određene izmene. Uveden je nov tip – singleton bean dok message driven bean polako ide u penziju na čije mesto dolazi ni manje ni više nego – anotacija!
Ostale specifikacije Tokom konferencije su se spominjale i mnoge druge specifikacije kojima možda i nije bilo posvećeno celokupno predavanje, ali to nikako ne mora da znači da su manje važne. Noviteti koji će takođe biti sastavni deo Java EE 6 paketa su, između ostalih, i Servlet 3.0 (JSR 315) sa podrškom za konfigurisanje kroz anotacije i za registraciju servleta i filtera iz koda, JPA 2.0 (JSR 317) sa uključenim Criteria API-em, JSF 2.0 (JSR 314) sa upotrebom Facelet-a i WebBean-ova, JCDI 1.0 aka WebBeans (JSR 299) koji zamenjuje JSF-ove managed bean-ove i uvodi standardizovani Dependency Injection 1.0 (JSR 330), kao i Bean Validation 1.0 (JSR 303) koji uvodi anotacije tipa @NotNull i @Size.
Enterprise Java Beans 3.1 Glavna komponenta Java EE 6 platforme jeste nova podverzija Enterprise Java Beans specifikacije – EJB 3.1. Iako je možda na prvi pogled promena mala i decimalna, ne treba je potceniti. Donosi mnogo prečica, prirodnijih pristupa i kod čisti od još boilerplate koda. Anotacije su maksimalno korišćene kao sredstvo komunikacije između programera i aplikativnog kontejnera u pitanju i programiranje se pomerilo još korak bliže meta programiranju. U nastavku je dat pregled nekih izmena i noviteta koje donosi ova specifikacija.
Asinhrono izvršavanje Da li se sve više bližimo meta programiranju? Odgovor je sigurno da, ali pitanje brzine tog putovanja je i dalje ono na koje svako od nas treba da odgovori. Anotacija @Asynchronous dodata na bilo koju metodu session bean-a tu metodu čini – asinhronom. Realno gledano, da li postoji opravdanje da ovakva funkcionalnost bude imalo kompleksnija? Naravno, kada je reč o asinhronim metodama, prirodno je da povratna vrednost bude „tipa” void, ali to ne mora biti slučaj. Java SE 5 je donela velike inovacije u samom jeziku – između ostalih i generike, ali i jednu, možda, malo manje poznatu – generički Future interfejs. Ukoliko asinhrona metoda za povratnu vrednost ima Future tip, tada je iz pozivajućeg koda moguće u kasnijem trenutku pristupiti rezultatu inicirane pozadinske obrade. Ovim pristupom je moguće bez pauza u radu pokrenuti više pozadinskih obrada čuvajući reference na njihove buduće rezultate. Nakon pozivanja potrebnih obrada u željenom momenut može se izvršiti dereferenciranje njihovih „rezultata” čime će se pokrenuta asinhrona izvršavanja sinhronizovati. Dakle, void za standardnu pozadinsku obradu i Future za odlaganje momenta čekanja na kraj obrade – da li može biti jednostavnije?
Singleton bean Singleton bean je potpuno novi član EJB porodice i predstavlja podršku samog kontejnera za jedan od najpoznatijih paterna. Singlton je veoma često korišćen u dizajniranju aplikacija, ali u kompleksnijim, odnosno u takozvanim enterprise, okruženjima pojam
Razglednica sa Java2Days konferencije – Igor Popov
4
JavaSvet - otvorena java zajednica
singltona dobija nove dimenzije usled mogućnosti izvršavanja koda na više JVM-ova, na klaster i u load-balancing sistemima. Naravno i do sada su postojala rešenja za ovaj problem, ali ni jedno nije jednostavno kao dodavanje anotacije @Singleton na session bean. A to što je singlton u stvari poseban oblik session bean-a znači da koristi i sve prednosti koji ovaj donosi – thread-safe okruženje, podršku transakcijama, sigurnosne servise i druge. Koristeći standardne @PostConstruct i @PreDestroy anotacije nad metodama singleton bean-a se, u stvari, ostvaruje prijavljivanje na startup i shutdown događaje aplikacije. Pošto je u startu bean u potpunosti thread-safe moguće je ovo ponašanje po potrebi izmeniti upotrebom @ConcurrencyAttribute nad željenim metodama. Jedan scenario izmene podrazumevanog lock-ovanja radi unapređivanja performansi bi bio postavljanje read lock-a na get metode i read-write lock-a na set metode.
Cronoliki timer servis Usluge timer servisa se u EJB 3.1 verziji svode na @Schedule anotaciju nad metodom koja se želi automatski pokretati u određenim vremenskim trenucima. Sama konfiguracija ovih „trenutaka” se izvršava na način koji je poznat svima koji su nekada podešavali cron jobove i koristi vrednosti ili asterikse za sekunde, minute, sate, dane u mesecu i u nedelji kao i mesece i godine. Dakle, sva podešavanja timer zavisnih metoda se nalazi upravo tamo gde i treba da se nalazi – uz samu metodu – nema XML-a, nema podešavanja aplikativnog servera ili pokretanja nezavisnih “backend” aplikacija os-depedent načinom pomoću cron job-ova.
Svi smo mi POJO Osnovna ideja iza novih bean-ova jeste da se i oni učine običnim POJO-ima kojima se anotacijama omogućuje korišćenje određenih enterprise servisa. Rad sa POJO klasama, osim jednostavnosti i preglednosti, donosi i dodatnu veliku prednost kroz omogućavanje mnogo lakšeg testiranja enterprise koda. Pomenuto obogaćivanje klasa anotacijama je takođe dovedeno na viši nivo upotrebom „pametnih” default vrednosti. Opšteprihvaćena ideja „konvencija umesto konfiguracije” je konačno punom parom zaživela i u Java svetu – jer, na primer, zašto za metodu session bean-a izričito napominjati da treba da funkcioniše u okviru transakcije, ako je to skoro uvek slučaj?
EJB Lite Konvencija umesto konfiguracije je zaživela u još jednom aspektu EJB-ja – uveden je EJB Lite. EJB 3.1 Lite je podskup servisa koji nudi njegov stariji brat sačinjen tako da pokriva sve realne potrebe većine enterprise aplikacija. Neke od promena koje su ga učinili laganim su uklanjanje podrške za message driven bean-ove s jedne i asinhronog pozivanja s druge strane, uklanjanje timer servisa, kompletne podrške za web servise, sve backward-compatibility podrške za EJB specifikacije starije od verzije 3, podrške za rad sa legacy sistemima kao što je CORBA i drugo. Ovime se dolazi do efikasnijeg okruženja za rad i pojačava se poruka da Java Enterprise nije rezervisana isključivo za „programersku elitu“. Jedan od ciljeva EJB 3.1 specifikacije je bio i da se programiranje učini prirodnijim, lakšim i samim tim efikasnijim, kao i da se servisi koje ista nudi približe većem broju programera i aplikacija.
Razglednica sa Java2Days konferencije – Igor Popov
5
JavaSvet - otvorena java zajednica
JNDI Jedan od velikih propusta ranijih EJB specifikacija jeste JNDI, jer generisanje imena nije bilo standardizovano, odnosno izbor imena je bio ostavljen aplikativnom serveru. Ovo je naravno dovelo do najrazličitijih rešenja koja su učinila da se naruši portabilnost aplikacija, osobina kojom se Java često hvali. O tome koliko je jedna enterprise aplikacija u stvarnosti portabilna, posvećeno je posebno predavanje o čemu više možete pročitati u kasnijem odeljku. No, vratimo se na JNDI. On je sad deo specifikacije i definiše tri domena – java:global za resurse dostupne svim aplikacijama na aplikativnom serveru, zatim java:app sa vidljivošću na nivou aplikacije koja ga uvodi i na kraju java:module domen za vidljivost u okviru pojedinačnog modula enterprise aplikacije.
Proširivost EJB-a Za kraj treba navesti i verovatno najbitniju promenu EJB-a koja može postati prekretnica u njegovom daljem razvoju. Specifikacijom je predviđeno da EJB implementacija mora biti proširiva. Nadovezujući se na raniju ideju o POJO klasama kojima se na osnovu anotacija dodeljuju određeni enterprise servisi, specifikacija ne izdvaja posebno ni jedan od do sada pomenutih servisa, već ih sve tumači upravo tako – kao servise. A spisak servisa koji EJB bean-ovima stoje na raspolaganju je od sada moguće proširiti nezavisno razvijenim APIima i njihovim implementacijama čineći Java EE 6 i EJB 3.1 mnogo moćnijom platformom za razvoj.
GlassFish v3 Da nije sve ostalo samo na suvoj specifikaciji pokazuje GlassFish koji se sprema da u decembru izađe u konačnom obliku svoje v3 varijante i to u paketu sa Netbeans verzijom 6.8. GlassFish je zvanična referentna implementacija Java EE 6 i kao takva je obavezna da implementira sve do sada spomenuto uz mnogo drugih stvari koje se kriju duboko po JSR-ovima. Pored ovog velikog zadatka ostvareno je još nekoliko „samoinicijativnih“, kao što su zasnivanje razvoja aplikativnog servera na OSGi arhitekturi, podrška za GlassFish profile koji predstavljaju prilagođen skup modula za konkretne upotrebne slučajeve, čuvanje sesija aplikacije tokom redeploy-a, podrška za embedovanje GlassFish-a kao i za njegovo proširivanje third party modulima.
OSGi Arhitektura OSGi arhitektura jednom primenjena na određeni sistem omogućava osobine koje nisu toliko standardne među Java aplikacijama. OSGi je zasnovan na, grubo govoreći, kernelu koji pruža određene sistemske servise kao što su sigurnost, centralni registar, upravljanje korisničkim servisima, upravljanje životnim ciklusom objekata i upravljanje međuzavisnostima modula. Iznad kernela i ovih sistemskih servisa se dalje nalaze korisnički moduli, odnosno bundle-ovi, koji su u stvari obični jarovi koji u sebi sadrže određene OSGi-specifične klase i resurse kao i posebne metapodatke uskladištene u manifest fajlu. Osnovna prednost ove arhitekture jeste mogućnost potpunog upravljanja korisničkim modulima u smislu uklanjanja, postavljanja i zamene novijom verzijom, ali sve to dok kernel neprestano radi. U pozadini se ispred svakog modula postavlja dinamički proxy koji omogućava stavljanje zahteva na čekanje dok se implementacija modula, na primer, ne zameni novijom verzijom. Kada je zamena završena, zahtevi prikupljeni na čekanju se jednostavno otpuštaju i oni, nesvesni promena, nastavljaju da se izvršavaju. GlassFish v3 je, kao što je već napomenuto, potpuno OSGi kompatibilan, čak toliko da je moguće promeniti i implementaciju kernela – trenutno je to Apache Felix, ali ništa nas Razglednica sa Java2Days konferencije – Igor Popov
6
JavaSvet - otvorena java zajednica
ne sprečava da je zamenimo sa, na primer, Equinox-om koji pokreće Eclipse. Činjenica da na raspolaganju imamo OSGi arhitekturu objašnjava uvođenje Update Center komponente koja omogućava ažuriranje korisničkih modula kako se pojave njihove nove verzije bez potrebe za restartom samog aplikativnog servera. Dodatna prednost je mogućnost dodavanja third party ili razvoja sopstvenih modula koji mogu nuditi neke nove enterprise servise, rame uz rame sa već postojećim Java EE 6 servisima.
GlassFish Profili Takođe, jasno raspoređivanje funkcionalnosti po modulima je omogućilo i stvaranje takozvanih profila GlassFish-a. Profil definiše spisak modula koje on stavlja na raspolaganje korisniku, čineći tako konačni izgled aplikativnog servera manjim, efikasnijim i štedljivijim od kompletnog profila. Tako možemo lako prilagoditi svaku instancu konkretnom upotrebnom slučaju, odnosno aplikacijama koje nameravamo da postavimo i time omogućiti uštedu hardverskih resursa. Ovo može biti posebno interesantno tokom razvoja aplikacija kada možemo sa razvojne instance isključiti sve one module koji nisu potrebni aplikaciji na kojoj trenutno radimo čime bi se postiglo daleko brže pokretanje sistema i daleko kraće vreme odaziva. Trenutno, GlassFish zvanično nudi dva profila, ali kroz Update Center je moguće izvršiti precizno prilagođavanje. Ti profili su Web i Full. Full profil jeste to što piše, i dolazi sa svim modulima aktiviranim, dok je Web profil daleko zanimljiviji. Ranije je spomenut EJB Lite i on je u središtu ovog profila. Dakle, svi teški, legacy i backward compatibility moduli su ovde isključeni, EJB kao takav nije dostupan i zamenjuje ga EJB Lite. Drugim rečima, Web profil je fokusiran na onaj veliki broj aplikacija koje do sada nisu rađene kao enterprise iz jednostavnog razloga zasnovanog na, do sada ispravnoj, pretpostavci da male i srednje aplikacije ne mogu izvući dovoljno koristi iz enterprise servisa, koliko moraju da plate za njihovo uvođenje. Ta cena uvođenja se najviše ogleda u količini potrebnih resursa sa jedne i potrebnog predznanja s druge strane. Uvođenjem Web profila je takođe omogućeno uvođenje i velikog broja Java programera u Java Enterprise okruženje.
Embedovanje GlassFish-a Bitna mogućnost GlassFish-a jeste i embeded režim rada aplikativnog servera. U ovom režimu, GlassFish se svodi na nekoliko jarova koje treba staviti na classpath aplikacije i ona postaje u potpunosti nezavisna. Trenutno je u toku rad na Maven plugin-u koji bi omogućio komandu mvn glassfish:run pružajući alternativu Jetty-ju koji je prisutan u većini online dokumentacije u delu sa primerom pokretanja aplikacije. Zahvaljujući OSGi arhitekturi iza GlassFish-a, od njega je moguće napraviti aplikativni server po izboru – od najobičnijeg servlet kontejnera do najmoćnijeg full Java EE 6 okruženja. Takav prilagođen server sada stoji na raspolaganju alatima za build i deploy, za kontinualnu integraciju, za testiranje, a pruža i platformu za isporuku aplikacija koje ne zavise od unapred postojećeg i podešenog aplikativnog servera. Toliki stepen fleksibilnosti omogućava korišćenje jednog rešenja za širok spektar upotrebnih slučajeva time dodavajući enterprise znanju atribut reusable. Jednom savladan GlassFish pokriće sve potrebe za upravljanjem svih oblika sistema nezavisno od njihove kompleksnosti i nezavisno od faze razvoja tih sistema.
Portabilnost enterprise aplikacije Java se od prvog momenta ističe kao platforma koja funkcioniše na svim operativnim Razglednica sa Java2Days konferencije – Igor Popov
7
JavaSvet - otvorena java zajednica
sistemima, odnosno hardverskim konfiguracijama. Na osnovu ovoga deklarisana je kao portabilna platforma. Ako bi se ovde zaustavili, mogli bi ostati na takvoj konstataciji. Ali ako krenemo par koraka dalje, možemo doći do zanimljivih nedoslednosti koje narušavaju postojeću idiličnu sliku. Ako se detaljnije razmotri Java Enterprise platforma, može se doći do velikog broja osobina koje se drugačije opisuju ili koriste u različitim okruženjima. Na primer, deployment deskriptori se razlikuju po sadržaju za različite aplikativne servere na kojim se pokreću. Struktura artifakata kao što su WAR i EAR se takođe razlikuju od okruženja do okruženja – negde će se jarovi automatski naći na classpath-u aplikacije i class loader-i će ih uspešno pronaći ukoliko se nalaze u lib poddirektorijumu enterprise arhive, dok se u drugom okruženju mogu očekivati u root-u arhive. Hijerarhija pomenutih class loader-a se promenila od Java EE 5 do Java EE 6, a ništa ne garantuje da drugi aplikativni serveri nemaju sopstvene ideje kako class loader-i treba da rade. Tumačenje classpath-ova navedenih u manifest fajlu mogu funkcionisati u jednom okruženju, ali to nikako ne znači da će se negde drugde tako navedene putanje do jarova i klasa prevesti u identične apsolutne putanje. Upravljanje sigurnošću aplikacije nikada nije prioritet u razvoju novog sistema, ali jedno je sigurno – kada se aplikacija nađe u prvom funkcionalnom stanju i security manager se uključi – aplikacija više neće raditi. A i kada se jednom podesi, drugačije okruženje će zahtevati drugačije sigurnosno podešavanje. U većini slučajeva se Java aplikacija izvršava na Java virtuelnoj mašini, ali ipak postoje oni slučajevi kada je bitno koja je to tačno virtuelna mašina – ko je napravio baš tu implementaciju i kako se baš ona ponaša u tim ekstremnim podešavanjima rezervisanim za produkciono okruženje par dana pred puštanje sistema u rad... Modularnost je odlična ideja, ali redosled učitavanja modula je akcija koja je može urušiti usled ugrožavanja njihovih međuzavisnosti. JNDI imena generisana za enterprise resurse se razlikuju od servera do servera i aplikacije koje resurse učitavaju moraju da podrže sve potrebne varijacije imena ako se želi da bez izmena rade svuda. To naravno nije kraj liste, ali je možda više nego dovoljno. Neke od ovih problema su rešile novije verzije odgovarajućih specifikacija koje su ispravile svoje ranije nepreciznosti i nedostatke. Postupak sertifikacije aplikativnih servera koji implementiraju Java EE 6 će biti dobar znak da se portabilnost aplikacija vraća svom pravom značenju, ali uvek će se naći neki propust i uvek će se prethodno prostoj copy-paste akciji nad aplikacijom morati detaljno istestirati svi njeni aspekti.
Clouds and clusters Predavanja koja su se bavila ovom tematikom su bila: „Java and the Cloud“, „VMware and SpringSource: Bringing Java to the Clouds“, „Clustering your Application with Hazelcast“, „JBoss Clustering Solutions“ i „Building Efficient Application Grids with Oracle Coherence“. Cloud computing sa sobom donosi, pored obaveznog hype-a, i dosta novih skraćenica i termina. Termin koji predstavlja celu ovu oblast posvećenu oblacima i koji uvodi novu stavku u spisak na kom se nalaze hardver, firmver i softver, jeste termin klaudver. Neke od osnovnih skraćenica su i SaaS (Software as a Service), PaaS (Platform as a Service) i Daas (Datacenter as a Service). Primer SaaS-a bi bio recimo Google Docs koji omogućava upotrebu kancelarijskog softvera lociranog na Internetu. Primer PaaS-a bi bio Amazon EC2 (Amazon Elastic Compute Cloud) koji pruža okruženje za hostovanje korisnički razvijenih sistema. DaaS predstavlja ideju privatnog cloud-a koji se iznajmljuje kompanijama na korišćenje za sve potrebe koje pruža i klasični datacentar smešten u ormanu u kancelariji pored vaše. Ono što DaaS čini dodatno privlačnim za kompanije je takođe i činjenica da je u njega ugrađen viši nivo bezbednosti u obliku fizičke izolovanosti od hardversih resursa drugih cloud-ova kao i dodatna podrška za upravljanje stavljena na raspolagnje IT-u same kompanije. Razglednica sa Java2Days konferencije – Igor Popov
8
JavaSvet - otvorena java zajednica
Za funkcionisanje većih sistema, a oblak je za to savršen primer, neophodno je imati i specifičan softver koji će ga pokretati. Takva rešenja su spomenuta u drugoj grupi predavanja koja su se bavila klastering rešenjima. Između ostalih predstavljeni su Apache Hadoop i Hazelcast, kao i kombinacija VMware i SpringSource sistema.
Hazelcast Hazelcast je predstavljen kao klastering platforma za distribuciju skalabilnih podataka. Ona omogućava distribuiranje instanci poznatih Java klasa kao što su Queue, Set, List i Map. Takve instance se čuvaju replicirane u memoriji onoliko nodova klastera koliko se smatra za potrebno. Osim čuvanja podataka kroz replikaciju, moguće je uključiti i writethrough mehanizam koji svaku izmenu u memoriji klastera prosleđuje do centralne baze podataka koja, u ovom slučaju, na sebe preuzima samo ulogu bekap sistema. Dodatne funkcije Hazelcast-a koje treba spomenuti su i enkripcija podataka na nivou socket-a i podrška za transakcioni rad sa podacima uskladištenim na klasteru.
DMTF standardizacija Velika pažnja je bila posvećena i terminu cloud lock-in. Lock-in predstavlja probleme koji nastaju pri pokušaju da se sa jednog cloud provajdera pređe na drugi, odnoso predstavlja cenu migracije sistema zasnovanih na oblacima. Potpuni nedostatak standardizacije u ovoj oblasti znatno komplikuje migraciju kako sistema, tako i podataka na koje se on oslanja. Razlog leži u tome što je skoro uvek potrebno prilagoditi sistem specifičnostima konkretnog oblaka. S druge strane, ulažu se napori da se pri organizaciji DMTF (Distributed Management Task Force) dođe do prihvatljive specifikacije za ovo novo polje u oblasti informacionih tehnologija.
Prezentacioni sloj Prezentacioni sloj aplikacija je bio obrađen kroz predavanja: „Rapid Application Development with Apache Wicket“, „Advanced Apache Wicket Development“, „GWT Tips and Tricks for Beginners“, „Building scalable GWT applications“ i „JSF & Spring“.
Apache Wicket Wicket je predstavljen kao najbolji komponentno orijentisani framework, po funkcionalnostima u rangu Tapestry-ja, dok se po lakoći rada poredi sa Swing-om. Komponente se u Wicket-u u templejte stranica ugrađuju na mesto tagova označenih wicked:id atributima, dok se same komponente kreiraju i podešavaju u čistom Java kodu. Ovo jasno odvajanje nadležnosti za markup i Java kod između templejta i Java page klasa se navodi kao jedna od glavnih njegovih prednosti. Java pristup radu sa komponentama je razlika u odnosu na, na primer, JSF i Tapestry, a sličan je pristupu koji koristi GWT (Google Web Toolkit) kao i pomenuti ne-web framework Swing. Može se reći da se po tom osnovu alati za prezentacioni sloj mogu podeliti u dve grupe, a argumenti za i protiv jednog pristupa se i dalje zasnivaju isključivo na ličnim, odnosno subjektivnim, sklonostima. Ovo predavanje je po učešću prisutnih u njegovoj FAQ završnici bilo jedno od najinteresantnijih, ali da bi bilo i potpuni pogodak nedostajalo je možda i objektivno poređenje sa Tapestry rešenjem koje mu je alternativa za one programere kojima je za ugradnju komponenti u stranice bliži pristup kroz sam templejt kod umesto kroz, Razglednica sa Java2Days konferencije – Igor Popov
9
JavaSvet - otvorena java zajednica
pomenuti svingoliki, Java kod.
Popravka JSF-a Iako je JSF napredovao do verzije 2.0, proći će još dosta vremena pre nego što njegove prednosti dospeju i do sistema koji sada postoje. Do tada na raspolaganju imamo trenutno zastupljenu verziju JSF 1.2, a sa njom na raspolaganju na žalost imamo i poduži spisak loše implementiranih ili čak potpuno nepodržanih karakteristika neophodnih da bi se jedna Java biblioteka mogla nazvati prezentacionim framework-om. JSF se u osnovnom obliku koristi u sprezi sa JSP tehnolgijom za potrebe razvoja web stranica. Ali da bi se ostvario pravi potencijal mora se pribeći zameni ove komponente naprednijim Facelet templejt jezikom. Ono što ga preporučuje jeste mnogo kvalitetniji pristup izradi templejta koji se često poredi sa Tiles freamework-om i daleko je prijatniji oku web dizajnera koji ne želi da mu programerska logika smeta tokom rada. Podrška Facelet-a za kreiranje templejt komponenti i njihovog organizovanja u biblioteke komponenti dodatno olakšavaju i ubrzavaju razvoj. Za većinu novijih pristupa u izradi web aplikacija podrška, u okviru samog JSF-a, jednostavno ne postoji. Tako se, na primer, za implementaciju ajaksolikog ponašanja mora koristiti neka od dostupnih third party biblioteka kao što je Ajax4JSF dok se za friendly URL-ove mora pribeći upotrebi PrettyFaces biblioteke. Za poboljšanje perfomansi sajta, neophodno je izvršiti pakovanje i kompresiju mnogobrojnih resursa, kao što su JavaScript i CSS fajlovi, koji se prenose do klijentskog browser-a, pa se JSF mora ponovo unaprediti pomoću JAWR alata. Spring takođe nudi nekoliko unapređenja za JSF kroz svoje podprojekte Spring Faces, Spring EL (Spring Expression Language aka Unified EL++) i Spring Web Flow. Zajedno omogućavaju napredni jezik za izraze dostupan i iz konfiguracije za kontrolu toka, omogućava dodatni scope na nivou konverzacije kao i skup osnovnih komponenti za klijentsku validaciju unetih podataka. Za konverzacijski scope možda treba napomenuti da podržava kompleksnije korisničke procese i da se po životnom veku nalazi između request i session scope-a, jer se odvija kroz više, od strane programera, logički povezanih request-ova.
Zaključak Kada se ispod svega navedenog podvuče crta može se slobodno reći da je poseta Java2Days konferenciji bila pozitivno i korisno iskustvo. Dobra organizacija i topla dobrodošlica su pomogli da boravak u Sofiji protekne prijatno i u dobroj atmosferi dok je odličan izbor aktuelnih tema i dovođenje predavača svetskog ranga obezbedilo sigurnu budućnost ovom događaju. Možda bi najbolji način za završetak ove „razglednice“ bio parafraziranje nekoliko mudrosti, izrečenih u trenucima digresija, u svom izvornom obliku: „Invest on technology, not on product“, „Betting on Java EE is a great investment“ i definitivno omiljena - „It works on all browsers, and on Internet Explorer“. Uz nadu da će se na osnovu ovogodišnjeg uspeha Java2Days konferencije nastaviti i njen dalji razvoj i da će nam u narednim godinama donositi još novih tema i novih imena iz Jave sveta, šaljemo vam pozdrave u stilu naših domaćina - Приятен ден!
Razglednica sa Java2Days konferencije – Igor Popov
10