Sunteți pe pagina 1din 26

GoogleWebToolkit

Tutorial
AnioaraSava,OC2 MarcelaDanielaMihai,OC2
10/19/2009

TableofContents
1. Prezentaregeneral................................................................................................................ 3 2. PrincipiidebazGWT.............................................................................................................. 3 3. ArhitecturaGWT...................................................................................................................... 4 3.1StructuraunuiproiectGWT................................................................................................. 6 3.2InteroperabilitateacuStandardeleWebiServiciileWeb...................................................8 4. InstrumenteGWT.................................................................................................................... 8 4.1CompilatorulJavatoJavaScript........................................................................................... 9 4.2JSNI(JavaScriptNativeInterface)....................................................................................... 11 4.3WidgeturiiPanelLibrary................................................................................................ 12 4.4ProtocolulRemoteProcedureCall(RPC)............................................................................13 4.5ManagementulbutonuluiBackalbrowserului/BrowserHistory................................16 4.6IntegrareaJUnitcuGWT.................................................................................................... 17 5. ModulHostvsModulWeb.................................................................................................... 18 6. UtilitateaGWT....................................................................................................................... 23 7. Comparaiecualteframeworkuri........................................................................................ 24 7.1GWTvsSWING.................................................................................................................... 24 7.2GWTvs.Echo2.................................................................................................................... 25 7.3GWTvsJSF.......................................................................................................................... 25 7.4GWTvsRubyonRails.......................................................................................................... 26

1. Prezentaregeneral
Platforma Web 2.0 mpreun cu tehnologia Ajax din cadrul acesteia, a ctigat tot mai mult atenie datorit faptului c pentru aplicaiile web, cel mai important beneficiu adus de Ajaxlconstituiembuntireaexperieneiutilizatorilor. Dei JavaScripti DHTML limbaje aflate la baza tehnologiei Ajax sunt disponibile de

civa ani, cei mai muli programatori ncearc s le evite datorit dificultii de folosire a acestora. Astzi, frameworkuri scrise n JavaScript precum Dojo, pot fi folosite pentru realizareaaplicaiilor Ajax, ns, acest fapt necesit cunotine solide de JavaScript. Ca soluie la acest problem, Google vine n sprijinul programatorilor Java, cu un nou framework pentru creareadeaplicaiiAjaxmultmaiproductive:GoogleWebToolkit(GWT).

2. PrincipiidebazGWT
Pe parcursul ultimilor ani, sau dezvoltat numeroase frameworkuri Java pentru realizarea aplicaiilor web. Din prima generaie de astfel de frameworkuri face parte venerabilul Apache Struts, iar a doua generaie cuprinde frameworkuri precum Tapestry i JavaServerFaces. GoogleWebToolkitdstartulceleideatreiageneraiideframeworkuri,oferind,lafelcacea dea doua generaie, suport pentru folosirea componentelor (componentele pot fi folosite de dezvoltatori pentru crearea de noi componente care pot fi adugate n aplicaie pentru mbuntirea funcionalitii paginlor web), numite n GWT widgets, ns se difereniaz de predecesoriisiprinfaptulcnuesteotehnologiecarefoloseteclasiceleformuri.GWTeste primulframeworkpentrucreareadeaplicaiiwebfolosindlimbajulJavacarepermiterealizarea de aplicaii asemntoare cu cele pentru desktop, dar care sunt rulate n browser. Cu aceast inovaie, dezvoltatorii pot renuna la construcia de aplicaii web compuse din arhaicele pagini, trecnd la aplicaii care ruleaz ntro singur fereastr a browserului, similar cu aplicaiile pentru desktop construite cu AWT, Swing sau SWT. Astfel, GWT nu e o evoluie, ci o

revoluie deoarece desfiineaz n totalitate fundamentele modalitii de construire a aplicaiilorweb. GoogleWebToolkit(GWT)esteunsetdeuneltededezvoltare,utilitideprogramarei

widgeturi care permit crearea cu uurin a aplicaiilor AJAX. Aceast tehnologie este disponibilopensoucesublicenApache2.0pentruplatformele:Windows,MacOSXiLinux. Cea mai important parte a GWTului poate fi considerat compilatorul responsabil cu

transformareacoduluiJavancodJavaScriptpentruaputeafirulatinbrowser.Aceastinovaie adus de GWT este foarte important, ns nu este singurul lucru care face ca aceast nou tehnologiesfiedeosebit. GWT vine i cu: un echipament de testare folosit pentru depanarea bytecodului Java n mod directatuncicndesterulatnmediuloferitdeGWTcesimuleazbrowserul,unsetdewidget uri principale pentru construirea interfeei cu utilizatorul, precum i un sistem Remote Procedure Call pentru realizarea comunicaiei cu serverul web. Pe scurt, GWT reunete avantajele oferite de librriile JavaScript, abilitile de comunicare ale DWR ului, precum i avantajeleuneltelorJavadinEcho2sauXML11,ntrunsingurpachet.

3. ArhitecturaGWT
GWT continu s foloseasc HTMLi CSS deoarece sunt relativ simple, nc eficientei suportate n mod nativ de browsere. O aplicaie GWT bine realizat se va baza pe patternul MVC,nssevantoarceilamodeluldeprogramareclientserver. Cu GWT se va folosi MVC pe partea de client. MVC este un ablon architectural

proiectat pentru separarea responsabilitilor n cadrul aplicaiilor software. Pentru aplicaiile web, MVC presupune o defalcare n trei straturi: modelul reprezentat de informaiile de pe partea de server, viewul oferit de ctre HTMLi controllerul reprezentat de o pagin sau un servletdepeserver,acesteaavndpropriileresponsabiliti. n mediul GWT (similar cu alte aplicaii bazate pe AJAX), toate aceste responsabiliti ale aplicaieisuntmutatedepeserverpeclient.

Viewul generat de server prin tehnologii de genul JSP, este nlocuit cu componente pentru UI inteligentecareleaginformaiiledincadrullordemodelulaplicaiei. Modelul este sincronizat cu serverul prin intermediul unor tehnici tradiionale care permit comunicareadintreservericlient. Aceast modalitate de a folosi MVC pe client ofer posibilitatea clientului de a coordona cele mai multe tranziii de stare din UI precumi relaionarea logic a interfeei, fr a mai apela la serviciileserverului. Acestlucrupresupunembuntireaperformaneiiascalabilitiichiardaclimeadeband sau latena reelei prezint probleme. Aceast mbuntire deriv din faptul c clientul poate sdirijezemaimulteresponsabiliti,frafinevoitscomunicecuserverulpentruamodifica viewul pentru acelai set de date. Mai mult, se pot obine infomaii ale aplicaiei sau sincronizricuserverulprintrometodelegant,asincron,careoferlarnduleiavantaje. O caracteristic a GWTului este c trebuie s fie prezenti pe server o reprezentare a

modelului, iar modelul de pe client trebuie s comunice cu serverul pentru a obine sau sincronizainformaiile;acestacomunicareesterealizatprinintermediulmecanismuluiRPCia facilitiloroferitedeserializareaobiectelor. Pentru a face posibil comunicarea dintre server i client, GWT folosete implementarea serviciul SOA (Service Oriented Arhitecture), permind astfel controllerului de pe client s invoceseviciilepuseladispoziiedectreserverisactualizezemodeluldepeclientcndeste nevoie. Reprezentrile modelului de pe client i server pot folosi aceleai obiecte, sau copii exacte ale acestora, GWT putnd serializai deserializa automat datele din JavaScript n Javai viceversa. Urmtoarea figur este o diagram simplificat care descrie modalitatea de sincronizare ntre serveruli clientul GWT, facilitat de mecanismul RPC oferit de GWTi capabilitile oferite de serializarea/deserializareaobiectelor.

D mai mu Din ulte puncte de vedere e, GWT rep prezint o rentoarcere e la tradiio onala

arhitectu ur cu trei st traturi, unde e aplicaia cl lient este res sponsabil cu c tratarea tuturor t aciu unilor efectuate e de utilizatori cu com municarea cu u serverul ca are ofer accesul asupra a datelor sto ocate ntrunmod m persistentdegenulRDBMS(Rel lationalData abaseManagementSyst tem). Acest mo odel mpreun cu avanta ajul de a nu avea nevoie e de altceva a nafar de browser instalat, duce la o mbunt ire consider rabil a experienei util lizatorului asupra utilizrii aplicaiilor ce coninse ervereweb.

3 Structu 3.1 uraunuiproiect p GW WT


U proiect GWT Un G are o st tructur sim milar cu stru uctura unui pachet Java a. Pachetul GWT

iniial, ge enerat atunci cnd con nstruim un proiect p GWT T nou, difer reniaz n mod m vizibil unde trebuie s se afle co odul surs pentru p partea de client t fa de co odul surs pentru p parte ea de serverifaderesu urse. UnproiectGWTarat tnfelulurm mtor:

Pachetul principal al proiectului. Acesta conine com/example/app toate modulele proiectului, i nu poate conine fiierecucod. com/example/app/client Subpachetul care conine toate fiierele cu codul surspentruparteadeclient. Subpachetul care conine toate fiierele cu codul surspentruserver. Subpachetul care conine toate resursele statice decareestenevoienaplicaie.

com/example/app/server

com/example/app/public

Fiecare proiect GWT poate fi alctuit din unul sau mai multe module. Citnd definiia dat de Google, un modul GWT este puri simplu o ncapsulare a funcionalitii. Modulul reunete toate configurrile necesare pentru a utiliza codul pe care l scriem ntrun proiect GWT. Modulele sunt definite n aplicaie n cadrul fiierelor descriptor XML a cror denumire se termin cu extensia .gwt.xml. Conceptul descriptorului de modul din GWT este similar descriptorilordinTomcatsaualteserveredeaplicaii. ConinutulunuifiierdescriptorXMLestefolositpentruaspecifica: 9 Modulelemotenite,celedincareaplicaiamotenetesetriicod. 9 Numeleuneiclasecereprezintpunctuldeintrarenaplicaie(opional);oclasdetip entry point este o clas ce implementez interfaa EntryPoint. Cnd un modul este ncrcat, fiecare clas entry point definit n fiierul .gwt.xml este instaniati apelat metoda onModuleLoad() din cadrul acesteia. Este posibil s crem un modul cu mai mult de o clas entry point, i de asemenea este posibil s crem un modul cu nicio clas de tip entry point, acest tip de modul fiind folosit ca o librrie GWT de cod reutilizabil. 9 IntrrileSourcePath,folositepentruaspecificacaresubpachetconinecodulsurscare urmeazafitransformatnJavaScript.Subpachetulcareconinecodulpentruclienteste inclusautomatnsourcepath.

9 Intrrile Public Path, folosite pentru a specifica care subpachete sunt publice (vizibile n toataplicaia).ToatefiiereleaflateinPublicPathvorficopiatendirectoruldeieirea modululuinmomentulcndaplicaiaestecompilat.

3.2InteroperabilitateacuStandardeleWebiServiciileWeb
GWTnuncearcsfiedoarunframeworkcucaresepotconstruiaplicaii;elsevreaafi

un set de unelte care mbuntete vizibil posibilitatea de a crea aplicaii Ajax. Pentru a ndeplini acesta este necesar s fie mbinate standardele web actualei serviciile web. Astfel, GWTnundrumspreosingurtehnologie,cipermitefolosireaoricreitehnologii. n particular, GWT furnizeaz librriile JSONi XML care permit translatarea datelor n

alte tipuri de obiecte. De asemeni GWT ofer o modalitate de a conecta componentele care alctuiesc interfaa cu fiierul CSS pentru a putea profita de beneficiile aduse de aceast tehnologie. Pentru a obine efecte mai spectaculoase acest toolkit permite integrarea cu alte librrii JavaScript existente prin intermediul JavaScript Native Interface (JSNI), o modalitate de autilizacodJavaScriptncadrulcoduluiJava.

4. InstrumenteGWT
GWT ofer un set amplu de unelte necesare pentru rezolvarea problemei mutrii aplicaiilor tip desktop n browser. Toolboxul GWT conine un parser XML, mai multe instrumente pentru comunicarea cu serverul, unelte pentru configurare i internaionalizare precumiunsistemdemanagementalistorieipaginilorvizualizatenbrowser. Urmtoarea figur constituie o hart vizual a aspectelor centrale ale GWTului, acestea fiind mprite n dou categorii: cele legate de compilator i librriile Java care alctuiesc APIuri GWT.

4 CompilatorulJav 4.1 vatoJavaS Script


Responsabilit tateacompil latoruluiGW WTestesco onverteasccodulJavan codJavaScript,

ntro maniera m asemntoare cu compila atorul care transform codul Jav va n bytec code. Compilar rea pro oiectului se f face de ctre e prog gramul Java

com.go oogle.gwt t.dev.GWT TCompiler r cruia i se e d ca para ametru loca aia unde se e afl fiieruldedefiniiealmodulului. Procesul de compilare ncepe cu u clasa entry ypoint, urm mnd apoi de ependinele necesare pe entru a compila codul Java a. Compilato orul GWT lu ucreaz diferit fa de un u compilator standard Java e acesta nu compileaz tot ce se gasete n modul, ci numai n ceea a ce este fo olosit. deoarece Acesta lucru este avantajos a deoarece pe ermite s se e poat de ezvolta o lib brarie ampl de ente i tooluri, iar com mpilatorul va v include numai n acele e clase i metode m care sunt compone folositede d clasaentr rypoint. Compilat torularetreitipuridest tiluricarede eterminacum mvaartacodul c JavaSc criptrezultat t: 9 stilul imp plicit este cel obfusca ate i face ca codul JavaScript s arate ca o amesteca aturdeliter receeacelfaceafiimp posibildede escifrat.Scop pulacestuistilnu

este de a face imposibil de citit codul ci pentru a menine fiierul JavaScript ct mai micposibil. Unexempludecodcareareaceststilaratnfelulurmtor:
function b(){return this.c + '@' + this.d();}

9 stilulpretty,genereazcodJavaScriptcarepoateficititcuuurina. Pentruexemplificarevomfolosiacelaicodcalastilulanterior.Deacestadatneputem da seama c este metoda toString(), ns nc nu putemti din care clas este aceast metoda:
function _toString(){ return this._typeName + '@' + this._hashCode(); }

9 stilul detailed, care seamn cu stilul pretty, cu completarea c, vom avea numele completalclaseidincarefacepartemetoda,caparteanumeluimetodeiJavaScript
function java_lang_Object_toString__(){ return this.java_lang_Object_typeName + '@' +this.hashCode__(); }

Stilurile pretty i detailed sunt folosite ndeosebi n procesul de dezvoltare pentru a putea detectacuuurinaeventualeleeroriJavaScriptaprutenbrowser. UnaltaspectimportantalcompilatoruluiGWTestecacestafolosetecodulsursJava,

nu codul Java binar. Acesta presupune c, codul surs pentru toate clasele Java s fie disponibile. Acest lucru este importanti atunci cnd vrem s distribuim cod GWT pentru a fi

refolosit.Cndseconstruiescfiiere.jar,careurmeazafidistribuite,trebuiesfieincluseatt claseleJavactifiierelecucodsurs. O ultim caracteristic notabil este aceea c dup compilarea codului Java n

JavaScript,rezultunsingurfiierJavaScriptpentrufiecaretipdebrowser.Browserelepentru care se genereaz fiiere JavaScript sunt: Internet Explorer, Firefox, Mozillla, Opera i Safari. Cnd este rulat scriptul de pornire pentru browser (bootstrap), acesta ncarc fiierul corespunztor pentru browserul respectiv. Avantajul este c nu se va mai ncarca cod pe care browserulnuvaputeaslfoloseasc.

4.2JSNI(JavaScriptNativeInterface)
Cu toate c codul GWT trebuie scris in Java, uneori pot aprea situaii cand trebuie s

facem apeluri directe la cod JavaScript. O astfel de situaie este atunci cnd trebuie s facem apellaAPIulbrowseruluipentrucarenuexistechivalentnGWT.Oaltsituaiepoateaprea atuncicndvremsutilizmnaplicaianoastranumitelibrriiJavaScriptmaideosebite. AccesndJavaScriptdirect,aplicaiaesteexpusincompatibilitilordintrebrowsere.Va

fi nevoie de teste extra pentru a avea sigurana c, codul JSNI va funciona pe mai multe browsere. JSNI permite execuia codului JavaScript din codul Java, precumi viceversa. Acest lucru

este fcut posibil de ctre compilatorul GWT care poate mbina cod nativ JavaScript cu cod JavaScriptgeneratdupacompilareacoduluiJava. Pentru a scrie o metod pur JavaScript prin intermediul JSNI trebuie doar s declarm acea metodcanativeisfurnizmimplementareanJavaScriptntrecomentarii:
public native void fillData (String msg) /*-{ $wnd.alert(msg); }-*/;

De asemenea, GWT ofer i o modalitate pentru a apela cod Java n cadrul codului

JavaScript. Signatura unei astfel de metode este urmtoarea: [instance-expr.]@classname::method-name(param-signature)(arguments), unde [instance-expr.] specific

faptulcestevorbadeometodnestatic.

4.3WidgeturiiPanelLibrary
GWT vine cu o gam larg de widgeturii paneluri care pot fi folosite n codul Java al

aplicaiilor Ajax. Acestea sunt construite cu HTML, iar JavaScript este folosit pentru tratarea evenimentelor;atuncicndcodulaplicaieiestecompilatitransformatnJavaScript,browserul ncarc aceste componente n cadrul unei pagini web tradiionale, fr a fi nevoie de pluginuri sauJRE. Exist trei categorii de componente pentru crearea interfeei cu utilizatorul: widgeturi, panel uripentruaezareipaneluriinteractive. Lucrul cu aceste componente este asemnator cu cel din Swing i AWT (Abstract

Window Toolkit), cu diferena c GWT ofer n loc de layoutmanageri, un set de paneluri care afieaz elementele componente ntro maniera anume. De exemplu, HorizontalPanel afieaz elementele de la stnga la dreapta, FlowPanel afieaz folosind regulile de la fluxul HTML,iarAbsolutePanelfolosetepoziiaexactacomponentelorpecareleconine. Pentru a crea o interfa cu utilizatorul, trebuie s instaniem aceste widgeturi, apoi s le adugm panelurilor, care la rndul lor trebuiesc adaugate panelului principal al aplicaiei (Root Panel). Panelul principal este un container de nivel nalt, care conine toate componenteleuneiinterfee. GWTulvinecucomponentecaresuntdeseoriintlnitelaaplicaiiledesktopimairarla

cele web. Un astfel de exemplu este TabPanel care permite plasarea widgeturilor n taburi diferite,fiindvizibilelaunmomentdatdoarwidgeturiledepeunsingurtab.

Alteexempledeacestfeldecomponentesunt:MenuBar,careoferocaleusoardeacreaun meniucumaimultenivele,PopupPanel,StackPaneletc. Trebuie s observm, ns, c widgeturile din GWT nu intenioneaz s semene perfect cu cele dintroaplicaiepentrudesktop;astfel,eleseintegreazbinecubrowserulioferoexperien familialutilizatorului.Deasemenea,aplicaiacreatcuGWTpoatefiintegratcuoricareparte auneipaginiHTML,nsperminduisaratecaopaginwebobinuit. Exist peste 30 de widgeturi i paneluri coninute n pachetul

com.google.gwt.user.client.ui din GWT, ns e puin probabil ca acestea s satisfac toate nevoile dezvoltatorilor. Lista widgeturilor din GWT cuprinde calendare, tabele sortabile, calculatoare, paneluri pentru desenare, paneluri cu rol de tooltip etc. Exist, de asemeni, widgeturi care includ librrii JavaScript, cum sunt Google Maps API, Google Search API, sau efecte obinute cu Scriptaculous. nafara widgeturilor de baz pentru HTML, existi widget uridisponibilepentruScalarVectorGraphics(SVG). Existiposibilitateasnecreempropriilenoastrewidgeturiextinzndulepeceledin

GWT, ns este recomandat ca atunci cnd recurgem la aceast posibilitate s accesm obiecte JavaScriptcareseafllabazabrowserelor.

4.4ProtocolulRemoteProcedureCall(RPC)
Din punctul de vedere al locului unde este rulat codul, aplicaiile Ajax n generali cele

GWT n particular se ncadreaz n categoria Rich Internet Applications(RIA). Acest tip de aplicaii sunt o combinaie ntre Fat client applications, unde codul ruleaz doar pe maina utilizatorului (ex. Microsoft Word),i Thin client applications unde codul ruleaz pe o main server, iar desktopul clientului este folosit doar pentru afiarea interfeei prin intermediul unui browser(aicisencadreazmajoritateaaplicaiilorweb:Ebay,Amazonetc). Faptul c se ncadreaz n ambele categorii ofer GWTului complexitate i interactivitate, deoarecepoateprofitadeanumiteputerideprocesarepeparteadeclient.

De fiecare dat cnd avem cod care ruleaz n doua pri diferite, avem nevoie de un

mecanism pentru a comunica ntre cele dou. Cea mai simpl modalitate n aceast situaie o reprezint apelul procedurilor la distan (Remote Procedure Call), care presupune o cale prin care clientul s execute codul pe serveri s primeasc rezultatul execuiei; n acest situaie poate fi folosit oricare dintre urmtoarele protocoalele RPC: RMI, .NET Remoting, SOAP, REST sau XMLRPC. ns GWT nu folosete nici unul dintre acestea, avnd implementat propriul protocoldetipRPC,aceastapentruaputearealizaapelurileasincronedelabrowser. nGWTlibrriaRPCestedivizatndoupachete: 9 pachetulcom.google.gwt.user.client.rpcfolositpeparteadeclienti 9 pachetulcom.google.gwt.user.server.rpcfolositpeparteadeserver. Partea pentru client ofer interfeele necesare pentru interconectarea interfeelor aplicaiei care vor fi folosite pentru implementarea RPCului. Cnd este transformat codul de pe client n cod JavaScript de ctre compilatorul GWT, codul folosit pentru RPC este generat pe baza interfeelorinterconectate. Pachetul pentru partea de server folosit pentru implementarea RPCului este construit astfel nct s fie folosit ntrun container de servleturi Java cum este Tomcat sau Jetty. Din fericire, browserul host oferit de GWT conine un server Tomcat integrat, i astfel pot fi testate i depanateapelurileRPCdepeservernoriceIDEcareofersuportpentruGWT. Sa mers pe ideea ca protocolul trebuie s fie simplu. Browserul descarc tot codul de

la client cnd acesta pornete aplicaia , iar dac codul depete 100K atunci se va observa o pauz. De astfel, codul JavaScript care ruleaz n browser este destul de lent, aa nct implementarea unui protocol complex precum SOAP ar presupune descrcarea unei cantiti mari de cod care ar incetini considerabil execuia. Astfel, cnd mecanismul oferit de RPC este folosit n mod corespunztor, ofer avantajul de a muta tot codul pentru logica UI pe client, obinnd astfel vizibile creteri de performan, reducerea ncrcrii serverului web, precumi o experien plcut pentru utilizator. Prin acest mecanism, codul de pe partea de server este

invocat i referit de ctre client t precum un serviciu, ns s n acest context, c term menul de ser rviciu (service)nuareacela ainelescu uconceptulgeneraldeserviciu web b.

Fi igura anteri ioar reprez zint o descriere vizua al a ceea ce c nseamn crearea unui

serviciucu c mecanism mulpusladis spoziiedeGWT G RPC. Fiecare serviciu s dein ne un set de e interfeei clase ajuttoare. Unele e dintre aceste clase, cu um ar fi serviciu u proxy, est te generat automat a n spate s fr ca a programat torul stie de existena sa. Primulpa aspentrucreareaunuiapel a RPCest tesdefinim muntemplat tecaresde escrieapelul.Din pcateac cestlucrutr rebuiefcutdetreiori:odatpepa arteadeserv ver,odatape p clientiodat ninterfa aacareeste epartajatde d servericlient. c GWTfoloseteoconveniedenumepen ntrua leconect tapetoate. Problema a care poat te s apar este serializ zarea obiect telor care sunt trimise/ /recepionat te. n mod ide entic cu RM MI i .NET Remoting, R GWT G RPC nu u este limita at doar la primitive pe entru

serializare. Orice tip de dat care este serializabil poate fi trimis/returnat ca parametrul n apelulladistan. Trebuie s se in seama c ideea de tip GWT serializabil difer de ideea de tip Java serializabil.UntipesteGWTserializabildac: 9 esteprimitiv,precum:char,byte,short,int,long,boolean,floatsaudouble; 9 esteprimitivdetipwrapper(Character,Byte,etc); 9 esteStringsauDate; 9 esteunvectordetipuriserializabile(incluzndvectoridevectori); 9 esteuntipdeclaratdeutilizator,acruiclasaretoatecmpurileserializabile; 9 implementeazinterfaaIsSerializable. Coleciile precum Set, List, Mapi HashMap sunt problematice; trebuie s folosim o adnotare special n JavaDoc pentru ai spune compilatorului GWT ce tip de obiecte vor fi incluse n colecie.

4.5ManagementulbutonuluiBackalbrowserului/BrowserHistory
UnadintrecelemaiacuteproblemealeaplicaiilorAjaxesteaciuneacareseexecutla

apsareabutonuluiBackalbrowserului.Aceastapresupunecdacnlocuimdinamicoparte a coninutului paginii web cu JavaScript, browserul nu i poate da seama c sa schimbat ceva nconinutulpaginii. Ceeacesentmplcelmaiadeseaestecutilizatorulobservfaptulcpaginasaschimbat,i i imagineaz c dac acioneaz butonul Back se va ntoarce la vechiul coninut al paginii, ns aceast presupunere este fals. Pentru a putea ajuta utilizatorii, dezvoltatorii trebuie s gseascomodalitatedearezolvaproblemantrunmodctmaitransparentpentruutilizator. Soluia cea mai popular pentru aceast problem tinde s fie destul de complicat de implementati folosit. Ea presupune adugarea unui frame ascunsi a unui numr de scripturi pentru a obine funcionarea corect. Folosind GWT programatorul nu trebuie s fac el

aceast munc, totul fiind rezolvat de framework, dezvoltatorul trebuie doar s creeze un obiect history token cruia s i asocieze un listener care implementeaz interfaa HistoryListenislnregistrezecaunobiectdetipHistory. Acest history token este un string n care se memoreaz orice stare a aplicaiei cum ar fi numele tabului curent dintro pagin care conine mai multe taburi. Google nu precizeaz dimensiunea maxim a acestui token, ns este recomandat s nu se depeasc 100 de caractere. TokenulcurentestemodificatatuncicndutilizatorulfaceclickpeunobiectHyperlinksaucnd acionez butoanele Back sau Forward din browser, sau poate fi modificat n mod programatic apelndHistory.newItem(), History.back() sau History.forward(). Cu ajutorul listenerului nregistrat, putem depista schimbrile aprute n tokenul nregistrat. Pentruutilizator,tokenulvaapreaafiatnbaradeadreseabrowseruluicaparteaURLului, subforma:http://www.gwtpowered.org/#Xyzzy. Intern, managementul paginilor accesate este nregistrat n fiierul html al aplicaiei printrun tag special numit <iframe>. Cnd se creaz acest token se creaz un frame ascuns programatorului care va fi ncrcat cu o nou pagin. Deoarece frameul este ncrcat cu o nou pagin, browserul o va considera o pagin diferiti o va aduga la history. Astfel, prin faptul c modificarea coninutului frameului ascuns este semnalat de metoda onHistoryChange() din HistoryListener, toate strile prin care trece aplicaia sunt salvate, fiind posibil astfel ca atunci cnd utilizatorul face click pe butonul Back al browserului s fie ncrcatvecheapagin,producndusecomportamentulateptatdeutilizator.Lafelsepetrec lucrurileipentrubutonulForward.

4.6IntegrareaJUnitcuGWT
Deoarece JUnit este instrumentul de testare cel mai popular, fiind integrati n cadrul

unorIDEuri,GWTofersuportpentrufolosireaacestuiapentruapermitetestareacoduluiAjax cuaceiaiuurincucareestefacuttestareacoduluiJava.

Pentruacreauntest,trebuiesacreemoclaspecaresoextindemdinGWTTestCase,

care extinde la rndul ei clasa TestCase, apoi s implementm o anumit metod, getModuleName(), urmat de un numr de teste efective. Numele modulului este folosit de GWTpentrualocalizafiieruldeconfigurare.
public class MathTest extends GWTTestCase { public String getModuleName () { return "org.mycompany.MyApplication"; } public void testAbsoluteValue () { int absVal = Math.abs(-5); assertEquals(5, absVal); } }

nafar de testele obinuite, GWT permite i testarea apelurile RPC ctre server. n

aceast situaie GWT va porni propria versiune de Tomcat, va executa codul GWT compilat,i vatestadaccodulapelatdeclientvaprimirezultatulateptatdelaserver.

5. ModulHostvsModulWeb
Pe lng suportul pentru JUnit sau compilatorul JavaToJavaScript, Google Web Toolkit oferialteinstrumentecaresuurezemuncaprogramatorilorweb,ianumeunshellpentru dezvoltareai testarea aplicaiilor, GWTShell , precumi un browser web propriu numit Hosted ModeBrowser.

G GWTShell est teoaplicaie edetipulEclipseRichClient C applicationsubform f deconsol

grafic care c atunci cnd este la ansat invoc resursele e din proiec ctul GWT, afieaz mes sajele informaionaleilanseazbrows serulcarepermite p afiarea a paginiin modulhost. H Hosted Mode Browser permite testarea codu ului Java n timpul dezv voltrii aplic caiei,

ntrun mediu m de dezvoltare hibrid asemntor cu ce el al browserului, ns nainte de e a fi transform mat n cod JavaScript. Aceasta A nsea amn c JRE Eul este cel care execut t componentele Ajax ale aplicaiei, permi p nd depanarea d claselor c dire ect din IDEle n care se s lucrez. Acest A tic GWTul lui este o compone ent bazat pe SWT T i simuleaz browser caracterist comportamentul bro owserul implicit de pe fi iecare patform. De ase emeni, este de un real ajutor a pentru dezvoltarea d aplicaiei i obinerea de feedback prin inte erpretarea apelurilor a de tip callback ctre codul Java al aplic caiei ce rule eaz pe platforma de de ezvoltare. Urmtoarea figur f nfieaz z shellul GWT G precum m i browse erul host n n timpul rul lrii aplicaie ei Kitchen Sink oferitca aexempludeGWT.

Browserul host din figur are dou conexiuni cu shellul de dezvoltare din spate: una

dintre ele este o conexiune HTTP obinuit pentru a ncrca paginile web, fiierele .css, imagini, servleturi folosite pentru apelul serviciilor de la server i alte resurse. Toate aceste sunt administrate de ctre serverul Apache Tomcat inclus n GWT folosind un servlet numit
com.google.gwt.dev.shell.GWTShellServlet. n cazul cnd pe server sunt integrate alte

componente, trebuie configurat corespunztor aceast variant de Tomcat intern, sau trebuiefolositoversiuneextern. Cea dea doua conexiune este un fel de u din spate care intercepteaz toate interaciunile care apar n browserul host i le redirecioneaz ctre codul java din shell (nu ctre codul JavaScript). Acest cod Java apeleaz codul de la client care a fost compilat anterior de ctre IDE. Detaliile cum se executa aceste aciuni sunt ascunse in codul shellului care nu esteopensource. Atunci cnd se acioneaz butonul Compile/Browse din browserul host, compilatorul

GWT translateaz codul din pachetul .client n cod JavaScript pe care l deschide ntrun browser web normal pentru a putea vizualiza aplicaia. La acest punct paginile sunt nc furnizate de instana Tomcatului inclus n shell, dar la fel de bine pot fi furnizate din fiiere sistem sau un server web obinuit. O alt modalitate de a invoca compilatorul GWT este prin intermediul scriptului aflat la baza aplicaiei (MyApp-compile). De asemeni se poate scrie un scriptcaresafierulatcuAnt. De fiecare dat cand este invocat, compilatorul GWT combin codul nostru cu o

versiune JavaScript a APIului GWT (echivalentul pentru gwt-user.jar) ntrun fiier JavaScript. Acest cod mpreun cu alte fiiere auxiliare sunt plasate n diectorul www al proiectului. De asemeni,totcesegsetendirectorulpublicalproiectuluivaficopiat.

Figurade emaisuspre ezintpaiipentru p ncrcarea r uneipagini p nmo odulhost:

1. programulsh helldeschide eofereastrcareconin neunbrowse erdetiphos st,ncarencarc paginaMyAp pp.html; 2. MyApp.html M ncarcgwt. .jsprintruntag<script> >; 3. gw wt.js scaneaz MyApp p.html pentru a extrag ge numele modului din tagul: <meta name=gwtm module>; 4. GWT G citete fiierul modul MyApp.gwt.x M xml pentru u a gsi numele clasei c EntryPoint(M MyApp); 5. cl lasa MyApp este instan niat i este e apelat metoda m onMo oduleLoad. De aici porn nete aplicaia; 6. co odulaplicaiei i apeleazlibrriadinGWT G (gwtuser.jar); 7. co odul din gwtuser.jar manipuleaz DOMul bro owserului pe entru a aduga u compon nente U pepaginawebipentruaredirect UI tatoateevenimenteledin d browserctreaplicaie.

Urmtoareafigur rprezintfluxul f execuiilorpentru uancrcaopaginnmodul m web:

1. browserulweb w ncarcMyApp.html M ; 2. MyApp.html M ncarcgwt. .jsfolosindtag t ul<scrip> >; 3. gw wt.js parcu urge MyAp pp.html pe entru a afla a numele e modulului din: <meta name=gwtm module>; 4. gw wt.js modific pagina pentru a include un <ifra ame> care cauzeaz c ncrcarea fiie erului m module name e.nochache. .html; 5. co odul JavaScript din fiie erul module ename.noca ache.html determin d tipul browserului apoiselecteazfiierulco orectpentru uacelbrowser; 6. este executa at codul JavaScript ehivalent m metodei on nModuleLoad d(), lansnd duse aplicaia. Manipularea DOM D ului din n browser este e fcut prin apeluri HTML dina amice dincodulJava aScriptcompilat.

6. UtilitateaGWT
Premisa care a stat la baza GWTului a fost simpl: dezvoltarea de aplicaii Ajax ntrun modmultmaisimplu,ianumescutinduipeprogramatorideincompabilitateadintrebrowser e i permind dezvoltatorului s lucreze ntrun mediu de dezvoltare Java familiar (fr a fi nevoiedecunotinesolidedeJavaScriptsiDHTML). Dup cum aminteam mai sus, GWT este primul framework pentru crearea de aplicaii

web folosind limbajul Java care permite realizarea de aplicaii asemntoare cu cele pentru desktop,darcaresuntrulatenbrowser. Google Web Toolkit unific codul pentru client i server ntro singur aplicaie scris

ntrunsingurlimbaj:Java.Acestlucruarenumeroaseavantaje.Unuldintreacesteaarficmai muli dezvoltatori folosesc Java fa de JavaScript sau Flash. Un alt motiv ar fi acela c pentru Java exist numeroase medii de dezvoltare: Eclipse, NetBeans, IntelliJ IDEA etc. GWT permite crearea unei aplicaii web ntrun mod asemntor cu crearea unei aplicaii Swing crearea de componente vizuale, setarea eventhandlerilor, depanare etc toate aceste n IDEul preferat. Prin folosirea aceluiai limbaj se poate folosi acelai cod att pentru server cti pentru client. De exemplu, se poate rula acelai cod de validare odat pe partea de client pentru feedback imediat, precumi pe partea de server pentru securitate maxim. De asemeni, se poate muta codntrestraturileaplicaieinmomentulcndrearanjmstructuraaplicaiei. Nevoia de a scrie cod in Java, i nu n JavaScript, este fundamental pentru aplicaiile

Web complexe, deoarece se reduce dimensiunea aplicaiei, aceasta devenind mai uor de administrat. ns, GWT permite integrarea codului JavaScript n aplicaie, precumi integrarea unorserviciipentruparteadeserver. GWT este construit deasupra tehnologiilor web, conferindui astfel o mai mare putere.

Aceast putere provine din faptul c aplicaiile GWT pot rula pe orice tip de browseri pe mai multesistemedeoperare,precumidinfaptulcacestgendeaplicaiipotfirulatecuuurin pe mai multe calculatoare. Totui, dezvoltatorii de aplicaii care folosesc acest toolkit, nu trebuie s foloseasc direct tehnologiile web, GWT ascunznd aceste tehnologii din faa

programatorului prin folosirea unei abstracii de genul unui framework ce folosete limbajul Java.

7. Comparaiecualteframeworkuri
GoogleWebToolkitnuesteprimulsetdeuneltecarencearcsuurezemodalitatede construcieaaplicaiilordetipRIA,idupritmuldeevoluiealtehnologiilorweb,esteevident c nu va fi nici ultimul. n cele ce urmeaz, se vor prezenta diferenele dintre GWT i alte frameworkuri din aceeai categorie, avnduse n vedere c fiecare astfel de framework are puncte tari i slabe. (Diferena principal ntre GWT i celelate frameworkuri existente este aceeacfolosindGWT,codulpentruparteadebrowserestescrisinJava,nuinJavaScript.)

7.1GWTvsSWING
Swing este toolkitul standart pentru construcia aplicaiilor GUI n limbajul Java. La o

prim vedere sar putea afirma c nu este o idee bun comparaia dintre acestea dou deoarece Swingul nu este asociat aplicaiilor web, ns analiznd mai de aproape cele dou frameworkuri, se observ c se aseamn datorit modalitii similare, sau chiar identice, de scriere a codului. Ceeace difer sunt cateva denumiri, cum ar fi numele interfeeiClickListener dinGWT,carearecaechivalentnSwing,interfaaActionListener. PentruprogramatoriiSwing,suntctevadifereneimportantentreGWTiSwing.

Prima ar fi aceea c, componentele echivalente cu cele din GWT nu respect ablonul de proiectare MVC. Aceasta nseamn c nu exist un obiect model care s poate fi partiionat de maimultecomponenteiastfel,elesfieinutensincronicitate. A doua diferen notabil este aceea c GWT nu folosete managerii de afiare (layout managers)pentruorganizareacomponentelorninterfa.nschimb,GWTfolosetepaneluri, caresuntconstruitentromanierasemntoarecumanageriideafiare.

Aceste diferene minore fac din GWT un mediu de dezvoltare destul de familiar

dezvoltatorilordeaplicaiiSwing.

7.2GWTvs.Echo2
Echo2 este un alt toolkit popular n rndul dezvoltatorilor de aplicaii web ce folosesc

limbajul Java. Acesta se aseamn cu GWT datorit modalitii asemntoare de a construi interfaa cu utilizatorul. Echo2 folosete clasele din API pentru crearea de instane a componentelor,apoileadaugviewului. Dei cele dou frameworkuri folosesc APIuri similare, ele lucreaz n maniere total

diferite. AplicaiileEcho2ruleazpeserver,fadeaplicaiileGWTcareruleazpeclient. Cu GWT codul surs Java este compilat i transformat n JavaScript pentru a putea fi rulat n browser,pecndcuEcho2codulsursJavaestecompilatnclaseJavaapoiesterulatpeserver, aceastobligndprogramatorulstratezepeservereventualeleevenimenteaprutepeclient. AceastaducelaconsecinadeasefacemaimulteapelurilaservernEcho2,nsnuestenevoie deafiimplementatunmecanismdetipRPC,deoarecetotulsepetrecepeserver. O alta consecint a modului de funcionare a Echo2, este aceea c nu este nevoie s fie trimis browserului tot codul JavaScript rezultat n urma compilrii, ci doar ceea ce este nevoie pentrustadiulcurentalaplicaiei.

7.3GWTvsJSF
Java Server Faces (JSF) este un framework pentru crearea aplicaiilor web bazate pe

limbajul Java n cadrul cruia se folosesc beanuri pe server pentru reprezentarea modelului, plusunsetdelibrriidetagurifolositenpaginileJSPpentruareferiproprietilemodelului. n implementarea JSF standard, toate procesrile sunt fcute de ctre server, iar paginile web

sunt rencrcate dup fiecare tranzacie, ceea ce nu face ca JSF s fie viabil pentru construirea componentelorpentruaplicaiiRIA,nscupuinefortesteposibil. Primul pas pentru crearea unei aplicaii folosind JSF este s creem clasa care reprezint

modelul, apoi s nregistrm n fiierul de configurare acea clas ca fiind de tip managedbean. UrmtorulpasestesconstruimpaginaJSPcarevareprezentaviewulaplicaiei. JSF difer foarte mult de GWT prin faptul c JSF ofer puine avantaje pentru crearea

suportului pentru funcionalitatea pe partea de client a unei aplicaii RIA; este posibil construcia de componente reutilizabile pentru partea de client apelnduse la JavaScript, ns componentele custom au puineanse de a fi reutilizate. Datorit faptului c JSF integreazi partea client, poate fi considerat o tehnologie n competiie cu GWT, ns existanse ca cele dousfieintegrate.

7.4GWTvsRubyonRails
Acest titlu poate s duc n eroare deoarece GWT i Ruby on Rails (RoR) nu se afl n

competiiecutoateclauneleaspectesepotsuprapune. Ruby on Rails este un framework care folosete limbajul Ruby pentru a implementa partea de server a aplicaiei, fiind special creat pentru a executa automat o mare parte din munca din spate.Peparteadeserver,RoRofersuportpentruAjax,permindsfiefolositncodulHTML echivalentul Java pentru o librarie de taguri. Rezultatul final este acela c RoR poate trimite informaiictreservercndestedeclanatoaciuneautilizatorului,iarrspunsulesteafiatn pagin.RoRnuestecreatpentrutratareainteraciunilorcomplexedintreservericlient. Analiznd puterea celor dou limbaje, se poate afirma ca n locul unei competiii dintre

cele dou, ar putea lua natere o colaborare. La aceast concluzie se poate ajunge datorit faptului caGWT deine unele avantaje privitoare la mecanismele de transmiterea informaiilor ntre server i client. Sa observat c din ce n ce mai muli programatori care folosesc alte tehnologii dect Java pe partea de server, sunt mulumii de rezultate pe care GWT le ofer peparteadeclientprinintegrareacualtetehnologiipeparteadeserver.

S-ar putea să vă placă și