Nenà AJAX jako AJAX - GWT vs. DWR
V projektu, na kterém v souÄasné dobÄ› pracuji, bylo navrženo pomÄ›rnÄ› extenzivnà použità AJAXových funkcÃ. Proto jsem se, coby AJAXem dosud netknutý vývojář, vrhnul do studia knihoven, které by mi realizaci usnadnily. Výsledkem mi bylo zjiÅ¡tÄ›nÃ, které uvádÃm v titulku pÅ™ÃspÄ›vku - nenà AJAX jako AJAX. Každá z knihoven tento problém Å™ešà velmi odliÅ¡nÄ› - a pÅ™estože mé prvnà kroky vedly k GWT, brzy jsem tento zámÄ›r opustil.
Jelikož pracuji ve spoleÄnosti, která své krédo stavà na velmi propracovaných webech - co se týká použitelnosti, pÅ™Ãstupnosti, validity a grafickém vzhledu (o tuhle stránku vÄ›ci se naÅ¡tÄ›stà nestarám já ;)) - bylo nutné zajistit, aby stejná funkcionalita byla pÅ™Ãstupná s AJAXem i bez nÄ›j. Mým prvotnÃm zámÄ›rem tedy bylo:
GWT - Google Web Toolkit
Prvnà knihovna, kterou jsem zkoumal byl GWT. Ze zcela racionálnÃch důvodů jsem si myslel, že je to pro mne to pravé. HodnÄ› se o nÄ›m mluvÃ, stojà za nÃm velká korporace (tudÞ by mÄ›l být pomÄ›rnÄ› propracovaný), JavaScript se pÃÅ¡e v JavÄ›, což je pro Java programátora pÅ™eci to ideálnÃ. Po nÄ›kolika vÄerech jsem doÅ¡el k nÄ›kolika poznatkům:
RozhodnÄ› nechci GWT jen strhat. Velkou výhodu GWT vidÃm v tom, že v nÄ›m můžete vytvářet (a znovupoužÃvat) pomÄ›rnÄ› rozsáhlé a kombinované JS komponenty a vůbec vytvářet v nÄ›m velké AJAX aplikace, aniž byste se dostali do stavu, kdy bude obtÞné kód udržovat natož rozÅ¡iÅ™ovat. ProstÄ› GWT je vhodný na rozsáhlá Å™eÅ¡enà - pokud byste jej chtÄ›li použÃt na vÄ›ci jako sem tam Å¡oupnout naÅ¡eptávaÄ, sem tam nÄ›jakou funkci volat asynchronÄ› atd. je to absolutnà overkill.
JeÅ¡tÄ› bych rád uvedl, že mé poznatky vycházejà asi z týdennÃho studia po veÄerech. Pokud na nich chcete stavÄ›t, jeÅ¡tÄ› si je stejnÄ› radÅ¡i prověřte - nerad bych nÄ›koho pÅ™ivedl na scestÃ. Ale věřÃm, že pokud je tu nÄ›co Å¡patnÄ›, uvedou zastánci GWT vÄ›ci na pravou v komentářÃch pod Älánkem.
DWR - Direct Web Remoting
Dalšà knihovna, po které jsem na doporuÄenà mého kolegy sáhnul, byla DWR - Direct Web Remoting. U nà jsem také zůstal, jelikož splňuje vÅ¡echny mé požadavky. IdeálnÄ› se hodà právÄ› pro AJAXové oživenà jinak stále bezjavascriptovÄ› funkÄnÃch web prezentacÃ. Learning curve u této knihovny je asi 2 hodiny, oproti GWT do kterého jsem ÄuÄel nÄ›kolik dnÃ
DWR poskytuje v podstatě pouze dvě služby - za to je poskytuje kvalitně a jednoduše:
DWR mÄ› poskytnul vÅ¡e, co jsem hledal. PÅ™edevÅ¡Ãm generuje JavaScript ad hoc - tzn. nemusÃm nic pÅ™ekompilovávat do *.js, které bych nÄ›jak musel složitÄ› pÅ™enášet do mé web aplikace. Ve web.xml si pouze zaregistruji DWR servlet, který mi poskytne vÅ¡echny *.js on the fly jak je zapotÅ™ebÃ. V konfiguraÄnÃm souboru dwr.xml (pokud integruji DWR se Springem, vypadne mi i tento konfigurák) si nadefinuji tÅ™Ãdy, které budou zvenÄà (AJAXem) pÅ™Ãstupné a seznam POJO tÅ™Ãd, které v komunikaci proteÄou. U tÅ™Ãd je možné odfiltrovat pouze urÄité metody, které majà být pÅ™Ãstupné atd. atd.
Dalšà skvÄ›lou vlastnostà DWR je to, že vlastnÄ› svůj kód nepotÅ™ebujete vůbec nijak upravovat proto, aby jste ho mohli použÃvat AJAXem. Žádné zanášenà tÅ™Ãd interfacy DWR a podobnÄ›. MÃsto interfaců, které by stejnÄ› na klientovi a serveru nemohly sedÄ›t (ani u GWT nesedÃ) se DWR držà pÅ™Ãstupu convention over configuration. VÃte, že na stranÄ› klienta (v Javascriptu) zavoláte svou metodu stylem server: “nazevMetod(parametr1, parametr2)” - klient: “nazevVystaveneBeany.nazevMetody(parametr1, parametr2, asyncCallback)”. To je ten základnà a jednoduchý způsob - asyncCallback pÅ™edstavuje JavaScriptovou metodu, která se provede jakmile ze serveru pÅ™ijde odpovÄ›Ä. DWR se dále soustÅ™edà na Å™eÅ¡enà pÅ™Ãpadných výjimeÄných stavů - tzn. můžeme mÃt různé callbacky pro pÅ™Ãpad, kdy volánà skonÄà exception.
DalÅ¡Ãm cennou tÅ™eÅ¡niÄkou na dortu je integrace do rozÅ¡ÃÅ™ených frameworků - budu jmenovat jen pár: Spring, Hibernate, Acegi Security, JSF … Můžu z vlastnà zkuÅ¡enosti Å™Ãct, že napÅ™. integrace do Springu je naprosto skvÄ›lá (od chvÃle, kdy jsem zaÄal studovat DWR mi trvalo asi jen 20 minut, než jsem si zavolal prvnà metodu beany z klienta). StaÄà registrovat DWR namespace a pak už jen u vybrané beany oznaÄit elementem <dwr:remote …/>. Kompletnà návod lze nalézt na blogu Bram Smeetse. Vývojáři DWR opravdu mysleli na nás ostatnà vývojáře - POJO, kterých může být pomÄ›rnÄ› dost lze oznaÄit wildcardy … napÅ™. vÅ¡echny tÅ™Ãdy v package “cz.novoj.ajax.dto.*” - prostÄ› pohodiÄka. Na serveru se dostanete v pÅ™ÃpadÄ› potÅ™eby k session uživatele (což v pÅ™ÃpadÄ› GWT jde urÄitÄ› taky), jednoduÅ¡e integrujete bezpeÄnostnà opatÅ™enà (jak pÅ™esným oznaÄenÃm povolených metod, tak pÅ™ÃpadnÄ› integracà Acegi Security frameworku).
Faktem je, že DWR by se asi nehodil na rozsáhlé kódovánà na stranÄ› klienta - pÅ™eci jen vám s JavaScriptem pomůže jen svou “Utils” knihovnou a vÅ¡e co potÅ™ebujete navÃc si musÃte napsat sami. TÃm pádem už zaÄÃnáte riskovat, že nebude váš kód tak pÅ™enositelný mezi prohlÞeÄi jak byste chtÄ›li.
Závěrem
Znovu jsem se pÅ™esvÄ›dÄil jak je důležité použÃvat správné nástroje na správné vÄ›ci. Pro mé potÅ™eby je DWR to ideálnà - GWT bych musel velmi pracnÄ› ohýbat. Å koda jen, že jsem pÅ™i hledánà toho správného kladiva nenarazil na žádný Älánek, který by mi Å™ekl to, co jsem se snažil já zachytit ve výše uvedených odstavcÃch. To byl důvod, proÄ jsem tento pÅ™ÃspÄ›vÄ›k napsal - snad mé zkuÅ¡enosti nÄ›komu pomohou.
ZajÃmavé odkazy
Google Web Tolkit
Direct Web Remoting
A trochu bokem






(7 hlasů, průměrně: 4.57 z 5)
Loading ...
05.21.2007 v 20:50
DRW je dobra knihovna, proprve jsem ji pouzil na projektu uz pred rokem. Skvele na ni je, ze se da dobre integrovat v podstate s libovolnym MVC web frameworkem u me konkretne s Tapestry 3 nebyl zadny problem.
Petr Ferschmann:05.22.2007 v 19:50
ZdravÃm,
podobnou integraci, kterou popisujete má v sobÄ› integrovanou i Seam. Nevýhoda je, že to vyžaduje použità Seamu - což v pÅ™ÃpadÄ›, že Seam použÃváte nenà nevýhoda
Wenca:05.23.2007 v 16:25
Ahoj, Obecne jze rici, ze GWT pouzijte jen tehdy pokud nemate nic a nechcete resit i Grafiku (CSS, tam totiz staci jen replejsnout kody barev) tak pouzijte cokoliv jineho. Za uvahu by stalo i Prototype
Vlasta:05.24.2007 v 7:10
Knihovnu DWR jsem si také vyzkoušel a mám stejné zkušenosti. Jeho integrace je tak jednoduchá, že snad jednoduššà být ani nemůže.
hisaak:10.23.2007 v 18:47
Duch GWT je popsan velmi vystizne - velka vec resici skoro vsechno. Mam jen par komentaru:
Novoj:- V DTO neni potreba implementovat IsSerializable z GWT, staci klasicky java.io.Serializable, i kdyz jakesi limity tam jsou (vse je pekne zdokumentovano).
- Diskuse jestli je nutna podpora prohlizecu bez javascriptu, je podle me stejne “hodnotna” jako jestli je podporovan IE verze 4.0. Podle statistik jde o jednotky procent (coz by bylo samozrejme dost), ale kdo zna cloveka, ktery ma javascript vypnuty? A proc to dela? Je to jeste uzivatel nebo podivin z fakulty informatiky s lynxem?
- Za nejvetsi nevyhodu GWT (a zatim jedinou, protoze mame ve firme zcela odlisne pozadavky nez otec Fura) povazuji _nutnost_ delat GUI komponenty pomoci GWT trid. Clovek pak ztrati dost casu programovanim, misto aby jen “maloval” primitivni HTML form a taky se silne svazuje s danym frameworkem.
10.27.2007 v 11:19
S druhým bodem moc nesouhlasÃm, sice se možná jedná o jednotky procent, ale stále se jedná o statisticky významnou skupinu (na nÄ›kterých webech máme podle naÅ¡ich statistik mezi 4-5% - podle W3C je tento podÃl jeÅ¡tÄ› vyššà - viz: http://www.w3schools.com/browsers/browsers_stats.asp). Z naÅ¡eho pohledu je to prostÄ› MUST HAVE fÃÄura. Jelikož dÄ›láme intranety a webové prezentace, nemůžeme si dovolit Å™Ãct zákaznikovi, že Å¡est ze sta uživatelů nebude moci s jeho prezentacà pracovat. Jediné co si můžeme dovolit Å™Ãct je, že 6 ze sta uživatelů nebude mÃt práci se stránkami tak komfortnà jako ten zbytek. Tzn. GWT je pro naÅ¡e úÄely prostÄ› nepoužitelné. Což mi opravdu dalo chvÃli, než jsem k tomu doÅ¡el - tohle by mÄ›li mÃt na prvnà stráce ve Quick startu ke GWT.