Follow Us on Twitter

Tapestry versus JSF

Mei 2006 - Er bestaan inmiddels meer dan vijftig frameworks waarmee men een Java webapplicatie kan bouwen. Als antwoord op deze enorme wildgroei heeft Sun Java Server Faces (JSF) in het leven geroepen. Enige natuurlijk selectie (ease of development en natuurlijk financiering) heeft al plaats gevonden en wijst uit dat JSF en Tapestry op dit moment leidend zijn als het gaat om het bouwen van webapplicaties.

Inleiding 

Afgelopen januari is eindelijk de lang verwachte Tapestry versie 4.0 uitgekomen. Een goed moment om deze nieuwe Tapestry versie eens te vergelijken met de laatste J2EE standaard, JSF1.2.

Dit artikel tracht een objectief beeld te geven van de verschillen en overeenkomsten die we constateerden tussen de twee frameworks. Welk framework uiteindelijk de beste keuze is, is afhankelijk van de omgeving en het gebruik.

JSF/ADF Faces

JSF1.2 is een specificatie (JSR252) voor het bouwen van webapplicaties die onderdeel uitmaakt van de Servlet API van de J2EE5.0 distributie. Het kan dus toegepast worden in omgevingen die deze versie ondersteunen. Providers kunnen deze specificatie implementeren en beschikbaar stellen aan gebruikers. ADF Faces van Oracle en MyFaces van Apache zijn hier goede voorbeelden van.

JSF biedt een servlet-implementatie voor webpagina’s aan met gebruikersinterface¬componenten en event handling. De verwerking van een request gaat in 6-stappen: opbouwen componenten model, toepassen parameters, validatie, wijzigen van het model, aanroep van de applicatie en het maken van de response. Tussen deze stappen treden events op die verwerkt kunnen worden.

Voor een nadere beschrijving van JSF en ADF Faces verwijzen we naar onze vorige Whitebooks (zie onderstaande links).

Tapestry

Tapestry is een Open Source framework waarmee met behulp van componenten en templates webapplicaties gebouwd kunnen worden. Tapestry is al sinds 2000 in ontwikkeling en is momenteel onderdeel van het Apache Jakarta project. Het is opgezet door Howard Lewis Ship, die tevens grondlegger is van HiveMind, een bekende IoC container. Met de release van versie 4.0 is Tapestry behoorlijk verbeterd vergeleken met voorgaande versies. Dit artikel beschrijft versie de nieuwste versie van Tapestry.

De vergelijking

De vergelijking tussen een J2EE standaard en een Open Source framework is eigenlijk een vergelijking tussen appels en peren. JSF is ontstaan als antwoord op de vele Open Source initiatieven en put daar duidelijk inspiratie uit. Deze initiatieven zijn echter weer gebaseerd op de Servlet API standaarden. Zo houden ze elkaar dus feitelijk in stand.

Voornaamste overeenkomsten

Beide frameworks maken gebruik van een componentenmodel en zijn event-driven. Ze zijn beide sterk productiviteitsverhogend.

Verder hebben beide frameworks gemeen dat ze de ontwikkelaar het uitwerken van boilerplate code van het request/response mechanisme van een Browser/Servlet applicatie uit handen nemen. Ze mappen webgebeurtenissen rechtstreeks op Java objecten en methoden die de toestand van de sessie vasthouden en in de eventverwerking gebruikt kunnen worden.

Daarnaast werken ze allebei met componenten die de presentatielaag abstraheren en eenvoudig herbruikbaar zijn. Door deze abstractie kunnen ze niet alleen werken met HTML maar bijvoorbeeld ook met WML. Beide frameworks leveren een standaard set van componenten voor de meest gebruikte functionaliteit.

De frameworks zijn tenslotte eenvoudig te integreren met Portlets en middle-tier technologieën, zoals J2EE, Spring en HiveMind.

Voornaamste verschillen

Hoewel beide frameworks qua structuur en opzet veel op elkaar lijken, zijn er toch een aantal verschillen te noemen.

Het belangrijkste verschil tussen Tapestry en JSF is het doel waarvoor deze frameworks ontworpen zijn.

JSF heeft als doel een standaard te bieden voor webontwikkeling. Daarnaast mag het qua ontwikkelsnelheid niet onder doen voor ASP.Net, een ontwikkelomgeving waar de ontwikkelaar middels drag & drop methode snel een applicatie kan bouwen. Bij JSF is gekozen voor soortgelijke tool-based development. De interface is op basis van JSP’s, hoewel ook andere frontend technologieën ingezet kunnen worden.

Tapestry heeft als doel een duidelijke scheiding te maken tussen gebruikersinteractie design (HTML frontend) en de ontwikkeling van business logica. Daarbij probeert Tapestry de ontwikkelaar een OO gevoel te geven bij de webcomponenten.

Dat geeft al meteen een indicatie voor het gebruik en de kracht van elk framework.
Applicaties waarvan de frontend door webdesigners is ontworpen zijn veel makkelijker met Tapestry te realiseren. JSF komt daarentegen voornamelijk tot zijn recht bij webapplicaties die vanuit de business zijn ontworpen en een Rich Client nodig hebben. Dit is ten eerste vanwege een voorgedefinieerde procesflow en ten tweede vanwege een standaard opmaak van de componenten.

Specificatie of implementatie

JSF is zoals gezegd een specificatie (JSR252) die onderdeel uitmaakt van de Servlet API die met de J2EE5.0 distributie geleverd wordt door Sun Microsystems. Dat betekent dat verschillende leveranciers van Java tools een implementatie kunnen aanbieden die al of niet te combineren is met producten van andere leveranciers.

Open Source frameworks zoals Tapestry, zijn per definitie implementaties die vaak geen specificatie hiervoor aanvragen. Het probeert geen standaard te definiëren. Het biedt ontwikkelaars slechts een extra hulpmiddel. The Apache Software Foundation ondersteunt dergelijke initiatieven en heeft daarmee een degelijke reputatie opgebouwd.

Ontwikkelgemak

JSF in combinatie met een goed geïntegreerde ontwikkelomgeving biedt grote voordelen wat betreft de doorlooptijd van een project. Deze tool based development mogelijkheid wordt geboden door de meeste grote leveranciers van Java tools. In omgevingen waarbij de ontwikkelaar aan hulpmiddelen geen tekort heeft, zal JSF uitblinken in ontwikkelsnelheid.

Bij Tapestry moet er nog steeds veel uitgecodeerd worden. Het biedt daarentegen wel meer flexibiliteit wat frontend design betreft en uitgebreide mogelijkheden tot hergebruik van componenten.

Voor beide frameworks zijn er tevens plug-ins verkrijgbaar voor Eclipse. Voor Tapestry kan Spindle handig zijn, voor JSF is de gratis FacesIDE plug-in beschikbaar. Het is echter beter om een product van bijvoorbeeld Oracle, BEA of Sun te overwegen.

Tapestry is al veel langer in ontwikkeling dan JSF en daardoor veel bruikbaarder en toepasbaarder dan JSF. Veel van de problemen die JSF nog op moet lossen heeft Tapestry al achter zich.

Testen

JSF maakt gebruik van JSP’s, die in de container gedraaid moeten worden en waarvan de fouten in de gegenereerde pagina’s niet altijd eenvoudig te relateren zijn aan de JSP-code. De business logica is echter met JUnit prima te testen.

Tapestry is over het algemeen makkelijk te testen. Je kunt zonder een container de pagina’s in een browser previewen en krijgt duidelijke, uitgebreide foutmeldingen met regelnummer, ook als het gaat om fouten in de interface. Om de business logica te testen is er een module meegeleverd die een implementatie klasse maakt van de abstracte page class welke vervolgens met JUnit getest kan worden.

Navigatie

Navigatie is een belangrijk aspect wanneer je het hebt over webapplicaties. De page flow is bij JSF gedefinieerd in een configuratiebestand op een soortgelijke manier als we van Struts gewend waren. Dit is mede de verdienste van Craig McClanahan, de geestelijk vader van het Struts framework. Hij heeft geholpen bij de opzet van JSF.

Tapestry stuurt deze flow aan vanuit de page class middels de zogeheten RequestCycle.

Componenten

Tapestry beschikt over een groter aantal standaard meegeleverde componenten en validatieregels dan JSF en het is gemakkelijker om eigen componenten te ontwikkelen. In JSF moeten componenten toch vooral door leveranciers geleverd worden. Steeds meer leveranciers komen echter met hun eigen implementatie van JSF, waardoor de diversiteit en keuzemogelijkheden in ieder geval zullen toenemen.

Uitbreidbaarheid

Tapestry biedt enkele handvatten met betrekking tot de vormgeving van componenten waardoor uitbreidingen eenvoudig te maken zijn. Tapestry ondersteunt hierdoor tevens meerdere browsers. JSF heeft deze ondersteuning niet, men dient vormgeving en overige frontend functionaliteit zelf te implementeren in zijn eigen componenten, wat soms een flinke klus kan zijn. ADF Faces, de JSF implementatie van Oracle, garandeert echter ondersteuning voor alle versies van de belangrijkste browsers.

Procesmodel en eventhandling

JSF heeft een generiek procesmodel dat geheel flexibel gebruikt kan worden. Processtappen kunnen eenvoudig overgeslagen worden. Tapestry heeft een meer op het doel toegesneden model met meerdere implementaties, die daardoor efficiënter en overzichtelijker is, maar minder eenduidig en toegankelijk.

Het event handling mechanisme in JSF werkt goed voor applicatie event-logica. Tapestry biedt hier zowel een paginaspecifiek als een applicatie-scoped mechanisme voor.

Expression language

JSF en Tapestry maken beide gebruik van een expression language (EL) om het benaderen van objecten en hun properties te vereenvoudigen. JSF maakt net als JSP gebruik van JSTL.

De webframeworks WebWork en Tapestry maken beide gebruik van een krachtiger EL, genaamd Object Graph Navigation Language (OGNL) Het is niet alleen mogelijk zowel getters als setters van een attribuut met één statement aan te roepen. Men kan tevens methodes aanroepen en Java code gebruiken in een OGNL expressie.

Leercurve

Mensen die veel met Struts gewerkt hebben, moeten voor zowel JSF als Tapestry even wennen aan de component gedachte. Voor mensen die nieuw zijn tot web development met Java kunnen aan de ene kant kiezen voor tool based drag-n-drop development met JSF of aan de andere kant voor eenvoudige HTML in combinatie met straight forward Java met Tapestry.

Bij Tapestry is het verstandig enig begrip van de RequestCycle te krijgen. Dit is wellicht in eerste instantie een drempel, maar op een later moment betaald zich dat zeker terug.

Qua documentatie is er meer literatuur te vinden over JSF. Let daarbij wel op dat je de juiste beschrijving bij de juiste implementatie raadpleegt. Op internet is er voor beide technieken voldoende informatie te vinden inclusief duidelijke voorbeelden.

Community

De Java Community Process(JCP) beheert alle JSR’s (Java Specification Requests). De JSF specificatie JSR252 werd goedgekeurd door de meeste grote partijen die onderdeel uitmaken van de JCP. Hiermee is de standaard voor JSF gezet.

Tapestry bouwt voort op Java standaarden. Voor web development maakt men immers gebruik van de Servlet API. Tapestry verdient als onderdeel van het Jakarta project van Apache veel aanzien. En er hebben zich inmiddel een groot aantal ontwikkelaars aangesloten bij het initiatief van Howard Lewis Ship. Het is mede te danken aan de inzet van deze Open Source community dat de verbeteringen van Tapestry4.0 zijn gerealiseerd.

Conclusie

Tapestry en JSF zijn beide component en event gebaseerde webframeworks die de productiviteit verhogen.

Tapestry is zeer geschikt om applicaties te bouwen die door webdesigners ontworpen zijn. JSF is daarentegen beter voor webapplicaties die vanuit de business ontworpen zijn en een Rich Client nodig hebben.

Voor JSF is het noodzakelijk een goede toolkit aan te schaffen. Voor Tapestry kan volstaan worden met een Eclipse plug-in.

Open Source initiatieven zijn een voedingsbodem voor de verschillende JSR’s. En deze initiatieven bouwen zelf weer voort op de aanwezige standaarden. Zolang er ruimte voor verbetering is, zal deze wederzijdse afhankelijkheid blijven bestaan en kunnen ontwikkelaars daar de vruchten van plukken.

Links

 

Over de auteurs
Wietjenk Traast is een J2EE consultant met ruime ervaring op het gebied van object georiënteerde ontwikkeling en ontwerp in enterprise omgevingen. Hij is een voorstander van Open Source initiatieven die innovatief bijdragen aan de eenvoud van progammeren.

Arianne van den Berg is senior Oracle/Java consultant en heeft ruim 10 jaar ervaring in de IT. Ze heeft zich vanuit een Oracle developer achtergrond ontwikkeld richting Java technologie en is de afgelopen twee jaar werkzaam in J2EE ontwikkelprojecten.

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.