Frameworks
[email protected] 14-04-2009
LinkWorks Dit document bevat een onderzoek naar een aantal web application frameworks, met daarbij beschreven wat het framework inhoudt en wat de voor- en nadelen zijn.
Versiebeheer Versie 0.1
Datum 14-04-2009
Auteur Ceryl
0.2 0.3 0.4
14-04-2009 14-04-2009 15-04-2009
Tobias Dries Ceryl
Omschrijving Initiële versie, alles samengevoegd, conclusie toegevoegd Aanvullen van de conclusie Inhoudsopgave en inleiding toegevoegd Inleiding verbeterd, andere indeling hoofdstukken
2
Inhoudsopgave Versiebeheer ............................................................................................................. 2 Inleiding ..................................................................................................................... 5 Wicket ........................................................................................................................ 6 Werking ............................................................................................................................ 6 Voor- en nadelen .............................................................................................................. 6 Voordelen ....................................................................................................................... 6 Nadelen .......................................................................................................................... 7 Praktijk.............................................................................................................................. 7 Leercurve ......................................................................................................................... 8
JSP(X) ........................................................................................................................ 9 Werking ............................................................................................................................ 9 Voor- en nadelen .............................................................................................................. 9 Voordelen ....................................................................................................................... 9 Nadelen .......................................................................................................................... 9 Leercurve ......................................................................................................................... 9
Struts ....................................................................................................................... 10 Werking (kort) .................................................................................................................10 Voordelen ........................................................................................................................10 Nadelen............................................................................................................................10 Leercurve ........................................................................................................................10
JavaServer Faces ................................................................................................... 11 Werking ...........................................................................................................................11 Voor- en nadelen .............................................................................................................11 Voordelen ......................................................................................................................11 Nadelen .........................................................................................................................12 Leercurve ........................................................................................................................12
Google Web Toolkit ................................................................................................ 13 Introductie .......................................................................................................................13 Werking ...........................................................................................................................13 Voor- en nadelen .............................................................................................................13 Voordelen ......................................................................................................................13 Nadelen .........................................................................................................................13 Leercurve ........................................................................................................................13
Stripes ..................................................................................................................... 14 Werking ...........................................................................................................................14 Voor- en nadelen .............................................................................................................14 Voordelen ......................................................................................................................14 Nadelen .........................................................................................................................14 Leercurve ........................................................................................................................14
3
RIFE ......................................................................................................................... 15 Introductie .......................................................................................................................15 Werking ...........................................................................................................................15 Voor- en nadelen .............................................................................................................15 Voordelen ......................................................................................................................15 Nadelen .........................................................................................................................15 Leercurve ........................................................................................................................15 Toekomst van RIFE.........................................................................................................15
Framework scores .................................................................................................. 16 Conclusie ................................................................................................................ 17 Literatuur ................................................................................................................. 18 Boeken.............................................................................................................................18 Websites ..........................................................................................................................18
4
Inleiding In dit document hebben wij een aantal web applicatie frameworks onderzocht. Om te vergelijken welk framework het beste zou kunnen worden gebruikt voor de front-end van het klachtenregistratie systeem van de WOSI applicatie. Wij hebben voor de verschillende frameworks onder andere gekeken naar de volgende aspecten:
Werking Voor- en nadelen Leercurve
In dit document zullen wij de volgende frameworks behandelen, dit zijn volgens ons de frameworks met de meeste potentie en activiteit op het gebied van ontwikkeling en community:
Wicket JSP(X) JSF Struts GWT Rife Tapestry Stripes
5
Wicket Werking Het is niet een simpel verlangen naar betere kwaliteit dat de ontwikkeling van Wicket dreef. Zelfs met zoveel opties, is er werkelijk geen web toolkit dat precies het gebied vult dat Wicket vult. In feite, lijkt Wicket niet op andere frameworks. Wicket‟s naaste verwanten zijn waarschijnlijk Tapestry en Echo, maar zelfs daar is de gelijkenis zeer miniem. Evenals Tapestry, gebruikt Wicket een speciaal HTML attribuut om componenten aan te duiden, wat het in staat stelt het bewerken gemakkelijk te maken met gewone HTML-editors. Net zoals Echo, heeft Wicket een eerste klas componenten model. Maar Wicket applicaties zijn niet zoals applicaties die zijn geschreven in Tapestry of Echo, want in Wicket krijgt je de voordelen van beide werelden: uitstekende componenten en eenvoudige HTML benadering. In veel situaties kan deze combinatie een belangrijk ontwikkelingsvoordeel blijken te zijn.
Voor- en nadelen Voordelen In Wicket worden alle server-side states automatisch beheerd. Er wordt nooit direct gebruik gemaakt van een HttpSession object of een soortgelijke wrapper om de state op te slaan. In plaats daarvan wordt de state in verband gebracht met componenten. Elke server pagina component bezit een geneste rangorde van stateful componenten, waarbij elk component model, uiteindelijk een POJO (Plain Old Java object) is. Wicket houdt een lijst bij van deze pagina's in elke gebruikers sessie. Eén doel van deze lijst (en de component hiërarchie op elke pagina) is om het framework toe te staan alle details te verbergen van hoe de componenten en modellen worden benaderd. Een gebruiker is vooral bezig met Java objecten en Wicket houdt zich bezig met zaken als URL's, sessie-id's en GET/ POST requests. Tot slot, is Wicket ontworpen om te werken met het POJO persistence frameworks. Dit kan het schrijven van database gedreven webapplicaties vrij eenvoudig maken. In termen van efficiëntie versus productiviteit, staat Wicket tot JSP als Java tot C. Je kunt alles in JSP wat ook in Wicket kan. Je kunt het misschien zelfs wel meer efficiënt op het gebied van geheugen of processor verbruik. Maar het kan je weken of maanden meer kosten om de applicatie te ontwikkelen. En op het eind, omdat het state management in JSP ad-hoc is, zullen hoogstwaarschijnlijk overal beveiligingsproblemen en bugs tegen opduiken. Wicket introduceert geen speciale syntax in HTML. In plaats daarvan breidt het HTML uit in een standaard conforme wijze via een Wicket namespace die volledig voldoet aan de XHTML-standaard. Om dit te bereiken maakt Wicket consequent gebruik van een single ID attribuut in de Wicket namespace ( "wicket: id") om HTML-tags te markeren die een bijzondere behandeling dienen te krijgen door de toolkit
6
Nadelen Alles wordt in Plain Old Java Objects geïmplementeerd Je moet een goede kennis hebben van object georiënteerd programmeren Wicket elementen veranderen vaak van ID, zijn lastig vast te leggen voor designers
Praktijk Een voorbeeld van hoe Wicket in de praktijk er uit ziet is te zien in een Hello World applicatie: HelloWorld.html <span wicket:id="message" id="message">Message goes here
HelloWorld.java package org.wikipedia.wicket; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; public class HelloWorld extends WebPage { /** * Constructor */ public HelloWorld() { add(new Label("message", "Hello World!")); } }
HelloWorldApplication.java package org.wikipedia.wicket; import org.apache.wicket.protocol.http.WebApplication; public class HelloWorldApplication extends WebApplication { /** * Constructor. */ public HelloWorldApplication() { } /** * @see org.apache.wicket.Application#getHomePage() */ public Class getHomePage() { return HelloWorld.class; } }
7
web.xml <web-app>
Wicket Examples HelloWorldApplication org.apache.wicket.protocol.http.WicketFilter <param-name>applicationClassName <param-value>org.wikipedia.wicket.HelloWorldApplication HelloWorldApplication /*
Leercurve De leercurve is over het algemeen niet heel hoog, het ligt er slechts aan welke achtergrond u heeft qua frameworks en programmeer ervaring. Wanneer u al ervaring heeft met Spring, zult u weinig problemen met het aanpassen aan Wicket‟s programmeer model. Echter wanneer u ervaring heeft met Struts, Spring MVC of enig ander framework wat daar op lijkt, zult u vooral in het begin nogal wat moeite hebben met de abstractie van Wicket. Over het algemeen wanneer u nog weinig ervaring heeft met frameworks en enkele tutorials en voorbeelden bekijkt van Wicket zult u al snel een start kunnen maken met Wicket.
8
JSP(X) Werking Een JSP pagina bestaat uit „normale‟ (X)HTML/XML, speciale JSP tags en eventueel stukjes Java code zogenaamde „scriplets‟ of uit combinaties daarvan. Bij gebruik wordt een JSP pagina gecompileerd naar een Servlet, deze wordt vervolgens aangeroepen tijdens de uitvoering. Bij het gebruik van JSP‟s zul je vaak gebruik maken van de JSTL (Java Standard Tag Library) deze bevat veel van de gebruikte standaard tags, zoals gebruik variabellen, ophalen van waarden, condities en loops.
Voor- en nadelen Voordelen Makkelijker lay-out beschrijven in vergelijking met een Servlet (HTML code i.t.t. echoën van lay-out met een print statements) Scheiding tussen statische en dynamische content. Hierdoor is het ook makkelijker voor webdesigner om iets in JSP te schrijven JSPX: scheiden van de view en de achterliggende code Nadelen Doordat de JSP word gecompileerd naar een Servlet kunnen er rare fouten ontstaan die niet (direct) duidelijk worden uit de source van de JSP pagina Je kunt niet snel wijzigingen aanbrengen in de JSP pagina‟s en deze direct bekijken, je moet of je applicatie reloaden of zelfs server restarten Java direct in je JSP pagina kunnen embedden (scriplets). Dan is er geen scheiding meer tussen de Java code en de presentatie. Dit geld niet voor JSPX hier is het niet mogelijk om deze scriplets te gebruiken
Leercurve Basis JSP gebruik is snel te leren, met een beetje kennis van HTML/Java kun je vrij eenvoudig een simpele pagina maken. Alleen kan het vrij gecompliceerd worden als je gebruik gaat maken van custom tags om doelen te bereiken. Verder is het redelijk makkelijk om JSP toe te passen dit omdat JSP‟s de basis is waarop alles is te herleiden.
9
Struts Werking (kort) Struts is een tag library/framework die gebruik maakt van JSP, het zorgt ervoor dat wat je eerst met veel code moest doen nu met enkele tags kunt regelen. Het maakt je code overzichtelijker n helpt je bij het scheiden van de onderdelen.
Voordelen
Internationalisatie, een speerpunt van Struts is het makkelijk vertalen van de website. Goede support voor het gebruik van AJAX Integratie voor Spring POJO‟s als controllers, dit inheritence niet verplicht Ondersteuning voor Velocity en FreeMarker (2 java template engines) Ondersteuning van mooie urls Simpele architectur Tab libs zijn makkelijk aan te passen Controller-based of page based navigatie
Nadelen
Gebruikt VEEL XML configuratie om te werken Laat de flow mapping over aan XML Documentatie is slecht georganiseerd Je komt nog veel Struts 1.* documentatie tegen i.p.v. 2.* als je zoekt via google
Leercurve Struts heeft een stijle leercurve, maar als je daar eenmaal doorheen bent is het zeer prettig werken. Deze curve is vergelijkbaar met andere frameworks.
10
JavaServer Faces Werking JSF (JavaServer Faces) is een Java-based Web application framework bedoeld om de ontwikkeling van userinterfaces voor Java EE applicaties makkelijker te maken. JSF gebruikt hiervoor een component-based aanpak. JSF maakt gebruik van JavaServer Pages (JSP) voor de presentatie, maar kan ook gebruik maken van andere technieken zoals bijvoorbeeld XUL. JSF bevat:
Een set van API‟s voor de user interface componenten en het bijhouden van hun status, event handling en input validatie, converteren van waarden, en paginanavigatie. Een standaard set van UI components Twee JavaServer Pages (JSP) custom tag libraries om JavaServer Faces te kunnen gebruiken binnen een JSP pagina. Een server-side event model State management Managed Beans Unified Expression Language voor JSP 2.0 en JSF 1.2
De user interface draait op de server
De JSP pagina, myform.jsp, is een JavaServer Faces pagina. Dit is een JSP pagina die JavaServer Faces tags bevat om de JSF user interface componenten te kunnen gebruiken. De user interface van de webapplicatie (myUI in de afbeelding) beheert de objecten die binnen de JSP pagina gedefineerd zijn. Deze objecten kunnen zijn:
De UI component objecten die bij de tags in de JSP pagina horen Event listeners, validators en converters JavaBeans
Voor- en nadelen Voordelen
JSF is te gebruiken ia.c.m. andere frameworks zoals bijvoorbeeld Struts Het is mogelijk om 3rd party UI componenten te gebruiken Duidelijke scheiding tussen business logica en presentatie JSF kan ook met andere technieken gebruikt worden dan JSP Veel 3rd party componenten zijn al beschikbaar
11
Nadelen
Kan erg complex worden als er complexe user interface componenten geschreven moeten worden waar bijvoorbeeld nog andere framworks voor gebruikt moeten worden. 3rd party componenten zijn soms moeilijk aan te passen vanwege de complexiteit. JSF gebruikt standaard overal POST requests. Ook voor button clicks en links.
Leercurve Als er eigen user interface componenten geschreven moeten worden kan dit erg complex worden en er gaat veel tijd in zitten. Verder is de basic implementatie vrij simpel.
12
Google Web Toolkit Introductie Google Web Toolkit (GWT) is een open source Java-framework van Google dat het mogelijk maakt om JavaScript-applicaties in Java te ontwikkelen. Versie 1.0 werd door Google in mei 2006 gelanceerd.
Werking GWT maakt het mogelijk om Javascript-applicaties, en in het bijzonder AJAX-applicaties, in Java te schrijven met behulp van standaard Java ontwikkelgereedschap (zoals IDE's en debuggers). Wanneer de applicatie af is, wordt deze vertaald naar JavaScript door de GWTcompiler. De resulterende JavaScript code kan zonder hulpprogramma's of extra software door browsers worden uitgevoerd. GWT-applicaties kunnen op twee manieren uitgevoerd worden:
Hosted mode: de (Java)broncode wordt vertaald naar Java bytecode die vervolgens wordt uitgevoerd door een Java Virtual Machine. Deze mode is vooral bedoeld voor het ontwikkelen en debuggen van de applicatie.
Web mode: de (Java)broncode wordt vertaald naar JavaScript en HTML. Het resultaat kan uitgevoerd worden in een standaard browser of aan derden beschikbaar worden gesteld via het internet.
Voor- en nadelen Voordelen Alles wordt geprogrammeerd in Java, en je hebt dus geen extra kennis van JavaScript nodig. De mogelijkheid om complex Java te gebruiken aan de client side. De gebruiker ziet JavaScript, maar de ontwikkelaar kan gewoon in een IDE de Java code ontwikkelen en debuggen. Er kan worden gedebugged zonder dat hiervoor een server nodig is. Er wordt veel support geboden door Google. Nadelen De leercurve is groot. Het deployen brengt meerdere obstakels met zich mee waardoor het minder makkelijk in gebruik is. De integratie van JavaScript gaat niet volgens de standaard manier. Er wordt gebruik gemaakt van JSNI om JavaScript te combineren met de Java code. Dit is op de lange termijn een uistekende manier, maar om te beginnen vergt het veel extra tijd. Het nadeel van het volledige Java gebruik is dat men in de keuzes beperkt wordt, omdat normaal gesproken JavaScript wordt gebruikt bij de client, en de keuze voor de server side staat open.
Leercurve Zoals in de nadelen te lezen is, heeft de GWT een hoge leercurve. De oorzaak hiervan is de documentatie die beschikbaar is voor het deployen. Dit is toch een belangrijk onderdeel en als dit niet makkelijk en snel werkt, dan is de kans dat het daadwerkelijk gebruikt gaat worden een stuk kleiner.
13
Stripes Werking Stripes is een presentatie framework voor Java. De reden dat Stripes is ontwikkeld is dat volgens de makers ervan, het maken van webapplicaties in Java te veel werk is. Bestaande frameworks vereisen te veel configuratie en lijken zo opgebouwd te zijn dat het voor de gebruiker noodzakelijk is een hele nieuwe “taal” te leren alvorens het framework goed te gebruiken is. Stripes kan gezien worden als een extensie bovenop JSP. Presentatie pagina‟s zijn dan ook normale JSP pagina‟s waarin stripes tags gebruikt kunnen worden.
Voor- en nadelen Voordelen Eenvoudig om een lay-out op te stellen Gebruikt JDK5 Goede en volledige documentatie Ondersteuning voor nieuwe java en web technieken (AJAX, EJB3, annotations, …) Scheiding van presentatie en logica Nadelen Stripes werkt met behulp van JSP en kent daarom voor een groot deel ook de nadelen die JSP heeft
Leercurve Zoals al eerder aangegeven is de leercurve van Stripes erg kort. Stripes is opgezet met als achterliggende gedachten om een framework te bieden waarmee snel webapplicaties gemaakt kunnen worden. De documentatie van stripes is goed en uit de reacties van mensen is te lezen dat Stripes erg makkelijk is om mee te werken.
14
RIFE Introductie RIFE is een enterprise application framework voor Java. Er wordt gebruik gemaakt van een light-weight model en het bestaat uit een grote verzameling modules, die elk hun eigen stukje werk doen. De laatste versie van het framework is 1.5. RIFE is een zogenaamd full stack framework. Dit houdt in dat zo‟n framework vaak een verzameling is van meerdere libraries die allemaal geschikt zijn voor het ontwikkelen van web applicaties. Deze worden allemaal gecombineerd in 1 pakket, wat dus betekent dat alle functionaliteiten makkelijk beschikbaar zijn. Andere voorbeelden van full stack frameworks zijn JavaEE (Servlets), WebObjects, OpenACS en Ruby on Rails.
Werking RIFE maakt gebruik van verschillende modules die samen een krachtig framework opleveren. RIFE combineert request-based en component-based mogelijkheden en voegt deze samen in een component object model.
Voor- en nadelen Voordelen RIFE is ontwikkeld om taken te kunnen scheiden waardoor iedereen die er aan mee werkt zich alleen maar op zijn of haar eigen stuk hoeft te richten. Op elk moment kunnen de stukken samengevoegd worden, zonder veel moeite. RIFE zorgt ervoor dat er een robuust systeem ontstaat zonder dat sterke koppelingen. Er is goede documentatie aanwezig; deze is overzichtelijk en duidelijk. Nadelen De leercurve is groot. Dit komt omdat RIFE een zogenaamd full-stack framework is, en dus heel veel mogelijkheden heeft. Om met RIFE te beginnen moet er veel worden gelezen, wat een grote leercurve veroorzaakt. Een ander nadeel is dat RIFE steeds meer concurrentie krijgt van andere grote namen in de framework industrie. Als steeds meer mensen voor andere framework kiezen, dan is de kans groot dan RIFE zal uitsterven. Het grootste nadeel is dat RIFE het niet lang meer vol zal houden. Uit verschillende gesprekken komt naar voren, dat RIFE steeds meer wordt vervangen door nieuwere technieken. Dit is natuurlijk niet wenselijk voor een project en daarom is het niet verstandig om RIFE te gebruiken voor een langdurig project.
Leercurve Zoals in de nadelen te lezen is, heeft RIFE een redelijk hoge leercurve. Dit komt omdat de mogelijkheden zeer uitgebreid zijn, en als je wil beginnen met RIFE je veel moet lezen om een goede start te kunnen maken. Dit is echter steeds beter te doen, omdat de laatste tijd de documentatie flink is verbeterd.
Toekomst van RIFE Zoals bij de nadelen te lezen is, blijkt dat het RIFE framework zijn einde ziet naderen. Het wordt nog wel gebruikt, maar er wordt steeds vaker gekozen voor andere technieken. Ook heeft de oorspronkelijke ontwikkelaar al aangegeven niet lang meer met RIFE bezig te zullen zijn. Dit heeft ons doen besluiten om RIFE niet te gaan gebruiken voor ons project.
15
Framework scores XML configuratie (veel configuratie is negatief)
J a v a
L e e r c u r v e
Form validatie
A J A X
D o c u m e n t a t i e
F l e x i b e l
H e r b r u i k b a a r
Weinig code
Duidelijke foutmeldingen
Invoegen in bestaand project
Wicket JSP(X) Struts JSF GWT
++ ++ -+ +/-
++ + ++ ++
++ + ++ + ++
+ + + +/-
++ + + ++
++ + +
+ + + + +
++ ++ ++ ++ ++
+/+ + +/+/-
++ +/+ +
+/++
Tapestry
++
++
+/-
+
-
++
+
+
+/-
++
+/-
Stripes
++
++
++
+
++
++
+
+/-
+
+
+
Rife †
…
…
…
…
…
…
…
…
…
…
…
+ -
Conclusie Wij hebben een aantal frameworks onderzocht op hoe deze in elkaar steken en hoe kunnen worden toegepast, de voor- en nadelen en wat de leercurve is voor elk framework. Hieruit hebben wij de conclusie getrokken, dat Wicket als beste uit de bus kwam. Dit hebben wij gedaan door voor elk framework de plus- en minpunten te bepalen. Zoals in het overzicht op de vorige pagina te zien is. Ook hebben wij gekozen voor Wicket omdat er binnen de groep al het meeste ervaring mee was opgedaan. En eigen ervaring met Wicket is positief ten opzichte van andere frameworks uit onze vergelijking. Daarom zouden wij voor het WOSI klachtenregistratie systeem graag als web applicatie framework Wicket willen aandragen. Omdat dit de snelheid waarmee de front-end van de applicatie opgezet kan worden aanzienlijk verhoogt. Een extra eis die we hadden voor het gebruik binnen WOSI is dat het goed te gebruiken is met een bestaand project en dan het makkelijk naast JSPX kan werken. Een voordeel daarbij is dat de klachtenregistratie een losse module is. Dit zorgt ervoor dat JSPX en widget niet daadwerkelijk door elkaar gebruikt hoeft te worden. Dit is wel mogelijk maar maakt het complexer dan nodig is. De leercurve van widget zorgt ervoor dat het voor andere heel makkelijk is om de code over te nemen en wijzigen. Hierdoor zien we hier geen problemen ontstaan voor het gebruik binnen WOSI.
Literatuur Boeken Gurumurthy, K. (2006). Pro Wicket. New York: Springer-Verlag. Hillenius, E., & Dashorst, M. (2008). Wicket In Action. Deventer: Manning Publications Co. Brown, S., Dalton, S., Jepp, D., Johnson, D., Li, S., & Raible, M. (2005). Pro JSP 2. Verenigde Staten van Amerika: Apress.
Websites Apache Wicket. (2008, september 9). Opgeroepen op april 7, 2009, van Wikipedia: http://en.wikipedia.org/wiki/Apache_Wicket Apache Wicket Introduction. (2008). Opgeroepen op april 7, 2009, van Apache Wicket: http://wicket.apache.org/ Wicket Examples. (2008). Opgeroepen op april 7, 2009, van Wicketstuff: http://wicketstuff.org/wicket13/ http://nl.wikipedia.org/wiki/JavaServer_Pages http://java.sun.com/developer/onlineTraining/JSPIntro/contents.html http://struts.apache.org/ http://www.roseindia.net/struts/ http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6457.pdf http://www.chariotsolutions.com/slides/pdfs/spring-forward-2006-web-frameworks.pdf http://i-proving.ca/space/Java+Web+Framework+Comparison http://www.openkennis.nl/archief.html http://adi.atosoriginblog.nl/2008/10/29/java-web-application-frameworks/ http://code.google.com/intl/nl/webtoolkit/overview.html http://www.stripesframework.org/display/stripes/Home http://www.stripesframework.org/display/stripes12/Testimonials http://rifers.org/about http://en.wikipedia.org/wiki/RIFE http://en.wikipedia.org/wiki/Web_application_framework
18