First of all, it's been a wile since my last post. There is no good reason, but I have been busy, real busy.
I have a new job, new town, a lot of new responsibilities and challenges. But enough with the excuses. Anyone can make excuses but only a few have what it takes to do something.
Now back to my post topic. Today at work I encountered a problem, and it was a SQL Server kind of a problem. JDBC problem to be accurate! I'm doing a Spring RESTful web service that uses Hibernate ORM as a persistence layer and SQL Server 2008 as my database. I'm also using Maven as my build tool, and I started to add dependencies and got to SQL Server. My first awakening was that there is no official maven dependency for SQL Server! Once again Microsoft has no love for the Java people. There are a couple of work-arounds for solving this problem but for some reason I wasn't able to get it working. The easiest one that was suppose to work was using the open source jdbc driver for SQL Server, but it didn't seem to do the trick for me.
I ended up doing the following thing, maybe no the best thing to do but it got the job done. I excluded the sql server jdbc dependency form the pom file, and added the SQL 4 JDBC as a external library. Now the surprising part for me - you have to install the JDBC driver on you computer (I run Windows 7 on my office computer. Actually, now when I remember when I installed PostgreSQL I remember there was a option to install the JDBC driver for it, but for the life of me I can't remember if I checked it!), and it's not a simple next-next-next kind of installation.
Anyway I had the problem of installing the JDBC driver. I followed this blog post to the letter:
http://www.harlansmith.net/2012/01/installing-microsoft-jdbc-for-sql.html
You have to unpack it, then run the following in your cmd:
set CLASSPATH=.;JDBC_install_path\sqljdbc_version\language\sqljdbc4.jar
Remember:You can set only one driver for the classpath. It can be sqljdbc.jar OR sqljdbc4.jar (I recommend 4 - because at first I used the sqljdbc.jar and got the error that I need to use sqljdbc 4 with 1.7 JDK)
And don't forget to copy the sqljdbc_auth.dll to your System32 folder. If you follow the blog post that I mentioned then you will see a sample code to see if the driver is working. Try it out, just don't forget to add sqljdbc4.jar to your Build Path. And that is it, so I thought.
For some reason the sample code worked, but when I was deploying the war file to Tomcat I got the error that the underlying database could not be accessed (or something like that). It was the end of the work day so I had no patience to go on one more discovery adventure. I ended up setting the ODCB for the SQL Server I wanted to connect to. And than the JDCB url was not in the format of: jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
But in a format of:
jdbc:odbc:odbc_name
And it worked! Not the best solution, but finally I could finally test my web server. Perhaps I made a simple writing error when defining my jdbc url, so it didn't work, but I will try that our tomorrow, because tomorrow is another day. Perhaps tomorrow I will be smarter about the whole SQL Server JDCB thing.
My personal blog about Java web programming, Spring MVC, Spring framework, Hibernate ORM...
srijeda, 16. svibnja 2012.
nedjelja, 12. veljače 2012.
e-knjiga Spring In Practice - early access edition
Prije nekoliko dana sam naletio na tweet od Spring Sourcea gdje su dali link na njihov tjedni pregled vijesti: http://www.springsource.org/node/3466
Hrpa korisnih linkova, informacija i ostalog što ti srce poželi. Premda jedan paragraf mi je odvukao pozornost. Spring In Practice - upcoming book! Hmm dali to postoji knjiga o Springu koja je prošla nezamijećena ispod mog radara?!? Nemoguće, ali ipak moguće. Ono što me tješi je da je knjiga još uvijek u nastajanju i da se može nabaviti kao early edition. Hmmm za ovo nikad nisam čuo. Otišao sam na stranice izdavača Manninga da saznam nešto više.
http://www.manning.com/wheeler/
Ono što sam saznao me nadasve oduševilo. Knjiga sadrži 14 poglavlja i sva su više manje gotova. Gledajući poglavlja vidim da je to knjiga koja veoma obećava. Ali još uvijek sam oprezan (ipak iskustvo me naučilo nešto), jer previše knjiga obećava, ali jako mali broj i ispuni obećanja. Zato sam odlučio baciti oko na besplatno poglavlje, za što se treba dati svoju e-mail adresa. Poglavlje je stiglo na mail uz dodatak - kod koji mi odobrava 35% popusta kod kupnje.
Još malo googlanja po netu o recenzijama i odluka je pala. Kupujem knjigu! Na originalnu cijenu od 35.99$ sam odlučio primijeniti svoj popust od 35% i konačna cijena je pala na 23.39$ što je super cijena. Plus kupnjom knjige sam dobio 35% popusta na svoju sljedeću kupnju :)
Pošto je e-knjiga dostupna preko Manning Early Access Programa za sad je dostupna samo e-knjiga i to u tekućem izdanju. Ono što to zapravo znači ako kupite takvu knjigu dobivate ona poglavlja koja su do tada napisana, a kod svake promjene/izmjene/dodavanja novih poglavlja ista automatski dobivate na svoj mail. Spring In Practice ima sva poglavlja manje više završena, ali ipak nedostaje uvod, sadržaj, index... i još neke stitnice. Onoga dana kada knjiga bude završena dobiti ću i gotovu verziju.
A sada ono što me navelo da kupim knjigu, a to je njen sadržaj. Kreće se od neke osnovne web stranice i sa svakim poglavljem se uči nešto novo.
1 Introducing Spring: the dependency injection containe
2 Data persistence, ORM & transactions
3 Building web applications with Spring Web MVC
Part 2 Application Recipes
4 Basic web forms
5 Enhancing Spring MVC applications with Web Flow
6 Authenticating users
7 Authorizing user requests
8 Communicating with users and customers
9 Creating a rich text comment engine
10 Integration testing
11 Product search and image management
12 Building an article delivery engine
13 Enterprise integration
14 Create a Spring-based "site-up" framework
Razlog zbog čeka sam kupio knjigu je zato što je knjiga puna primjera, a ti primjeri nisu tipa "hello world". Pokriven je Hibernate, web forme, validacija, Spring Security, pa čak i Hibernate Search što me jako iznenadilo i razveselilo.
Još jedna stvar me iznimno oduševila, a to je da knjiga ima i svoj forum. Forum održavaju sami autori knjige, pa ako uočite bilo kakvu pogrešku slobodno im javite, a prema onome što sam našao oni uvijek to u najkraćem roku poprave. Čak je netko napisao da zašto je source kod dostupan sa hrpom jar-ova a nije napravljen pomoću Mavena. Zato si je jedan autor dao truda i napravio zavisnosti pomoću Mavena i sav source kod stavio na GitHub (od sada tog autora pratim na GitHubu) tako da ću o svakoj promjeni biti pravovremeno obaviješten.
Jedan zanimljiv detalj je onaj o načinu kojim su se odlučili zaštiti od piratstva. U footeru knjige je otisnuto moje ime i moja e-mail adresa, pa ako bi se netko odlučio podijeliti knjigu vrlo lako bi se pronašao "krivac". Dobar trik, u ovo doba piratstva, ali imajući na umu da sam knjigu platio 23$ dolara potpuno se slažem s njima. Više ćete platiti 2 pizze i sok nego ovu knjigu. A ako je svladate napraviti ćete vrlo veliki korak za svoju karijeru i moći ćete kupiti više pizza :D
Jedino što mi sada preostaje je i pročitati knjigu pa prenijeti cijelu i detaljnu recenziju. Premda imam neki osjećaj da će mi knjiga dati puno materijala za postove.
Hrpa korisnih linkova, informacija i ostalog što ti srce poželi. Premda jedan paragraf mi je odvukao pozornost. Spring In Practice - upcoming book! Hmm dali to postoji knjiga o Springu koja je prošla nezamijećena ispod mog radara?!? Nemoguće, ali ipak moguće. Ono što me tješi je da je knjiga još uvijek u nastajanju i da se može nabaviti kao early edition. Hmmm za ovo nikad nisam čuo. Otišao sam na stranice izdavača Manninga da saznam nešto više.
http://www.manning.com/wheeler/
Ono što sam saznao me nadasve oduševilo. Knjiga sadrži 14 poglavlja i sva su više manje gotova. Gledajući poglavlja vidim da je to knjiga koja veoma obećava. Ali još uvijek sam oprezan (ipak iskustvo me naučilo nešto), jer previše knjiga obećava, ali jako mali broj i ispuni obećanja. Zato sam odlučio baciti oko na besplatno poglavlje, za što se treba dati svoju e-mail adresa. Poglavlje je stiglo na mail uz dodatak - kod koji mi odobrava 35% popusta kod kupnje.
Još malo googlanja po netu o recenzijama i odluka je pala. Kupujem knjigu! Na originalnu cijenu od 35.99$ sam odlučio primijeniti svoj popust od 35% i konačna cijena je pala na 23.39$ što je super cijena. Plus kupnjom knjige sam dobio 35% popusta na svoju sljedeću kupnju :)
Pošto je e-knjiga dostupna preko Manning Early Access Programa za sad je dostupna samo e-knjiga i to u tekućem izdanju. Ono što to zapravo znači ako kupite takvu knjigu dobivate ona poglavlja koja su do tada napisana, a kod svake promjene/izmjene/dodavanja novih poglavlja ista automatski dobivate na svoj mail. Spring In Practice ima sva poglavlja manje više završena, ali ipak nedostaje uvod, sadržaj, index... i još neke stitnice. Onoga dana kada knjiga bude završena dobiti ću i gotovu verziju.
A sada ono što me navelo da kupim knjigu, a to je njen sadržaj. Kreće se od neke osnovne web stranice i sa svakim poglavljem se uči nešto novo.
1 Introducing Spring: the dependency injection containe
2 Data persistence, ORM & transactions
3 Building web applications with Spring Web MVC
Part 2 Application Recipes
4 Basic web forms
5 Enhancing Spring MVC applications with Web Flow
6 Authenticating users
7 Authorizing user requests
8 Communicating with users and customers
9 Creating a rich text comment engine
10 Integration testing
11 Product search and image management
12 Building an article delivery engine
13 Enterprise integration
14 Create a Spring-based "site-up" framework
Razlog zbog čeka sam kupio knjigu je zato što je knjiga puna primjera, a ti primjeri nisu tipa "hello world". Pokriven je Hibernate, web forme, validacija, Spring Security, pa čak i Hibernate Search što me jako iznenadilo i razveselilo.
Još jedna stvar me iznimno oduševila, a to je da knjiga ima i svoj forum. Forum održavaju sami autori knjige, pa ako uočite bilo kakvu pogrešku slobodno im javite, a prema onome što sam našao oni uvijek to u najkraćem roku poprave. Čak je netko napisao da zašto je source kod dostupan sa hrpom jar-ova a nije napravljen pomoću Mavena. Zato si je jedan autor dao truda i napravio zavisnosti pomoću Mavena i sav source kod stavio na GitHub (od sada tog autora pratim na GitHubu) tako da ću o svakoj promjeni biti pravovremeno obaviješten.
Jedan zanimljiv detalj je onaj o načinu kojim su se odlučili zaštiti od piratstva. U footeru knjige je otisnuto moje ime i moja e-mail adresa, pa ako bi se netko odlučio podijeliti knjigu vrlo lako bi se pronašao "krivac". Dobar trik, u ovo doba piratstva, ali imajući na umu da sam knjigu platio 23$ dolara potpuno se slažem s njima. Više ćete platiti 2 pizze i sok nego ovu knjigu. A ako je svladate napraviti ćete vrlo veliki korak za svoju karijeru i moći ćete kupiti više pizza :D
Jedino što mi sada preostaje je i pročitati knjigu pa prenijeti cijelu i detaljnu recenziju. Premda imam neki osjećaj da će mi knjiga dati puno materijala za postove.
ponedjeljak, 6. veljače 2012.
HTTP Status 500 - pa ti pogoditi što je pošlo po krivu?
Upravo sam se igrao sa errorom HTTP Status 500. Naslov koji sam stavio proizlazi iz ovog objašnjenja na webu:
"This is a 'catch-all' error generated by the Web server. Basically something has gone wrong, but the server can not be more specific about the error condition in its response to the client..."
To je prvi rezultat koji je prikazao google, objašnjenje je malo poduže od ovoga, ali ove dve rečenice su mi se urezale u rožnicu! Na svu sreću otklonio sam svoj problem, ali sam išao istražiti što to znači taj status 500. Sva sreća da sam išao tim putem i da tomcat osim statusa 500 ispiše i root cause. Zamislite samo situaciju gdje bi morali naći bug na samo osnovi ovog statusa 500 - vjerojatno netko može, ali to ipak ulazi u kategoriju hard core mazohizma.
Sada da objasnim kako sam se uopće našao u ovoj situaciji. Naime pošto je ovaj petak počela opsada snijegom i nije baš bilo preporučljivo izlaziti u duge šetnje pejzažom, odlučio sam napraviti nešto što sam jako dugo odgađao - instalirati Mac OS na svoj PC. Malo googlanja, malo youtube, malo blogova i wiki i par sati kasnije imao sam verziju 10.6.6. na svom PC-u. Samo mogu reći da sam oduševljen i da mi je žao što ovo nisam prije napravio. Zašto nije padao snijeg tako malo ranije. :D
Šalu na stranu, to sam napravio kako bih proširio svoje znanje. Naime sav svoj development (oko 90%) uvijek radim na Windowsima 7, pa je došlo vrijeme da vidim kako se to radi i na Mac OS. Linux sam probao, Mac je jedini preostao.
Oduševljen sam svime što najnapredniji OS na svijetu nudi. Ali trebalo je instalirati neke stvari koje su mi od iznimne važnosti - MySQL, PosgreSQL, Eclipse, Tomcat...
PostgreSQL i Eclipse dio je odrađen s lakoćom, s MySQL-om sam se malo pomučio. Ali jedno gledanje youtube clipa je sve riješilo. Naime nisam znao da se mora paliti pod System Preferences. Jedini pravi problem i taj problem bi trebao biti pod navodnicima, je bio instalacija Tomcata. Malo truda i malo prčkanja po terminalu je dalo ploda. Još jedna stvar koja postoji za Mac je Tomcat controller, genijalni mali besplatni programičić s kojim se lako pokreće ili stopira tomcat.
Kažu da slika vrijedi 1000 riječi, pa nadam se da je i s ovom tako. Imate 3 gumba koji sami sebe objašnjavaju. Gumb View vas odvodi na http://localhost:8080. Jednostavno i savršeno radi! Obožavam jednostavne stvari, kao npr. program Skitch pomoću koga je i nastao ovaj screen capture. Ali o tom i sličnim programima bez kojih ne znam kako sam do sada živio u nekom drugom postu.
Vrijeme je da se vratim statusu 500. Ovako je izgledao jedan dio:
Pomoću strjelica sam označio neke stvari na koje treba obratiti pozornost kod traženja bugova koji su doveli do errora. Prva strijelica nam govori da nije otvoren session od hiberante, što nam daje do znanja da je problem u ORM dijelu aplikacije a ne sa Spring MVC-om. Druga strjelica nam govori da ne može otvoriti konekciju što me je uvelike dovelo do rješenja. Da bi se konekcija otvorila moramo imati dobar url definiran za JDBC, imati ispravne podatke za username i password te moramo imati napravljenu bazu na MySQL serveru (jer kao što sam već pisao u blogu, Hibernate ne može stvoriti bazu na serveru. Tablicu može ali bazu ne, u protivnom baca exception). Treća i četvrta strjelica potvrđuju prve dvije. Nakon druge mi je bilo jasno u čemu je problem. Aplikaciju sam razvijao na Window 7 gdje mi je MySQL server imao root password, a kod instalacije MySQL na Mac OS-u po defaultu on je nema.
Tako je i bilo. Maknuo sam navedeni password u konfiguraciji hibernatea, napravio Maven build, stavio war na Tomcat i voila, aplikacija radi! Zanimljivo kako mala sitnica može izazvati veliki exception report :)
Mislim da bi si svako toliko trebao napraviti neki namjerni bug tipa ovoga passworda da si istreniram oko u pronalaženju i otklanjanju errora. Naime prije nekoliko dana krenuo sam raditi 2 klase koje ću mapirati pomoću Hibernatea. Istina napravio sam obadvije, ali kada sam krenuo raditi prvu uspio sam staviti samo @Entity anotaciju i ništa više. Zaključio sam da je logičnije da prvo napravim drugu klasu do kraja pa da se onda vratim na prvu, nekakav zakon logike mi je to nalagao. Zaboravio sam uopće na prvu klasu, i smaknuo sam je s uma. Kada sam krenuo pokrenuti aplikaciju dobio sam veliki error report gdje sam morao tražiti i iščitavati sve i svašta. Brza google pretraga mi je dala polovični odgovor, ali mi se onda upalila lampica. Stavio sam @Entity anotaciju a nisam @Id, naime Hiberante ove dve anotacije smatra minimum koji mora postojati u suprotnom baca error. Nevjerojatno kako mala stvar može stvoriti veliki problem ako se ne pazi. Doduše ja to sve smatram dobrim treningom.
"This is a 'catch-all' error generated by the Web server. Basically something has gone wrong, but the server can not be more specific about the error condition in its response to the client..."
To je prvi rezultat koji je prikazao google, objašnjenje je malo poduže od ovoga, ali ove dve rečenice su mi se urezale u rožnicu! Na svu sreću otklonio sam svoj problem, ali sam išao istražiti što to znači taj status 500. Sva sreća da sam išao tim putem i da tomcat osim statusa 500 ispiše i root cause. Zamislite samo situaciju gdje bi morali naći bug na samo osnovi ovog statusa 500 - vjerojatno netko može, ali to ipak ulazi u kategoriju hard core mazohizma.
Sada da objasnim kako sam se uopće našao u ovoj situaciji. Naime pošto je ovaj petak počela opsada snijegom i nije baš bilo preporučljivo izlaziti u duge šetnje pejzažom, odlučio sam napraviti nešto što sam jako dugo odgađao - instalirati Mac OS na svoj PC. Malo googlanja, malo youtube, malo blogova i wiki i par sati kasnije imao sam verziju 10.6.6. na svom PC-u. Samo mogu reći da sam oduševljen i da mi je žao što ovo nisam prije napravio. Zašto nije padao snijeg tako malo ranije. :D
Šalu na stranu, to sam napravio kako bih proširio svoje znanje. Naime sav svoj development (oko 90%) uvijek radim na Windowsima 7, pa je došlo vrijeme da vidim kako se to radi i na Mac OS. Linux sam probao, Mac je jedini preostao.
Oduševljen sam svime što najnapredniji OS na svijetu nudi. Ali trebalo je instalirati neke stvari koje su mi od iznimne važnosti - MySQL, PosgreSQL, Eclipse, Tomcat...
PostgreSQL i Eclipse dio je odrađen s lakoćom, s MySQL-om sam se malo pomučio. Ali jedno gledanje youtube clipa je sve riješilo. Naime nisam znao da se mora paliti pod System Preferences. Jedini pravi problem i taj problem bi trebao biti pod navodnicima, je bio instalacija Tomcata. Malo truda i malo prčkanja po terminalu je dalo ploda. Još jedna stvar koja postoji za Mac je Tomcat controller, genijalni mali besplatni programičić s kojim se lako pokreće ili stopira tomcat.
Kažu da slika vrijedi 1000 riječi, pa nadam se da je i s ovom tako. Imate 3 gumba koji sami sebe objašnjavaju. Gumb View vas odvodi na http://localhost:8080. Jednostavno i savršeno radi! Obožavam jednostavne stvari, kao npr. program Skitch pomoću koga je i nastao ovaj screen capture. Ali o tom i sličnim programima bez kojih ne znam kako sam do sada živio u nekom drugom postu.
Vrijeme je da se vratim statusu 500. Ovako je izgledao jedan dio:
Pomoću strjelica sam označio neke stvari na koje treba obratiti pozornost kod traženja bugova koji su doveli do errora. Prva strijelica nam govori da nije otvoren session od hiberante, što nam daje do znanja da je problem u ORM dijelu aplikacije a ne sa Spring MVC-om. Druga strjelica nam govori da ne može otvoriti konekciju što me je uvelike dovelo do rješenja. Da bi se konekcija otvorila moramo imati dobar url definiran za JDBC, imati ispravne podatke za username i password te moramo imati napravljenu bazu na MySQL serveru (jer kao što sam već pisao u blogu, Hibernate ne može stvoriti bazu na serveru. Tablicu može ali bazu ne, u protivnom baca exception). Treća i četvrta strjelica potvrđuju prve dvije. Nakon druge mi je bilo jasno u čemu je problem. Aplikaciju sam razvijao na Window 7 gdje mi je MySQL server imao root password, a kod instalacije MySQL na Mac OS-u po defaultu on je nema.
Tako je i bilo. Maknuo sam navedeni password u konfiguraciji hibernatea, napravio Maven build, stavio war na Tomcat i voila, aplikacija radi! Zanimljivo kako mala sitnica može izazvati veliki exception report :)
Mislim da bi si svako toliko trebao napraviti neki namjerni bug tipa ovoga passworda da si istreniram oko u pronalaženju i otklanjanju errora. Naime prije nekoliko dana krenuo sam raditi 2 klase koje ću mapirati pomoću Hibernatea. Istina napravio sam obadvije, ali kada sam krenuo raditi prvu uspio sam staviti samo @Entity anotaciju i ništa više. Zaključio sam da je logičnije da prvo napravim drugu klasu do kraja pa da se onda vratim na prvu, nekakav zakon logike mi je to nalagao. Zaboravio sam uopće na prvu klasu, i smaknuo sam je s uma. Kada sam krenuo pokrenuti aplikaciju dobio sam veliki error report gdje sam morao tražiti i iščitavati sve i svašta. Brza google pretraga mi je dala polovični odgovor, ali mi se onda upalila lampica. Stavio sam @Entity anotaciju a nisam @Id, naime Hiberante ove dve anotacije smatra minimum koji mora postojati u suprotnom baca error. Nevjerojatno kako mala stvar može stvoriti veliki problem ako se ne pazi. Doduše ja to sve smatram dobrim treningom.
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:
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:
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.
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)
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:
- http://viralpatel.net/blogs/2010/11/spring3-mvc-hibernate-maven-tutorial-eclipse-example.html
- http://krams915.blogspot.com/2011/01/spring-mvc-3-hibernate-annotations.html
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.
subota, 21. siječnja 2012.
Lista Hibernate anotacija
Nešto sinoć surfam bespućima internetskih valova i kad mi na um nešto padne. Ne nije knjiga s police, nego ideja. Bacim se u pretragu, te potvrdim ono što sam i mislio. Na netu ne postoji (barem ja nisam mogao naći) listu hibernate anotacija. Samo onako prosta lista gdje s jedne strane su anotacija, a s druge kratko objašnjenje anotacije. Čak, što me i začudilo, ne postoji ništa slično ni na RefCardz?!? Najbliže što se tome može naći je na jbossovoj dokumentaciji o hiberanteu u ovom formatu:
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/
Ali to nije ono što ja želim. Samo kada vidim scrollbar koliko je mršav u gornjem desnom uglu - muka mi je. To definitivno nije ono što ja želim i trebam. Meni treba lista anotacija (bez primjera primjenjivanja istih) kada nešto radim da bacim pogled u nadi da mi dođe inspiracija kako nešto napraviti.
Pogledao sam i knjigu Hibernate Recepies, A Problem-Solution-Approach koju imam. Ni tamo ne postoji ništa takvo, možda sam i naivan što sam išao i gledati kad naslov kaže kakva je knjiga i s kojim pristupom obrađuju teme. Ali da ne bude - nismo znali. Pa evo da i ja dodam koji centimetar znanja u metre valova u bespuću interneta.
Napominjem da neću stavljati anotacije za Hibernate Search i ako uspijem za Cashing. To su područja koja su nauke same za sebe i mogli bi se pisati blogovi, knjige i sl. samo za njih. Pa da počnem:
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/
Ali to nije ono što ja želim. Samo kada vidim scrollbar koliko je mršav u gornjem desnom uglu - muka mi je. To definitivno nije ono što ja želim i trebam. Meni treba lista anotacija (bez primjera primjenjivanja istih) kada nešto radim da bacim pogled u nadi da mi dođe inspiracija kako nešto napraviti.
Pogledao sam i knjigu Hibernate Recepies, A Problem-Solution-Approach koju imam. Ni tamo ne postoji ništa takvo, možda sam i naivan što sam išao i gledati kad naslov kaže kakva je knjiga i s kojim pristupom obrađuju teme. Ali da ne bude - nismo znali. Pa evo da i ja dodam koji centimetar znanja u metre valova u bespuću interneta.
Napominjem da neću stavljati anotacije za Hibernate Search i ako uspijem za Cashing. To su područja koja su nauke same za sebe i mogli bi se pisati blogovi, knjige i sl. samo za njih. Pa da počnem:
- @Entity - osnovna antacija kojom označavamo klasu koju želimo mapiratu u bazu
- @Id - uz entity minimum potreban za mapiranje klase. Označava primarni ključ
- @GeneratedValue - automatska inkrementacija id-a
- @Table - služi za definiranje imena tablice, kataloga i scheme za vašu klasu
- @Version - dodavanje "verzije" u dodatnu kolonu radi uspoređivanja kontaktirajućih updateva
- @Transient - po defaultu sva polja u klasi će biti mapirana u bazi, ako neko polje ne želimo mapirati koristimo ovu anotaciju
- @Lob - po defaultu npr. za String Hibernate će pretvoriti to u bazi u VarChar s dužinom od 255 znakova, tako da je Lob oznaka za tkz. velike oznake.
@Embeddable - umetanje i spajanje komponenti u klasu@OneToOne - mapiranje jedan naprama jedan- @OneToMany - mapiranje jedna naprema više
- @ManyToMany - mapiranje više naprema više
- @JoinColumns - na kojoj osnovi će se vršiti mapiranje
- @PrimaryKeyColumn i @PrimaryKeyColumns - definiraju primarni ključ subklasa
- @SecondaryTable - mapiranje klase u nekoliko tablica
- @Cashable - oznaka da ćemo koristiti cashing u entitiju
- @NamedQuery i @NamedQueries - stvaranje upita (ne znam kako da to prevedem na Hr) - stvaranje named queries
- @NotNull - ne dopuštanje null vrijednosti
- @Size.max - definiranje veličine polja
- @Min, @Max - definiranje raspona
četvrtak, 19. siječnja 2012.
Validacija?
Validacija - što je to u uopće i zašto nam treba? Kako je kvalitetno napraviti? I tako dalje i tako dalje.... o ovim potpitanjima bi se dalo raspravljati. Kao i sve malo bolje/važnije stvari u programiranju postoji nekoliko načina kako se može napraviti validacija. Na programeru je da odebere svoj "otrov", ja ću navesti načine koje ja znam i umijem:
Svaka od navedenih metoda nudi svoje nedostatke i prednosti. Navest ću neke od njih. Naravno Java Script će raditi samo ako je js omogućen u browseru, ali ni to nije bez lijeka - jednostavna poruka se da ispisati ako je kojim slučajem napravio disable js u svom browseru (mislim da 90% korisnika ni ne znam kako se ovo radi). Ne znanje korisnika nekad može biti velika prednost. Ali budimo realni pisanje validacije u običnom js nije baš najlakši posao na svijetu. Ako se baš odlučite na js pristup možda je ipak jQuery put kojim bi se trebali uputiti. Premda jQuery ne smatra validaciju kao primarnu djelatnost, ali zato je nudi kao plug in. Mali pogled na službenu dokumentaciju će zadovoljiti i najizbirljivije (http://docs.jquery.com/Plugins/Validation). Ako vam to ne odgovara probajte više infa naći ovjde: http://speckyboy.com/2009/12/17/10-useful-jquery-form-validation-techniques-and-tutorials-2/
Sada dolazimo do html dijela. Potez da HTML5 uključi validaciju je genijalni potez. Premda još uvijek postoje ljudi koji koriste stare verzije browsera koji ne podržavaju HTML5, ne smije se potpuno oslanjati na nju. Uvijek treba imati na umu da se nađe onaj jedan! A pošto je internet globalno selo s najviše stanovnika taj jedan se vrlo lako multiplicira na nekoliko stotina. Nekoliko stotina (a i manje nije ništa bolje) je dovoljno da napravi podosta štete vašoj savršenoj isplaniranoj aplikaciji/bazi... Ono što ide ovom načinu validacije u prilog je vrijeme! S vremenom neće biti browsera na netu koji ne podržava HTML5 tj. i oni ljudi koji su imali prastare verzije firefoxa (moja tetka), IE (verzija koja je došla sa windowsima)... će biti zamijenjena nekom novijom. Plus HTML5 se za razliku od js ne može isključiti :-)
E sada je na redu više "Java" dio validacije. Spring ima jako dobrog konja za utrku, po meni i najboljeg, ako se pravilo odradi. Pošto je Spring vrlo naklon lokalizaciji pa sve naše labele možemo staviti u .properties fileove, tamo možemo i sve moguće erorre u validaciji staviti u jedan takav file i naravno u nekoliko svjetskih jezika. Taj dio je jako važan! Inače, ako se ovo ne napravi, validacija će raditi ali će korisnik dobiti jako ružan error ispisan crvenim slovima. Ali ako errore stavimo u propeties file onda dobivamo validaciju jednaku onoj navedenim u prethodnim koracima. Veliki plus ovoj validaciji je da se također vrlo lako napravi i reprezentacija unesenih podataka. Za one koji ne znaju reprezentacija je kada korisnik nešto unese, klikne na submit i recimo ima 4 točna unešena polja od 5, ispravni podatci će mu ostati dok kod krivog unešenog će dobiti ispisani error. Mislim da je korist i više nego očigledna.
Zadnji, a ujednio i zadnji dio obrane je hibernateova validacija. Ovo je više kao nekakav "good practice" nego potreba. Stavljanje anotacije @NOT NULL, određivanje dužine polja itd... Samim time ako kojim slučajem spring ne odradi svoj dio imamo još jednu razine obrane. Ovaj dio uvijek obavezno radite radi sebe. Učite se raditi pravilno, a ako kojim slučajem spring, js, html5 validacija zakaže imate još nešto što neće.
I nakon cijele ove priče opet počinjemo od početnog pitanja - koju odabrati? Moj savijet je odaberite dve ako možete, više od toga vam ne treba jer u protivnom samo si radite višak posla bez efekta. Ako koristite hiberante, obavezno koristite njegovu validaciju plus još jednu po vašem odabiru. Ako ne koristite orm, odaberite one dve koje smatrate da možete dobro provesti u praksi. Naravno treba procijeniti kolika vam je i važnost podataka koji vam se unose. Koliko je šteta ako se unesu krivo itd. ako nije neka velika vrijednost, jedna je i više nego dovoljna. Uglavnom odlučite sami. Pogledajte koje uopće mogu zajedno raditi. Za Hiberante i Spring govorim iz iskustva i prema meni je najbolja kombinacija. U velikoj većini jedna validacija je sasvim dovoljna.
- Java Script validacija - znači dobri stari js
- moderniji pristup je pomoću jQuery-a tj. Do more write less pristupom
- najnovije čudo "tehnike" HTML5 i svog konja za utrku ima
- Spring naravno nije bez aduta
- i ako koristite Hibernate i on ima svog asa u rukavu
Svaka od navedenih metoda nudi svoje nedostatke i prednosti. Navest ću neke od njih. Naravno Java Script će raditi samo ako je js omogućen u browseru, ali ni to nije bez lijeka - jednostavna poruka se da ispisati ako je kojim slučajem napravio disable js u svom browseru (mislim da 90% korisnika ni ne znam kako se ovo radi). Ne znanje korisnika nekad može biti velika prednost. Ali budimo realni pisanje validacije u običnom js nije baš najlakši posao na svijetu. Ako se baš odlučite na js pristup možda je ipak jQuery put kojim bi se trebali uputiti. Premda jQuery ne smatra validaciju kao primarnu djelatnost, ali zato je nudi kao plug in. Mali pogled na službenu dokumentaciju će zadovoljiti i najizbirljivije (http://docs.jquery.com/Plugins/Validation). Ako vam to ne odgovara probajte više infa naći ovjde: http://speckyboy.com/2009/12/17/10-useful-jquery-form-validation-techniques-and-tutorials-2/
Sada dolazimo do html dijela. Potez da HTML5 uključi validaciju je genijalni potez. Premda još uvijek postoje ljudi koji koriste stare verzije browsera koji ne podržavaju HTML5, ne smije se potpuno oslanjati na nju. Uvijek treba imati na umu da se nađe onaj jedan! A pošto je internet globalno selo s najviše stanovnika taj jedan se vrlo lako multiplicira na nekoliko stotina. Nekoliko stotina (a i manje nije ništa bolje) je dovoljno da napravi podosta štete vašoj savršenoj isplaniranoj aplikaciji/bazi... Ono što ide ovom načinu validacije u prilog je vrijeme! S vremenom neće biti browsera na netu koji ne podržava HTML5 tj. i oni ljudi koji su imali prastare verzije firefoxa (moja tetka), IE (verzija koja je došla sa windowsima)... će biti zamijenjena nekom novijom. Plus HTML5 se za razliku od js ne može isključiti :-)
E sada je na redu više "Java" dio validacije. Spring ima jako dobrog konja za utrku, po meni i najboljeg, ako se pravilo odradi. Pošto je Spring vrlo naklon lokalizaciji pa sve naše labele možemo staviti u .properties fileove, tamo možemo i sve moguće erorre u validaciji staviti u jedan takav file i naravno u nekoliko svjetskih jezika. Taj dio je jako važan! Inače, ako se ovo ne napravi, validacija će raditi ali će korisnik dobiti jako ružan error ispisan crvenim slovima. Ali ako errore stavimo u propeties file onda dobivamo validaciju jednaku onoj navedenim u prethodnim koracima. Veliki plus ovoj validaciji je da se također vrlo lako napravi i reprezentacija unesenih podataka. Za one koji ne znaju reprezentacija je kada korisnik nešto unese, klikne na submit i recimo ima 4 točna unešena polja od 5, ispravni podatci će mu ostati dok kod krivog unešenog će dobiti ispisani error. Mislim da je korist i više nego očigledna.
Zadnji, a ujednio i zadnji dio obrane je hibernateova validacija. Ovo je više kao nekakav "good practice" nego potreba. Stavljanje anotacije @NOT NULL, određivanje dužine polja itd... Samim time ako kojim slučajem spring ne odradi svoj dio imamo još jednu razine obrane. Ovaj dio uvijek obavezno radite radi sebe. Učite se raditi pravilno, a ako kojim slučajem spring, js, html5 validacija zakaže imate još nešto što neće.
I nakon cijele ove priče opet počinjemo od početnog pitanja - koju odabrati? Moj savijet je odaberite dve ako možete, više od toga vam ne treba jer u protivnom samo si radite višak posla bez efekta. Ako koristite hiberante, obavezno koristite njegovu validaciju plus još jednu po vašem odabiru. Ako ne koristite orm, odaberite one dve koje smatrate da možete dobro provesti u praksi. Naravno treba procijeniti kolika vam je i važnost podataka koji vam se unose. Koliko je šteta ako se unesu krivo itd. ako nije neka velika vrijednost, jedna je i više nego dovoljna. Uglavnom odlučite sami. Pogledajte koje uopće mogu zajedno raditi. Za Hiberante i Spring govorim iz iskustva i prema meni je najbolja kombinacija. U velikoj većini jedna validacija je sasvim dovoljna.
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.
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
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
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
Pretplati se na:
Postovi (Atom)

