IBLOC 2007
Letos sem konferenco izkoristil za obisk delavnice "JBoss Seam: Revolucija poslovnega spleta", ki sta jo vodila (delavnico, ne revolucije) Aleš Justin in Matija Mazi. Naslov je bil za moj okus zastavljen preveč marketinško. Sama beseda "revolucija" ni bila pojasnjena.
Pogovarjali smo se o:
- JBoss (aplikacijski strežnik),
- Hibernate (OR/M ogrodje),
- Seam (spletno ogrodje)
- Drools (orodje za gradnjo poslovnih pravil),
- jBPM (workflow engine)
Šli smo korakoma skozi več faz implementacije mini CMS sistema. Aplikacija je bila shranjena v Subversion repozitoriju na Google Code, faze pa označene z značkami, tako da smo lahko hitro preizkušali funkcionalnosti - dober prijem.
Najprej smo govorili o modelu. Vsak razred je predstavljen kot POJO z anotacijami. Anotacije so bile praktično na vsakem koraku, na momente jih je bilo strašljivo veliko - najbrž se človek privadi. Anotacije so bile iz javax.persistence in org.hibernate.search.annotations. Več o Hibernate search kasneje. Na hitro smo omenili tudi strategije za preslikovanje modelnih razredov, če med njimi obstaja dedovanje. Pomembno je namreč, kako se taka struktura preslika v bazne entitete. Malo me je motilo, da se določeni pojmi niso razložili dovolj natančno, na primer - kako so med seboj povezani EJB 3, JPA in Hibernate 3 (v dvorani smo bili različni profili).
Ogledali smo si prikazno tehnologijo - JSF in Seam. Zdaj, ko poskušam napisati kako sta povezana, se mi poraja več vprašanj kot odgovorov. Moral sem iti na Google in malo raziskovati, da sem ugotovil, da je Seam "povezava" med JSF in EJB3. JSF je standard, privzeto Seam uporablja RichFaces kot implementacijo UI komponent. JSF je tudi po besedah Aleša, ki je zaposlen na JBoss, že od izida trpel zaradi slabega dizajna (v navezi z JSP), zaradi česar se mi je prav oddahnilo, saj je s tem pritrdil mojemu prepričanju. Bom pa najverjetneje v bližnji prihodnosti Seam (in JSF inkarnacije) raziskal. Na vprašanje o procesu izdelave spletne aplikacije, predvsem kako med seboj sodelujejo programerji in oblikovalci, nisem dobil ravno zadovoljivega odgovora. Grafično orodje za izdelavo dinamičnih HTML strani je še v izdelavi, ampak to sem odkril sam kasneje. Tako orodje Maticu ni kaj dosti pomenilo, po občutku.
Takole izgleda xhtml predloga (template) za vstopno stran mini CMS aplikacije:
Govorili smo tudi o tako imenovani bijekciji (bijection), ki je posplošena injekcija (injection). Inversion of Control ali Dependency Injection ni obskurna tehnika, ampak mainstream prijem za pisanje bolj modularnih in testabilnih aplikacij.
Seam ima dobro rešen koncept kontekstov. Iz servlet specifikacije recimo poznamo request, session in application kontekste, Seam pa doda predvsem dva zanimiva: conversation in business. Oba sta veliko bolj smiselna iz stališča aplikacije, saj je vsaka uporabnikova akcija sestavljena iz niza nekih opravil in pri pisanju spletnih aplikacij pride vsaka pomoč pri abstrakciji takih nizov opravil nad stateless http protokolom zelo prav. Poslovni procesi pa gredo še korak dalje. Zajemajo več pogovorov različnih uporabnikov, stanja pa se shranjujejo na strežniku in delujejo tudi po izpadu strežnika. Proces opišemo z jezikom jPDL.
Omenjen je bil SeamGen, ki zna iz podatkovne baze zgraditi preprosto (iz publike je bilo slišati, da je še zelo nezrel) CRUD spletno aplikacijo. Videno in boljše realizirano že davno tega (WebObjects Direct to Web ali Trails).
Avtentikacija in avtorizacija (AA) sta izvedeni kot nadgradnja nad JAAS in Seam skrije kompleksnost le-tega. Z Drools opišemo pravila, če jih potrebujemo za kompleksnejše postopke za AA.
Hibernate Search je bila ena izmed zanimivejših stvari tega predavanja. Poanta je, da z anotacijami v našem modelnem razredu, ki je seveda tudi perzistenten, označimo katera "polja" naj se indeksirajo (Lucene), tako da lahko transparentno po podatkih tudi iščemo (full text search)! Iskalnik nam tako vrača že inicializarane POJO objekte, ki ustrezaju danemu iskalmenu pogoju. Zelo, zelo zanimivo.
Ajax je pokrit z RichFaces. Malo, skoraj nič, nismo govorili o tem. Za raziskat.
No in na koncu smo aplikacijo pognali še v gruči (dva prenosna računalnika). V "osnovnem" načinu je gruča delovala, saj je po zrušitvi enega JBoss aplikacijskega strežnika delo prevzel drugi in uporabnik ni opazil, da dela na drugem stroju. Ni pa delovalo (ne vem zakaj) nadaljevanje dela, če je bil uporabik v seji (oddaja članka), ki traja čez več request-response ciklov.
Aleš pravi, da bo JBoss 5.0 kompletno prepisan na področju class loadinga, ker na zdajšnje stanje niso ravno ponosni.
Predavanje smo podaljšali kar za celo uro, ker je bilo na urniku skoraj preveč snovi - vsaka izmed njih bi lahko trajala nekaj ur. Teme so nam dale dobre iztočnice za samostojno nadaljevanje.