• No results found

public i n t e r f a c e P e r s o n S e r v i c e { public s t a t i c c l a s s GetAgeParams {

public S t r i n g name ;

5 }

i n t getAge ( GetAgeParams params ) ; }

10 // I m p l e m e n t a t i o n e n av P e r s o n S e r v i c e −t j ä n s t e n

public c l a s s P e r s o n S e r v i c e I m p l implements P e r s o n S e r v i c e { public i n t getAge ( GetAgeParams params ) {

i f ( params . name . e q u a l s ( " L a r s S v e n s s o n " ) ) { return 5 0 ; 15 } e l s e { return 1 0 ; } } }

6.2.3

Felhantering

Om ett fel uppstår under anropet är frågan hur det ska behandlas och repre- senteras på klientsidan. Om till exempel Lars Svensson inte finns i databasen, vad ska hända då? I Google Web Toolkit har man kodat detta som ett spe- cialfall i svaret som börjar med {OK} om operationen lyckades, och {EX} om ett undantag kastades på servern. Detta kan på klientsidan behandlas på olika sätt, till exempel:

1. En extra parameter till anropet med en funktion som kan anropas för felhantering liknande funktionen som anropas vid ett anrop som lycka- des.

2. En global funktion som anropas då ett fel anländer som svar från ap- plikationsservern.

3. En blandning av de två alternativen ovan där en global funktion existe- rar som behandlar svaren om inget extra argument till anropet anges. Av dessa används förslagsvis det sista alternativet då ofta samma typ av felhantering måste göras med endast vissa undantag. Om ett undantag kas- tas kan då ett användarvänligt meddelande bifogas och även den eller de pa- rametrar som kan ha förorsakat problemet, exempelvis vid validering. Detta möjliggör då ett sätt att validera formulär med kravet att varje parameter till anropet motsvarar en identifierare till ett formulärelement. I JSON-notation kan då svaret vid fel se ut som följande:

6.2. INTEGRATION AV AJAX KAPITEL 6. ANALYS { r e s u l t : ’EX ’ , m e s s a g e : ’ E t t f e l u p p s t o d v i d o p e r a t i o n e n ’ , params : [ ’ name ’ , ’ a g e ’ ] 5 }

Motsvarande svar om operationen lyckades kan således se ut som följer: {

r e s u l t : ’OK ’ , r e t u r n V a l u e : 53 }

Om tjänstemetoden inte returnerar något värde kan returnValue-egenskapen utebli.

6.2.4

Användarvänlighet

En aspekt som lätt blir lidande vid integration av AJAX är användarvän- ligheten och i första hand hur användaren ser att en operation håller på att utföras. I dagens system utan AJAX kan detta indikeras på ett antal olika sätt, till exempel en mätare som indikerar hur mycket av en webbsida är hämtad eller en ikon som rör sig vid sidbytet. Med AJAX ges inte detta utan man som utvecklare måste implementera funktionalitet för det.

Målet blir att implementera någonting som indikerar för användaren att en operation som tar tid håller på att utföras, vilket i första hand är tjäns- temetodanropen. Att starta indikatorn kan göras på olika sätt, till exempel automatiskt när ett anrop inleds eller att utvecklaren på egen hand startar den. Det senare alternativet gör att utvecklaren måste lägga ner tid på att tända och släcka indikatorn vilket är både tidsödande och lätt leder till fel men gör systemet mer flexibelt då utvecklaren har all kontroll. Det första al- ternativet blir däremot smidigare för utvecklaren. En nackdel är att systemet blir mer statiskt. Detta eftersom ett AJAX-anrop tänder indikatorn oavsett om en tjänstemetod, som beskrivs i detta kapitel, eller inte anropas.

En lösning till att ändra tillståndet på indikatorn kan i detta fall vara att en funktion anropas innan tjänstemetodens HTTP-fråga görs tillika när svaret anländer. I funktionerna får då utvecklaren chans att tända och släc- ka indikatorn tillsammans med några andra opterationer som måste utföras innan och efter anropet.

Kapitel 7

Slutsatser och framtida arbete

Analysen har mynnat ut i en enkel modell för hur AJAX skulle kunna im- plementeras i ramverket samt vad denna förändring skulle innebära. Det har varit väldigt intressant att få utreda ett ramverk av denna typ som arbetar på ett annorlunda sätt än vad jag är van vid. Fördelarna med idén bakom ram- verket märks tydligt samtidigt som problemen med hur webbapplikationen modellerades lyste igenom. Problemen var inte direkt AJAX-specifika utan det rörde sig just om hur webbapplikationen beskrevs i modellen, men snart visade det sig att AJAX kunde vara en av lösningarna. Genom att även tän- ka webbapplikationen som tjänstebaserad snarare än tillståndsbaserad faller modelleringen mer naturligt in i JDPs arbetssätt.

En viktig del i analysen var hur server och klient ska kunna kommunicera med varandra, eller i själva verket hur klienten ska kunna anropa en tjänst i webbapplikationen. Detta i sig är inte ett problem att lösa utan, som analy- sen visar, består av ett antal delproblem. Utredningen skulle alltså kunna bli mer komplex, omfattande och robust men med tanke på tidsramarna fanns inget utrymme för en sådan utredning utan en princip presenteras tillsam- mans med en analys runt denna princip. En vidareutveckling skulle kunna vara att på något sätt koda mer komplexa datatyper, som till exempel datu- mobjekt, vilket skulle ge ett mer flexibelt ramverk så validering kan kopplas till datatyperna. Detta måste nu göras i tjänsterna där ingen standard ex- isterar utan ett datum som skickas till en tjänstemetod kan skilja sig från datumformatet som skickas till en annan metod.

Något som har gjort analysen svår att genomföra är att ordentlig doku- mentation saknas för JDP-ramverket. Den dokumentation som finns till godo är antingen väldigt knapphändig eller inaktuell. Istället har information sam- lats genom att studera ramverket som det används idag i aktuella projekt med hjälp av laborationsmiljöer samt diskussioner med anställda som har el- ler har haft kontakt med ramverket. Detta har gjort det svårt att sätta sig in

KAPITEL 7. SLUTSATSER OCH FRAMTIDA ARBETE

i ramverket och ännu svårare att komma fram till en beskrivande helhetsbild till denna rapport.

Stor vikt har lagts på att ta fram lösningar som kan genereras åt utveck- laren för att följa samma arbetssätt som resten av ramverket - att rita och generera istället för att handskriva kod. Detta innebär alltså att webbappli- kationerna kan modelleras så att i stort sett ingen kod behöver skrivas för klientsidan. Detta ger utmärkta möjligheter att optimera storleken på dessa genererade filer då större filer ger mer information som måste färdas över Internet. För att göra en sådan optimering krävs dock ytterligare utredning för hur optimeringen ska ske. Exempelvis måste funktionsnamnen behållas då dessa exponeras för webbutvecklaren medan namnen på eventuella lokala variabler kan förkortas.

I slutet av detta examensarbete valde man på WM-data att använda Google Web Toolkit i ett av sina projekt. I och med det kunde man dra nyt- ta av AJAX i ett projekt som redan använde Java som plattform. Tack vare JDP-ramverket kunde även tjänsterna till applikationen genereras genom att endast förändra mallarna för den genererade javakällkoden. Nu kunde dess- utom Struts abstraheras bort för att istället separera tjänsterna from all webbapplikationsklogik.

Litteraturförteckning

Apple (2002), ‘Remote scripting with iframe’, Apple Developer Connection . URL: http://developer.apple.com/internet/webcontent/iframe.html BarracudaMVC (2006), Barracuda vs. Struts.

URL: http://www.barracudamvc.org/Barracuda/docs/architecture/ barracuda_vs_struts.html

Cavaness, C. (2004), Programming Jakarta Struts, O’Reilly Media, Inc. ISBN 0-596-00651-9 [Elektronisk resurs].

Eclipse Foundation (2006), Eclipse Public License - v 1.0. URL: http://www.eclipse.org/legal/epl-v10.html

ECMA International (1999), Standard ECMA-262, ECMA International. URL: http://www.ecma-international.org/publications/standards/ Ecma-262.htm

Flanagan, D. (2006), JavaScript: The Definitive Guide, 5th Edition, O’Reilly. ISBN 0-596-10199-6 [Elektronisk resurs].

Garrett, J. (2005), ‘Ajax: A new approach to web applications’, Adaptive Path .

URL: http://www.adaptivepath.com/publications/essays/archives/ 000385.php

Jonsson, E. (2006), Användbara webbapplikationer med ajax, Technical re- port, Växjö University, Faculty of Mathematics/Science/Technology, School of Mathematics and Systems Engineering.

Jönsson, O. & Allberg, N. (2004), JDP - Populärbeskrivning. Koch, P.-P. (2005), ‘Ajax, promise or hype?’, QuirksBlog .

URL: http://www.quirksmode.org/blog/archives/2005/03/ajax_ promise_or.html

LITTERATURFÖRTECKNING LITTERATURFÖRTECKNING

McClanahan, C. R., Schachter, M., Husted, T., Cooper, M. & Steitz, P. (2000-2005a), Building Controller Components.

URL: http://struts.apache.org/1.2.9/userGuide/building_controller. html

McClanahan, C. R., Schachter, M., Husted, T., Cooper, M. & Steitz, P. (2000-2005b), Building Model Components.

URL: http://struts.apache.org/1.2.9/userGuide/building_model.html McClanahan, C. R., Schachter, M., Husted, T., Cooper, M. & Steitz, P.

(2000-2005c), Building View Components.

URL: http://struts.apache.org/1.2.9/userGuide/building_view.html Perry, B. W. (2006), Ajax Hacks, O’Reilly. ISBN 0-596-10169-4 [Elektronisk

resurs].

WM-data (2001), Framework Architecture (.NET). XAML.NET (2005), Welcome to XAML.NET!

URL: http://www.xaml.net/ XULPlanet.com (2006), Why use XUL?

URL: http://www.xulplanet.com/tutorials/whyxul.html

Zakas, N. C. (2005), Professional JavaScript for Web developers, John Wiley & Sons, Incorporated. ISBN 0-764-57908-8 [Elektronisk resurs].

Bilaga A

Stereotyper i JDP

Klasstereotyper

Namn Beskrivning

Entity Visar att klassen ska genereras till en entitets- böna för EJB. Används endast i domänlagret (se avsnitt 2.4).

MessageDriven Genererar en meddelandeböna enligt EJB- standarden.

Service Klassen ska generera ett tjänsteobjekt som ut- görs av en sessionsböna (se avsnitt 2.4) till- sammans med tjänstemetoder. Bönan kan väl- jas vara tillståndslös eller inte beroende på om den innehåller attribut. Läggs ett eller flera at- tribut till i klassen genereras en sessionsböna med tillstånd.

ValueObject Klassen ska vara ett värdeobjekt som endast innehåller deklarerade datamedlemmar samt valideringskod för dessa.

BILAGA A. STEREOTYPER I JDP

Namn Beskrivning

WebForm Genererar framför allt en ActionForm-klass från strutsbiblioteket och XDoclet-taggar som används i konfigurationen. Används även till- sammans med stereotyperna WebPage och WebAction för att skapa ett skelett till ett for- mulär i en JSP-sida. WebForm-stereotyper an- vänds endast i webbapplikationslagret.

WebPage Genererar en JSP-sida tillsammans med till- hörande konfiguration för Struts. Även den- na stereotyp används endast för webbapplika- tionslagret.

WebAction Utgör en Action-klass i Struts. I samband med att klassens innehåll genereras hakas även XDoclet-taggar för Struts-konfigurationen på klassen som anger exempelvis namn och URL- sökväg till klassen.

WebTilesDefinition En klass som genereras med det enda syfte att XDoclet-taggar ska kunna generera strutskon- figuration för tileskomponenten i Struts. Efter att klassen genererats och konfiguration skri- ven så slängs klassen.

ActionConfig Används väldigt begränsat idag men hade som syfte att kunna återanvända en och samma Action-klass till flera URL-adresser.

BILAGA A. STEREOTYPER I JDP

Relationsstereotyper

Namn Beskrivning

ForwardMapping Konfigurerar en mappning från en Action- klass till ett mål i form av en annan Action- klass eller JSP-sida.

Action Avänds till att generera en tiles-definition. Ste- reotypen indikerar alltså att en tile ska genere- ras med målets klassnamn som namn på tile- definitionen och med hjälp av källans klass- namn bestäms värdet.

Form Sätts mellan en WebAction och en WebForm för att indikera att en Action-klass ska ha ett formulär samt vilket fomulär det ska ha.

Bilaga B

Egenskaper för XMLHttpRequest

Namn Beskrivning

onreadystatechange Funktion som anropas då tillståndet på XMLHttpRequest-objektets HTTP-fråga ändras.

readyState Nuvarande tillståndet på HTTP-frågan. responseText Svaret på frågan i ren textformat.

responseXML Svaret på frågan i XML-format som re- presenterar det eventuella dokumentet i responseText-egenskapen.

status Statuskoden på svaret från webbservern, ex- empelvis 200 om allt gick bra eller 404 om si- dan inte hittades.

statusText Textrepresentation av statuskoden i status- egenskapen, exempelvis ”OK” motsvarar 200 eller ”Not Found” för 404.

abort() Avbryter frågan och stänger uppkopplingen mellan klienten och servern.

getAllResponseHeaders() Hämtar headerparametrarna från svaret på HTTP-frågan i oformaterad textrepresenta- tion.

BILAGA B. EGENSKAPER FÖR XMLHTTPREQUEST

Tabell B.1: (Fortsättning)

Namn Beskrivning

getResponseHeader(header) Hämtar en angiven headerparameter i HTTP- svaret.

open(url, asynch) Påbörjar en HTTP-fråga mot angiven URL men skickar den inte.

send(body) Skickar HTTP-frågan till den URL som angavs i open()-metoden och kan även skicka med en kropp till frågan.

setHeader(header, value) Sätter en headerparameter vid namn header till värdet value.

Related documents