Prikazani su postovi s oznakom Spring MVC. Prikaži sve postove
Prikazani su postovi s oznakom Spring MVC. Prikaži sve postove

subota, 28. siječnja 2012.

Hibernate i Spring MVC integracija

Napokon! Kažem ja. Napokon malo zabavniji dio cijele ove priče. Napokon ću se dotaknuti teme hibernatea i spring mvc-a, ili kako mi je netko nedavno rekao - to je pod mus!
Hibernate je briljantan ORM, Spring MVC je briljantan framework za web i šta nalaže logika - da se to dvoje spoje. I to rade super, štoviše jedno drugoga nadopunjavaju.

Treba od nekud početi. Zašto uopće sve to? Ako niste spavali zadnjih 10.godina, trenutno je vrlo teško naći web stranicu koja svoj sadržaj ne sprema u bazu podataka. Naravno iznimke postoje i uvijek će ih biti, ali ako generaliziramo, ne znam tko više uopće odabire obične HTML stranice? Odgovor je vrlo lak - moderni hrvatski "biznismen" koji je dao nešto novaca susjedovom malom da mu napravi web stranicu za njegov "biznis". Ali čak i svaki napredniji "susjedov mali" bira bazu kao osnovu za spremanje podataka. Razlog je jednostavan - lakše je! Podatci su dostupni zauvijek, ti podatci se mogu pretraživati, raditi nešto s njima, a da ne pričam koliko je lako dodavanje novih sadržaja kad se ima iole dobar cms. Imajući sve to u vidu, vrijeme je da se vratim na naslov posta.

Ima nekoliko načina na koji se može naučiti ova tema, pa ću i nabrojati nekoliko:
  • Službena dokumentacija Spring frameworka (http://static.springsource.org/spring/docs/2.5.x/reference/orm.html)
  • Tutrorijali na webu (linkovi u daljnjem tekstu)
  • Pisana riječ u obliku knjige - Spring Persistence with Hiberante  (http://www.amazon.com/Spring-Persistence-Hibernate-Beginning-Tepper/dp/1430226323)
Napisani redoslijed nije slučajan, smatram da je to najbolji način za naučiti. Službenu dokumentaciju obavezno pročitajte ali nemojte previše ni pokušavati shvatiti iz nje. Je, super je napisana i sve to stoji ali pokušavati sve to zapamtiti - ne vidim smisla. Zato pročitajte dokumentaciju, neki važniji pojmovi će vam ostati u glavi, što je i najvažnije i pređite na tutorijale. Nema smisla raditi tutorijale dok ne prođete dokumentaciju jer neće znati o čemu se radi. A nakon što prođete tutorijale vratite se još jednom na dokumentaciju i sve će vam sjesti na mjesto - vjerujte me.
I dolazimo do knjige. (moj veliki uzdah - brz pretjerivanja!) Cijenim trud autora, ali nikako ni pod koji slučajem nemojte pokušati naučiti ovu temu preko ove knjige tj. nemojte napraviti istu pogrešku kao ja. U životu nisam našao knjigu koja ima više bugova. Skidanjem zipa sa službene stranice knjige i pokušavanje pokretanja builda na istim projektom je urodilo plodom od 63 errora?!? Čovjek bi pomislio da ako nešto prodaješ da ćeš i stajati iza toga. Istina za volju, nisu oni krivi. Kad su tiskali knjigu url od mavenovog repozitorija je bio drugačiji, ali tko se može sjetiti da to provjeri godinu dana kasnije? Malo traženja po googlu mi je dalo riješenje, ali to je samo vrh sante errora u knjizi.
Premda knjiga nije za početnika i nakon što se se uhvatili u koštac sa temom nemojte raditi primjere iz knjige. Knjigu uzmite kao lagano štivo gdje ćete vidjeti neke principe kako se nešto radi. Što se toga tiče knjiga ima neprocjenjivo znanje za prenijeti čitaocu.

I dolazimo do tutorijala, ruku na srce, od njih ćete najviše naučiti. Dati ću 2 linka na 2 turorijala a na vama je da odlučite koji vam se više sviđa. Napominjem da postoje još tutorijala na web, ali ja vam predlažem one koje sam ja prošao i što je važnije - znam da rade. Pošto svaki nudi čitatelju oduzimanje života na jedno minimalno sat vremena, ako ne i više, nema smisla raditi nešto što neće raditi ili što vas uči krivo.
Pa da dam i linkove:
  1. http://viralpatel.net/blogs/2010/11/spring3-mvc-hibernate-maven-tutorial-eclipse-example.html
  2. http://krams915.blogspot.com/2011/01/spring-mvc-3-hibernate-annotations.html
Nisu isti ali uče istu stvar na 2 načina. Redoslijed ostavljam vama, ali pojasnit ću što vam svako donosi/odnosi. Oba tutorijala se zasnivaju na MySQL bazi podataka, ali možete odabrati bilo koju.

Virapatel - ovo je ujedno i moj prvi tutotorial na koji sam naišao da radi. Što nije mala stvar. Treba imati na umu da je ovaj tutorial odrađen pomoću Mavena. Ovaj tutorial bi nazvao "lakšim" tj. napraviti ćete CRD dijelova od CRUD aplikacije. Naime u primjeru nije napravljen dio za editiranje zapisa. Druga stvar koja ga čini "lakšim" je da je kod rascijepkan u više klasa i na prvi pogleda samim time lakši za čitanje. Ali u drugom primjeru ćete vidjeti da je ovo duži način i da se sve može odraditi u manje linija koda. Glavni nedostatak je što nema komentara u kodu.
Skinite primjer, pokušajte pratiti i prepisati kod i pokušajte shvatiti kako cijela stvar radi. I zatim pređite na drugi tutorial.

Krams - koliko je ovaj tutorial dobar govori činjenica da Spring framework daje ovaj tutorial na svojim službenim stranicama kao tutorial za naučiti integraciju hiberante i springa. Još jedna stvar koja mu ide u prilog je da je nakon uočenih pogrešaka u kodu, autor je isti popravio na webu ali i u kodu te ponovni zip projekta stavio na web. Mogli bi se ugledati na njega momci koji pišu knjige na istu temu :)
Sad da kažem zašto je ovaj tutorial dobar: dobro objašnjen, hrpa komentara tako da kad gledate kod jasno vam je šta je šta. Ovaj tutorijal nudi i editiranje zapisa, tako da imate sve dijelove CRUD aplikacije.
Kada su nabrojane prednosti dolaze ne red nedostatci: nema ih! Dobro uvijek se može naći nešto, pa ako moram birati onda ću kao nedostatak navesti upotrebu loggera. S jedne strane je super jer daje priliku pregledavanja logova na serveru, a da s druge strane je to nedostatak jer uz sve silne komentare dodavanje loggera i komentara za njih kod je prenatrpan. Kad sam prolazio kod, brisao sam logger i komentare da vidim samo kod. Ali to sam ja.

Naravno jedna stvar na koju treba imati na umu je da oba primjera koriste MySQL bazu podataka, tako da ako hoćete koristiti neku drugu potrebno je napraviti promjene u jdbc.properties datoteki za Virapatel, te spring.properties datoteci za Krams. Ne zaboravite napraviti baze u MySQL-u pod imenima koja su navedena u tim properties datotekama, te ne zaboravite unjeti svoj username i password  za root  vašeg MySQL. Ako vam primjeri koje skinete ne budu radili onda niste napravili ove korake koje sam zadnje opisao.
S time svime na umu, sretno! Mislim da ću uskoro i ja dati neki praktičniji primjer ovoj temi, a do tada prođite ova dva tutotorijala i dokumentaciju.

utorak, 17. siječnja 2012.

Dobivanje JSON-a u Spring MVC-u

Ovo je jako važna tema i nadogradnja u Spring MVC-u. Spring MVC ima puno prednosti, a pored jednostavnog renderiranja alternativnih pogleda tipa pdf, vraćanje JSON-a je po meni sljedeća najveća prednost.

Prije verzije 3 Springa ovaj cijeli postupak je bio dosta kompliciraniji, ali sada je čisti "mačji kašalj". Dovoljna je samo jedna anotacija - @ResponseBody. Točniji primjer ću napraviti malo kasnije, a prije toga ću navesti šta nam je sve potrebno da bi "upogonili" cijelu stvar.

Ovu divnu stvar nam je omogućio Jackson (http://jackson.codehaus.org/). Jason je java json parser... Najbolje je otići na njihovu stranicu i vidjeti cijelo objašnjenje. Uglavnom ako nećete koristiti Maven onda obavezno odite u download dio i skinute jar i dodajte ga u build path.
Ako koristite Maven i njegove zavisnosti onda u pom dodajte sljedeću zavisnost:

<dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-mapper-asl</artifactId>
          <version>1.7.1.</version>
</dependency>

Naravno, verzija zavisi o verziji Jacksona koji ćete koristiti. Šta vam točno koja verzija donosi/odnosi pogledajte na njihovoj službenoj stranici.

Sada imamo sve preduvjete za početak, još nam samo preostaje dodati samo anotaciju @ResponseBody. A to se radi na ovaj način.
  • u metodi od koje želimo dobiti json dodamo @ResponseBody anotaciju
  • u jsp ili html stranici dohvatimo dobiveni json
Pravilo kojeg se trebamo pridržavati kod anotacije je da anotaciju @ResponseBody dodamo iza tipa pristupa metode (privat, public...) a prije vrste metode. Naravno ovu anotaciju stavljamo u naš kontroler. Ono što stavimo u naš return će biti sadržano u našem json-u. I to je to! Vrlo jednostavno.

Na netu sam našao dva super primjera na ovu temu. Jedan koristi Maven, a drugi ne ali je zato kompliciraniji.
Primjer koji koristi Maven:
http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/
Napredniji primjer:
http://krams915.blogspot.com/2011/01/spring-mvc-3-and-jquery-integration.html
 

utorak, 10. siječnja 2012.

Virtual pairs programmers iliti kako sam uložio 129$ u svoje znanje

Virtual pairs programmers je jedna odluka koju sam vagao i razmišljao dali da ili ne, ali koju nisam požalio. Štoviše svakome bi preporučio da isto napravi.

www.virtualpairprogrammers.com


Obično su Amerikanci ti koji radi video materijale za  e-learning, tako da sam bio ugodno iznenađen što su autori ovih materijala Englezi. Ako išta mogu reći, oni su pokazali kako se to radi premda sam bio skeptičan.

Prvo što ću objasniti je razlog zašto sam odlučio uložiti 129$ u svoje znanje. Smatram da je znanje jedina stvar koju ti nikad nitko ne može oduzeti i ne može osporiti, tako da svaki dolar, euro, kuna uložena se može samo vratiti. Osnovni razlog zašto sam se odlučio za Spring MVC je jer želim se baviti web developmentom a nakon Hibernatea, Spring MVC je logičan izbor, posebno radi dobre integracije njih skupa.
Naravno tražio sam po netu tutoriale, ali osim osnovih Hello Worlda ništa pametnije nisam našao. Ponuda knjiga na tu temu je i više nego očajna. Postoji knjiga od Apressa od Spring MVC-u i WebFlowu ali koja se bazira na verziji 2.0. Ako ste i malo upućeni u Spring znat ćete da je to verzija prije anotacija. Znači svaka klasa je nasljeđivala nešto i hrpu nekih metoda i ... uglavnom anotacije - BOG VAS BLAGOSLOVIO!!!
Za verziju 3.0 ne postoji jedna knjiga neko se može naći po poglavlje u knjiga Spring in Action i Spring Recepies.
Premda Spring slovi kao framework s najboljom dokumentacijom ikad, čak i od verzije 1.0. nije ni tu sve bajno. Postoji stvarno opsežna dokumentacija, čak i Spring MVC izrada aplikacije step-by-step ali za verziju 2.5. Nešto im i nije na listi prioriteta da isto naprave za 3.0. ili sad već za 3.1. Očito je da guraju svoj najnoviji projekt koji će kad tad možda i u potpunosti izgurnutu Spring MVC iz samostalne upotrebe, a to je Spring Roo.

Odlutao sam previše od orginale teme, pa da se vratim. Odluka je pala, kupujem! Brza transakcija preko pay pala i na mail dolazi link. Skidam 15 lekcija o Spring MVC-u i Web Flowu.
Svaka lekcija je super objašnjenja! Bez pretjerivanja. Čak se autor i potrudio pošto se sve bazira na verziji 3.0 da objasni kako bi stvari i izgledale u 2.5 na mjestima gdje se razlikuju tako da ako se ikad nađete bačeni u kod od 2.5 da znate o čemu se radi.
Još jedan plus je njihova služba podrške. Na moj upit oko jednog poglavlja (prije bilo kakve moje kupnje uopće) odgovor mi je došao u rekordnom brzom roku, premda je bila subota popodne. A da ne pričam kada sam naletio na pogrešku u poglavlju sa Spring MVC-om i JSON-om.
Naime autor sve primjere kada su gotovi prikazuje u google chrome, a ja u firefoxu. I na moje iznenađenje (radio se primjer o autocomplete u search boxu) prateći i prepisujući isti kod koji autor piše, njegov primjer radi, a moja doSearch funkija ne radi, štoviše dobivam error da funkcija u js nije definirana???
Posalao sam im mail, i u rekordnom roku mi je autor poslao mail da mu pošaljem cijeli war file jer prema ovome što on vidi iz mojeg jsp filea je da bi sve trebalo raditi ali ne radi. Nekoliko sati kasnije mi autor odgovara da mu je ovo bio pravi brain teaser :) ali da je uspio to na kraju riješiti. Naime on je kod snimanja materijala koristio verziju Chromea koja podržava ne zatvaranja tagova u html-u. tj ako ga vi zaboravite zatvoriti on će to sam napraviti za vas, a moj firefox, a i verzija Chromea (premda novija) koju sam ja koristio to ne podržavaju - vjerovatnost kao i dobitak na lotu!
Uglavnom mi smo u početnom script tagu isti tag i zatvorili, a da bi jquery include radio mora se imati otvarajući script tag, prazno mjesto pa zatvarajući tag. Čak mi je poslao i link na stackoverflow zašto je važno da se taj script tag tako zatvori, te da sam ja bio prvi koji je uočio taj problem i da je sve to stavljeno u erraratu. Svi sretni i zadovoljni, ja bogatiji za znanje, a oni siromašniji za error.

Sve u svemu njih moram preporučiti svakome, ako se dvoumite svakako kupite jer nećete požailiti