Rapport Widgets, Gadgets en Portaltechnologie

advertisement
indi-2009-11-012
Rapport Widgets, Gadgets en
Portaltechnologie
Project
Projectjaar
Projectmanager
Auteur(s)
Opleverdatum
Versie
:
:
:
:
:
:
SURFworks / Proof of Concept Collaboration Infrastructure
2009
Frank Pinxt
Wouter Meijers, Paul van Dijk, Niels van Dijk
30 oktober 2009
1.0
Samenvatting
Met de Proof of Concept Collaboration Infrastructure, waar dit rapport deel van
uit maakt, wil SURFnet een samenwerkingsomgeving realiseren die zich
onderscheidt van andere alternatieven doordat er gebruik gemaakt wordt van
open standaarden en waarbij federatieve ontsluiting een voorwaarde is voor
koppelen van diensten.
Om tot een keuze te komen voor de toe te passen technologie voor de
gebruikersinterface is er in het project onderzoek gedaan naar Widget- en
Portaltechnologie.
Het rapport beschrijft de verschillende technologieën en geeft een advies voor
het vervolg van het project
Voor deze publicatie geldt de Creative Commons Licentie “Attribution-Noncommercial-Share Alike 3.0
Netherlands”. Meer informatie over deze licentie is te vinden op
http://creativecommons.org/licenses/by-nc-sa/3.0/nl/
Colofon
Programmalijn
Onderdeel
Activiteit
Deliverable
Toegangsrechten
Externe partij
:
:
:
:
:
:
Proof of Concept
Collaboration Infrastructure
5.2
Rapport Widget en portaltechnologie
publiek
Everett
Dit project is tot stand gekomen met steun van SURF, de organisatie die ICT
vernieuwingen in het hoger onderwijs en onderzoek initieert, regisseert en stimuleert door
onder meer het financieren van projecten. Meer informatie over SURF is te vinden op de
website (www.surf.nl).
4 dingen die je moet weten over het Rapport Widgets, Gadgets en
Portaltechnologie
Context
Het rapport maakt deel uit van de Proof of Concept Collaboration
Infrastucture. In deze Proof of Concept worden technologieën
beproefd die in de toekomst mogelijk gebruikt kunnen worden bij de
ontwikkeling van een nieuwe SURFnet samenwerkingsomgeving.
Wat is het?
Het rapport beschrijft verschillende technologieën die beschikbaar zijn
op het gebied van gebruikersinterfaces en geeft een advies voor de
toe te passen technologie in een nieuwe samenwerkingsomgeving.
Voor wie is het?
Het rapport is in eerste instantie bedoeld voor de projectgroep en de
stuurgroep van het project Collaboration Infrastucture.
Daarnaast is het rapport geschikt als verdieping voor mensen met een
technische achtergrond die geïnteresseerd zijn in het onderwerp.
Hoe werkt het?
nvt
Wat kan je
ermee?
Achtergrondinformatie op het gebied van Widget, Gadget en
Portaltechnologie.
Extra (Bijlagen,
Thema,
Gerelateerde
thema’s)
Rapport Widgets, Gadgets en Portaltechnologie
Inhoud
1 Inleiding
6 2 Web presentatie technologieën
7 2.1 Inleiding
2.2 Web Application Frameworks (WAF)
7 10 2.2.1 Scripting
10 2.2.2 Markup Templates
11 2.2.3 Model-View-Controller Engines
12 2.2.4 Rapid Web Development Frameworks (RWD)
13 2.3 Portalservers
14 2.3.1 GUI ontwikkel functionaliteit
16 2.3.2 Integratie
16 2.3.3 Gebruikersbeheer
18 2.3.4 Portal content management
19 3 Anatomie van een portlet
22 3.1 Portal Pagina
22 3.2 Portlet Window States
23 3.3 Portlet View-Modes
24 3.4 Portlet Lifecycle
25 3.5 Portlet Application
27 3.5.1 Portlet Context
27 3.5.2 Sessies
27 3.5.3 State control; Portlet URL’s
28 3.5.4 Events
28 3.5.5 Publieke renderparameters
29 3.5.6 Resource
30 3.5.7 Filters
31
4 Portal Standaarden
4.1 Java Portlet Specification
32 32 4.1.1 JSR 168
32 4.1.2 JSR 286
32 4.1.3 Samenvatting
32 4.2 4.2.2 Web Services for Remote Portlets (WSRP)
Samenvatting
34 39 4.3 Microsoft Sharepoint
40 4.4 Gadgets en Widgets
40 4.4.1 Wat is een Gadget?
40 4.4.2 Gadgets API
41 4.4.3 OpenSocial
42 4.4.4 Gadgets Veiligheid
43 4.4.5 Samenvatting
45 4.5 Gadgets en Portalen combineren
5 Functionele eisen
45 47 5.1 Requirements
47 5.2 Technologiemapping
48 6 Conclusie
49 1
Inleiding
SURFnet heeft een missie en een sterke traditie om instellingsoverstijgende
samenwerking mogelijk te maken. Met de Proof of Concept Collaboration Infrastructure,
waar dit rapport onderdeel van uit maakt, wil SURFnet een samenwerkingsomgeving
realiseren die zich onderscheidt van andere alternatieven doordat er gebruik gemaakt
wordt van open standaarden en waarbij federatieve ontsluiting een voorwaarde is voor
het koppelen van diensten.
Omdat innovatie tot de core-business van SURFnet behoort, is het noodzakelijk om een
platform te creëren waarop in snel tempo innovatieve ontwikkelingen kunnen worden
uitgeprobeerd. Dit betekent ook dat het mogelijk moet worden om bèta functionaliteit in
een vroeg stadium op dit platform aan te kunnen bieden, tegelijkertijd betekent dit dat
een dergelijk platform niet tegemoet zal komen aan de eisen van Operational Excellence
die aan SURFnet diensten gesteld worden.
Het platform moet een showcase vormen voor innovatieve samenwerking, federatieve
authenticatie en multimedia technologie voor onderzoek en onderwijs.
Om tot een keuze te komen voor de toe te passen technologie voor de
gebruikersinterface zal er in het project onderzoek gedaan worden naar Widget- en
Portaltechnologie. De belangrijkste functionele wens in dit onderzoek is het in samenhang
kunnen presenteren van diensten (services) van zowel SURFnet, instellingen als ook
diensten van derden.
Omdat portal techniek hiervoor de meest geschikte oplossingrichting lijkt, wordt gekeken
naar de technologieën die hiervoor beschikbaar zijn en wat de voor en nadelen van de
verschillende mogelijkheden zijn. Het Collaboration Infrastructure rapport geeft daarnaast
aan dat het een goed idee is om technologie te kiezen die het ook voor derden mogelijk
maakt delen hiervan te consumeren, door voor een oplossing op basis van open
koppelvlakken te kiezen.
In hoofdstuk 1 van dit rapport wordt een overzicht gegeven van de verschillende web
presentatie technologieën, vervolgens gaat hoofdtuk 2 dieper in op de anatomie van een
portlet.
In hoofdstuk 5 worden de verschillende Portal standaarden besproken. De functionele
eisen vanuit SURFnet aan een portalomgeving worden in hoofdstuk 6 opgesomd,
daarnaast is in hoofdstuk 6 een vergelijking van de verschillende technologieën
opgenomen. Het rapport eindigt in hoofdstuk 6 met een conclusie en aanbevelingen voor
toepassing bij de inrichting van een SURFnet Collaboration Infrastructure.
6/52
2
Web presentatie technologieën
2.1 Inleiding
Web presentatietechnologie is er in vele soorten en maten. Met de opkomst van “web
2.0” is er met name aan de browserkant het nodige aan het veranderen. Was “vroeger”
de browser niet meer dan een passieve applicatie voor HTML rendering waarbij de
opmaak (pagina inhoud en lay-out) volledig door de server werd bepaald, tegenwoordig is
het mogelijk om op basis van verschillende technologieën de browser een meer
intelligente en dynamische dialoog met de gebruiker te laten voeren. De focus verschuift
hiermee van “server side” opmaak naar “client side” opmaak. Onderstaande figuur toont
een generieke architectuur op hoofdlijnen voor web presentatie:
Figuur 1: Web presentatie architectuur
In deze figuur onderscheiden we een viertal punten waar presentatietechnologie een rol
speelt:
A. De gebruiker is in het bezit van in toenemende mate intelligente browsers met
standaard ondersteuning voor web 2.0 gerelateerde technologie zoals AJAX, Java
Plugins, Javascript, Flash, built-in RSS, HTML 5, etc. Document [1, Collaboration
Infrastructure] geeft hiervan een redelijk uitgebreide beschrijving, inclusief relevante
standaarden. Dit rapport gaat hier verderop nog summier op in, met name waar het
de relatie betreft met server-side componenten;
7/52
B. Web Applicatie Frameworks (WAF) werken nauw samen met de web server voor
het produceren van web content. Een van de oudste en meest bekende varianten
hiervan is het Common Gateway Interface (CGI), dat dateert uit begin van de jaren
90 en het mogelijk maakt om via een API “eigen code” te laten executeren door de
Web Server. Het CGI (en al zijn varianten zoals SCGI, FastCGI, Apache Modules,
NSAPI, ISAPI) zijn inmiddels volledig uitontwikkelde standaarden die door de meeste
web servers in de een of andere vorm worden ondersteund. Web ontwikkelaars
gebruiken in de praktijk vrijwel nooit deze “low-level” web server API’s maar maken
gebruik van open standaarden die in de loop der tijd bovenop deze CGI API’s zijn
ontwikkeld. Voorbeelden hiervan zijn:
a.
Java Servlet API, (JSP);
b.
Java Server Faces (JSF);
c.
Struts;
d.
Spring;
e.
Cold Fusion;
f.
Web Server scripts (PHP, Python, Perl);
g.
ASP, ASP.Net;
h.
...
Met de opkomst van de “web 2.0” hype zijn er aan de server kant meer en meer
volwaardige applicatie frameworks ontstaan waarmee ontwikkelaars redelijk
eenvoudig dynamische web applicaties kunnen ontwikkelen. Voorbeelden hiervan zijn:
a. WebObjects (Apple);
b.
Ruby On Rails;
c.
OpenACS;
d.
Apache Tapestry;
Naast deze specifiek op software ontwikkeling toegespitste systemen is er
tegenwoordig sprake van de opkomst van een groeiende groep content management
gebaseerde frameworks met zeer uitgebreide presentatie en distributie faciliteiten.
Deze frameworks leunen qua functionaliteit aan tegen portalen, alhoewel ze meestal
het gepersonaliseerd aanbieden van content elementen (“portlets”) op basis van
gebruikersrollen [nog] niet ondersteunen. De CMS frameworks zijn met name sterk
als het gaat om het flexibel ontsluiten van informatiebronnen, het combineren van
informatie en het aggregeren ervan. Voorbeelden in deze categorie zijn:
a. Drupal;
b.
Alfresco;
c.
Acquia (“commerciële versie” van Drupal);
d.
SpringSource;
e.
WordPress;
f.
Joomla!;
In het algemeen kunnen WAF’s worden opgesplitst in een viertal categorieën:
1) Scripting;
2) Markup Templates;
8/52
3) Model-View-Controller engines;
4) Rapid Web Development Frameworks;
Deze vier categorieën zullen in een volgend hoofdstuk in meer detail worden
besproken.
C. Portalservers zijn in principe WAF’s van het Model-View-Controller type1. Een
Portalserver doet aan content aggregatie en presentatie en doet dat vervolgens ook
nog op een gepersonaliseerde wijze. Hiertoe dient de portal te weten wie de
gebruiker is, wat de gebruiker mag en wat hij/zij wil. Portalen zullen daarom altijd
nauw integreren met een authenticatie en autorisatie oplossing en met een repository
voor accountadministratie. Een portal breekt zijn web pagina’s op in “templates” met
daarop “regions” (coördinatensystemen op de pagina). Binnen een region kunnen
“portlets” worden geplaatst. Elke portlet is verantwoordelijk voor het genereren van
HTML “fragmenten”. De portlet wordt daartoe door de portalserver aangeroepen op
het moment dat een pagina moet worden opgebouwd. Voor een meer gedetailleerd
overzicht van de structuur van een portalpagina, zie hoofdstuk 3.
De taak van de portalserver is:
a. Bepaal de gebruikersrollen op basis van authenticatiegegevens;
b.
Bepaal de noodzakelijke pagina instantie op basis van de gebruikersrollen en
de door de gebruiker ingevoerde URL;
c.
Bepaal de lijst met portlets op de pagina op basis van de instantie en de
gebruikersrollen;
d.
Draag elke portlet op om HTML fragmenten te genereren;
e.
Bouw de complete pagina op, op basis van de template gegevens in
combinatie met de gegenereerde HTML van de portlets;
f.
Lever de gegenereerde pagina af bij de gebruiker;
Portalservers maken het mogelijk om een complexe, gepersonaliseerde web site te
bouwen met minimale ontwikkelinspanningen (aannemende dat alle noodzakelijke
portlets aanwezig zijn). De portal administrator kan in het algemeen via een
beheerdersdashboard simpel pagina templates aanmaken, deze koppelen met
“thema’s” (die de algemene look-and-feel bepalen) en er portlets op plaatsen door
deze uit een lijst te selecteren. Voor elke pagina en portlet wordt tevens aangegeven
bij welke gebruikersrol (of rollen) deze horen. Tevens kan worden vastgelegd of en in
welke mate, de gebruiker “zijn” portal pagina kan aanpassen. Hoofdstuk 2.3 gaat
dieper in op de technologie achter portalservers.
D. Alhoewel de bedrijfslogica van een web applicatie in principe geen “eigen”
presentatielaag bezit, kan het nodig zijn dat op dit niveau kennis aanwezig is van de
gebruiker en het gebruikte presentatiekanaal. Op deze manier kan de applicatielogica
op correcte wijze rekening houden met rollen en rechten (wat mag/moet deze
specifieke gebruiker te zien krijgen) en met de mogelijkheden van het kanaal (bv.
breedband Internet kent veel meer en rijkere presentatietechnieken dan een mobiele
telefoon of PDA). Anders dan authenticatie en autorisatiestandaarden zijn voor het
doorgeven van kanaaleigenschappen geen marktstandaarden aanwezig. Hiervoor zal
zelf een oplossing moeten worden bedacht (bv. door kanaaleigenschappen mee te
geven naar de achterliggende applicaties, of door deze beschikbaar te stellen via een
1
Het “Model” is de content en applicatie-informatie die door de portlets worden ontsloten. De “View”
wordt gevormd door de pagina templates en portlets en de “Controller” is de Portalserver “engine”
waarmee de pagina’s daadwerkelijk worden opgebouwd.
9/52
z.g. “kanaalprofiel” (te vergelijken met een “gebruikersprofiel” maar dan voor de
combinatie communicatiekanaal/device/presentatiesoftware).
In de praktijk zien we dat de applicaties in het algemeen generieke XML berichten
genereren die vervolgens door de presentatielaag (B of C) wordt gerendeerd in een
kanaalspecifiek formaat (op basis van de HTTP sessiegegevens). Dit kan inhouden dat
voor bv. mobiele techniek er veel informatie uit het XML bericht zal worden
genegeerd of op andere manier wordt geïnterpreteerd. De applicaties dienen bij het
genereren van de berichten in het algemeen rekening te houden met de
gebruikersgegevens. Voor het uitwisselen van deze gebruikersgegevens zijn diverse
mogelijkheden, waarbij de eenvoudigste bestaat uit het doorgeven van de gebruikersidentifier. Daarnaast bestaan diverse Web Service standaarden zoals WS-Security en
SAML die kunnen worden gebruikt voor het uitwisselen van gebruikerscredentials
tussen applicaties en/of services.
Figuur 1 toont tevens hoe in het algemeen de beveiliging van web applicaties wordt
geregeld. Hiertoe wordt de web server voorzien van een stukje software, het “Policy
Enforcement Point” (PEP), waarmee kan worden gecontroleerd of de gebruiker toegang
heeft tot de door deze gebruiker gevraagde URL. Hiertoe onderschept de PEP elke URL
aanvraag en laat hij hier een “security policy” op los. Dit kan variëren van een eenvoudige
lokale gebruikersnaam/wachtwoord check tegen een bestandje met toegestane
gebruikers tot een verificatie tegen een separate “Authentication, Authorization &
Accounting” (AAA) server met gefedereerde authenticatie en geïntegreerde Identity
Management oplossing. Belangrijk om te realiseren is dat de beveiligingsoplossing
tegenwoordig in het algemeen onafhankelijk is van de overige technologie componenten.
De PEP is een “plugin module” voor de betreffende web server of portalserver en er kan
worden gekozen uit meerdere mechanismen. Alle zijn ze in principe transparant voor de
presentatieomgeving: uiteindelijk zal er na succesvolle authenticatie sprake zijn van een
HTTP sessie waarbinnen de identiteit van de gebruiker beschikbaar is voor componenten
die daarin geïnteresseerd zijn. Daadwerkelijke implementatie van security over web
servers, portalen, service landschappen en applicaties valt buiten de scope van dit
rapport.
2.2 Web Application Frameworks (WAF)2
Zoals in het vorige hoofdstuk is vermeld kunnen we op het gebied van WAF’s onderscheid
maken tussen een viertal categorieën:
1) Scripting;
2) Markup Templates;
3) Model-View-Controller engines;
4) Rapid Web Development Frameworks;
2.2.1
Scripting
Het “scripten” van web applicaties is nog steeds een van de meest gebruikte technieken
voor het ontwikkelen van dynamische web applicaties. Hierbij wordt gebruik gemaakt van
een web server “plugin” component waarbinnen programmacode wordt uitgevoerd. Voor
het schrijven van de code wordt gebruikgemaakt van een van de vele “script talen” die
2
Bij het uitwerken van dit hoofdstuk is o.m. gebruik gemaakt van het Burton Group rapport “Web
Application Frameworks: Evolving to support the Interactive Web”, door Richard Monson-Haefel,
Versie 1.0, April 16,2007.
10/52
hier in de afgelopen jaren voor zijn ontwikkeld. De meest populaire smaken zijn PHP, Perl,
Python, Ruby en ECMAScript/Javascript. De laatste wordt meestal ingezet voor “browserside” scripting, maar het is ook mogelijk om Javascript aan de server kant uit te laten
voeren.
Bij “scripting” wordt de source code direct door de web server geïnterpreteerd en
uitgevoerd. De huidige stand van techniek is daarbij dusdanig dat vrijwel geen
performance bottlenecks meer bestaan. Net als bij Java wordt het script eerst vertaald
naar een binaire code die efficiënt kan worden uitgevoerd. Deze “just-in-time”
compilatietechniek is onzichtbaar voor de ontwikkelaar en levert flinke
performancewinsten op. Script talen, met name de recente zoal Ruby, zijn daarnaast
vrijwel net zo krachtig als de “hogere programmeertalen” zoals Java, C/C++ of C#.
Het grote voordeel van scripting is dat de talen verregaand zijn uitontwikkeld en er een
zeer ruime ondersteuning in de vorm van ontwikkelgereedschappen en
componentenbibliotheken voor bestaat.
Als nadeel kan worden genoemd dat het bouwen van een complexe web applicatie op
basis van scripts toch redelijk veel specialistische kennis vraagt. Vrijwel elk aspect van de
applicatie dient zelf te worden uitontwikkeld, hetgeen ontwikkelaars vraagt die goed thuis
zijn met de gekozen taal en de daarbij behorende componentenbibliotheken (als gevolg
van de grote keuze is dit veelal een kwestie van “bomen en bos”). Voor redelijk “platte”
web sites waarbij het gedrag vrijwel onafhankelijk is van de identiteit van de gebruiker is
het gebruik van scripts nog steeds een goede optie.
2.2.2
Markup Templates
Markup is het gebruikmaken van speciale “tag libraries” waarmee in principe de
functionaliteit van de HTML opmaaktaal wordt uitgebreid. Door middel van tags kan je in
feite “programmeren in HTML”. De nieuwe tags worden in veel gevallen gebruikt voor het
activeren van stukjes script taal. Beide oplossingen liggen dus dicht bij elkaar.
Alhoewel de basisgedachte in alle gevallen gelijk is, is de invalshoek een beetje
verschillend afhankelijk van de gekozen markup variant. Zo maakt bv. ColdFusion gebruik
van een combinatie van standaard HTML met specifieke tags, maakt JSP gebruik van
eXtensible HTML (XHTML) waarbinnen een aparte XML namespace wordt gebruikt voor
het opnemen van Java code binnen de pagina’s. Tenslotte kent Microsoft met zijn ASP
een technologie waarbij in het geheel geen HTML meer gebruikt wordt en de pagina’s in
principe XML objecten zijn (Microsoft Extensible Application Markup Language, XAML).
In sommige gevallen zijn de tags (de feitelijke markup) en de bijbehorende code (scripts)
gescheiden. In andere gevallen zitten beiden in dezelfde pagina. En tenslotte zijn er
combinaties mogelijk.
Voordeel van Markup templates is de eenvoud en het feit dat er vrijwel niet
geprogrammeerd hoeft te worden. Nadeel is dat het mechanisme al snel neigt naar het
vermengen van applicatie met presentatie waarmee een onontwarbare kluwen ontstaat
van presentatie componenten (HTML) en code (scripts en tags). Markup templates alleen
zijn daarom niet aan te raden voor grote, complexe projecten. Het is wel mogelijk om
markup templates te gebruiken in combinatie met een model zoals MVC (zie volgende
hoofdstuk). In dat geval bevat de HTML alleen de tags en wordt de code door het model
afgehandeld.
Een aantal voorbeelden van markup:
Markup framework:
Voor taal:
JSP
Velocity
FreeMarker
Smarty
Java
Java
Java
PHP
11/52
The Template Toolkit (T2T)
Perl SSI
ASP
ColdFusion
2.2.3
Perl
Perl
VBScript
CFML
Model-View-Controller Engines
Het Model-View-Controller (MVC) pattern is een veelgebruikte manier om onderscheid te
maken tussen bedrijfslogica (het “Model”), de manier waarop deze logica communiceert
met eindgebruikers over verschillende presentatiekanalen (de “View”) en de wijze waarop
de dialoog met de gebruiker wordt gevoerd in de tijd (de “Controller”). MVC maakt het
mogelijk om deze drie aspecten onafhankelijk van elkaar te ontwikkelen en is dan ook de
basis voor complexe presentatieomgevingen waarbij complexe functionaliteit moet
worden aangeboden aan grote gebruikersgroepen over meerdere kanalen.
Modellen hebben in het algemeen de vorm van informatie (bv. een view op data in een
database) of ze representeren bedrijfsobjecten met bijbehorende state. Modellen zijn
prima te implementeren op basis van services.
Views nemen meestal de vorm aan van markup templates, waarbinnen zich properties
bevinden die een relatie hebben met properties van modellen. De presentatiecode van
een View is verantwoordelijk voor het transformeren van Model data op basis van het
markup template. De meest populaire technologie hiervoor is XSL(T).
Controllers zorgen voor het toekennen van de juiste View aan het juiste Model op basis
van de gebruikersdialoog. Controllers dragen daarnaast ook zorg voor bv. validatie.
MVC is een krachtige technologie, maar vereist wel goede basiskennis van de gebruikte
frameworks. Implementatie is complex, maar zeer flexibel. De meeste MVC frameworks
zijn volwassen en goed uitontwikkeld.
Een aantal voorbeelden van populaire MVC engines:
MVC framework:
Voor taal:
Struts
Java
JSF
Java
Spring Web MVC
Java
Apache Tapestry
Java
Zope
Python
Php.MVC
PHP
Catalyst
Perl
Maypole
Perl
ASP.Net
Microsoft Common Language Runtime (CLR)
MVC engines zijn de beste keus voor het ontwikkelen van grotere, complexere web
applicaties. De technologie kan ook op kleinere schaal worden ingezet om bv. binnen een
portalomgeving de content voor één of meerdere portlets te verzorgen. Veel portal
engines bieden dan ook MVC patterns aan als ontwikkelomgeving voor het ontwikkelen
van portlets.
De Portalservers zelf vormen eveneens een specifieke vorm van MVC engines. In een
portal wordt de Controller gevormd door de portalserver zelf. De Views zijn de display
elementen die de betreffende portalserver kan aanbieden, zoals bv. Portlets. De
applicaties en databronnen die door de portal worden ontsloten vormen het Model.
Portalen verdienen door hun complexiteit en gebruik een eigen hoofdstuk. Zie dan ook
hoofdstuk 2.3 voor verdere details.
12/52
2.2.4
Rapid Web Development Frameworks (RWD)
Het ontstaan van de Ruby scripttaal in combinatie met het Rails ontwikkelplatform leidde
tot een geheel nieuwe categorie van MVC engines. Ruby on Rails richt zich vooral op het
zeer snel ontwikkelen van data-driven applicaties waarbij uitgegaan wordt van een aantal
afwijkende principes. Een belangrijk uitgangspunt is dat slechts minimale configuratie
nodig is en dat zoveel mogelijk automatisch wordt gegenereerd (bv. namen van
componenten afgeleid van de onderliggende data entiteiten).
RWD frameworks genereren grote delen van de applicatie uit de onderliggende database
schema’s. Zo worden bedrijfsobjecten waarmee de data kan worden gemanipuleerd
afgeleid van de data schema’s. View en Controller objecten worden vervolgens weer
afgeleid van deze bedrijfsobjecten.
RWD is met name interessant voor generieke, data-gestuurde, applicaties. De krachtige
scripttalen en bijbehorende ontwikkelomgevingen leiden snel tot resultaat en vereisen
geen diepgaande technische kennis. Kennis van de datamodellen en het oplossingsdomein
is uiteraard wel van groot belang.
RWD’s zijn relatief jong en de toepassing is redelijk specialistisch. Echter, veel van de
huidige web applicaties kunnen op de een of andere manier toch vaak gekarakteriseerd
worden als een “data gestuurde” applicatie waarbij informatie uit één of meerdere
databases wordt gelezen, gemuteerd en/of aangevuld en vervolgens opgeslagen.
Een aantal voorbeelden van populaire RWD’s:
RWD:
Voor taal:
Ruby on Rails
Django
TurboGears
CakePHP
Symfonie
Trails
Java on Sails
Groovy on Grails
Castle MonoRails
Ruby
Python
Python
PHP
PHP
Java
Java
Groovy (Java)
C# en Mono
13/52
2.3 Portalservers
Zoals eerder al aannemelijk is gemaakt, is
een portal eigenlijk een vorm van een
“Enterprise Model-View-Controller”
implementatie zoals hiernaast in de figuur
nogmaals wordt getoond. De portalserver
vervult hierbij de rol van “Controller” en
bepaalt welke informatie wordt getoond
afhankelijk van het “klikgedrag” van de
gebruiker (menu items, tabbladen of
elementen binnen een pagina). Het “Model”
omvat het servicelandschap van de
organisatie (content en applicatie services)
en de pagina’s met de daarop geplaatste
functionele componenten, de “portlets”,
vormen samen de “View” op dit landschap.
Het doel van een portal is om gebruikers
toegang te geven tot informatie (in de
ruimste zin des woord), op een veilige en
Figuur 2: Portal als MVC
gepersonaliseerde wijze en via mogelijk
verschillende afleverkanalen. Portalen maken
dit mogelijk door implementatie van een aantal technologieën:
 Portalen hebben de identiteit van de gebruiker nodig. Elk portal biedt daartoe
authenticatievoorzieningen die deze identiteit vaststellen en vervolgens koppelen aan
een verzameling van portal “rollen”. Bij deze rollen horen “rechten”. De identiteit kan
worden bepaald op basis van een simpel gebruikersnaam/wachtwoord binnen de
portal, maar ook worden gedelegeerd aan een aparte authenticatie service, al dan
niet opgenomen binnen een federatieve omgeving. Het is vervolgens de taak van
deze externe authenticatie service om bv. de “federatieve identiteit” (waarvan de
gebruiker er mogelijk meerdere kan hebben) af te beelden op de “portal identiteit”
(waarvan de gebruiker er maximaal één per ingelogde sessie mag hebben);

De portal rollen en rechten zijn gekoppeld aan pagina’s maar ook aan elementen op
die pagina. Elke pagina wordt specifiek opgebouwd volgens het stramien wat daartoe
vooraf door de beheerder(s) is opgesteld. In principe kan elke gebruikersrol zijn
gekoppeld aan compleet verschillende paginastructuren met verschillende content;

Portalen maken gebruik van “templates” en “skins” (of “themes”) voor constructie van
de pagina. De “template” bevat de structuur, de “skin” de stijl (kleuren, fonts).
Beiden zijn rol afhankelijk. De beheerder kan nieuwe templates en skins maken
zonder daarvoor programmeerkennis nodig te hebben;

Portalen maken gebruik van losse componenten, de “portlets”, voor het tonen van
content en voeren van gebruikersdialoog. De portal verzorgt zelf de navigatie (op
basis van specifieke “navigatie portlets”). Door deze tweedeling hoeft de portlet
ontwikkelaar zich niet druk te maken over de pagina waarop de portlet uiteindelijk
wordt geplaatst (sterker nog: hij mag daarover geen aannames doen). Portalen
kennen dus een strikte scheiding tussen “vorm” en “functie”;
14/52

Portalen maken het mogelijk dat een geauthenticeerde gebruiker zelf zijn eigen
pagina’s samenstelt door te kiezen uit een vooraf, op basis van de gebruikersrollen,
vastgestelde lijst met portlets. Daarnaast kan de gebruiker eventueel kiezen uit
verschillende templates en skins om daarmee de pagina naar eigen wens te kunnen
aankleden. Dit staat bekend als “customisation” of “voorkeurinstellingenbeheer”;

De beheerder kiest voor een bepaald paginastramien en plaatst vooraf portlets op de
pagina’s. Hij kan ervoor kiezen om de gebruiker deze indeling te laten wijzigen, of hij
“bevriest” juist bepaalde structuren. Dit op basis van de gebruikersrollen vooraf
vastleggen van structuur en content heet ook wel “statische personalisatie”;

Geavanceerde portalen maken gebruik van het gebruikersprofiel (verzameling van
attributen waarmee de gebruiker op unieke wijze wordt beschreven), in combinatie
met content classificatiemodellen en bedrijfsregels om de content die de gebruiker te
zien krijgt dynamisch (dus tijdens de sessie) te wijzigen. Dit heet “dynamische
personalisatie” en wordt vaak gebruikt bij e-commerce sites om op basis van het
koopgedrag van de gebruiker, in combinatie met het koopgedrag van aan hetzelfde
kopersprofiel beantwoordende gebruikersgroepen, bepaalde producten extra onder de
aandacht te brengen of juist niet [meer] te tonen;

De daadwerkelijk aan de gebruiker aangeboden functionaliteit (content, applicaties)
wordt geleverd door een mechanisme van “portlets”. Dit zijn “brokjes functionaliteit”
die alleen of met groepen op een pagina zijn te plaatsen. De portlet code kan door
middel van standaard applicatie-interfaces zoals gedefinieerd door de JSR-168 en
JSR-286 standaarden, communiceren met de portalserver. De portalserver heeft
totaal geen invloed op de wijze waarop de portlet aan zijn informatie komt en hoe dit
wordt vertaald naar HTML. Er zijn in principe slechts twee “contracten” tussen de
portalserver en de portlet:
o
Actie – de gebruiker heeft op een URL geklikt (bv. button of hyperlink) die is
gekoppeld aan de portlet. Het is nu de taak van de portlet om zijn “state” bij te
werken. Als voorbeeld valt te noemen het klikken op een “submit” knop op een
door de gebruiker ingevuld formulier. De portlet ontvangt dit formulier via de
portal interface en verwerkt de inhoud. Dit kan resulteren in een nieuw
formulier (bv. “volgende pagina”) of bv. een fout op het bestaande formulier
(velden niet goed ingevuld). Hoe het formulier wordt gevalideerd en welke
[externe] informatiebronnen de portlet hiervoor gebruikt is “onzichtbaar” voor
de portalserver;
o
Render – Per pagina roept de portalserver slechts maximaal één keer een
“Actie” aan (er kan tenslotte maar op één link tegelijk worden geklikt). Als deze
actie is afgerond wordt voor elke portlet op de pagina het Render contract
uitgevoerd. De portlet wordt hiermee “uitgenodigd” om nieuwe HTML code te
genereren. De portalserver verzamelt deze HTML code van elke portlet en
bouwt daarmee de complete pagina op. Pas als ook de laatste portlet zijn HTML
heeft teruggegeven gaat de pagina naar de gebruiker;
In de volgende hoofdstukken wordt op de verschillende aspecten van de portalserver
nader ingegaan waarbij wordt gewezen op standaarden indien aanwezig.
15/52
2.3.1
GUI ontwikkel functionaliteit
Er is niet zoiets als een “standaard GUI functionaliteit” in de gemiddelde portalserver.
Echter, de algemene tendens voor het gros van de portalservers is dat pagina templates
worden gebouwd volgens de Java Server Pages (JSP’s) standaard. Elke portal heeft zijn
eigen administratie interface waarmee de pagina’s “in elkaar worden geklikt”. De pagina
fragmenten zijn in het algemeen zelf op te zetten in de vorm van JSP fragmenten. Dit
maakt het bv. mogelijk om standaard Javascript op te laten nemen in de door de portal
gegenereerde pagina’s.
Of, en op welke wijze, een portal een bepaalde ontwikkelfunctionaliteit ondersteunt is
zeer portal specifiek. Er zijn op dit gebied geen echte standaarden, anders dan Java, wat
de de-facto standaard is voor vrijwel elke portalserver.
De pagina bestaat vaak uit een “stramien” (of “template”) met daarbinnen verschillende
“zones” (of “gebieden”). Binnen zo’n zone is het vervolgens mogelijk om portlets te
plaatsen. Op die manier wordt de pagina interactief opgebouwd door te kiezen uit een
palet van aanwezige portlets. Het resultaat is in veel gevallen een JSP pagina. Het
mechanisme is altijd “des portalen” waarbij de moderne portalen een schat aan direct
plaatsbare componenten bieden. Een goed voorbeeld is het Liferay open source portal
(www.liferay.com). Liferay is een compleet ontwikkelraamwerk waarbij gekozen kan
worden om in Java te werken (alle gangbare standaarden worden ondersteund) of om
portlets te bouwen m.b.v. Ruby, PHP, Python of Groovy.
De oudere generatie portalen ondersteunden uitsluitend “server-side” processing, met
andere woorden: alle wijzigingen op de pagina werden vanaf de server gerealiseerd
d.m.v. complete re-render van de pagina. Tegenwoordig zie je meer en meer
ondersteuning van AJAX direct vanuit de portal (een verplichting voor portalen met JSR286 ondersteuning) waardoor een portlet alleen zichzelf kan verversen, zonder dat de rest
van de pagina opnieuw hoeft te worden opgebouwd. Zie hoofdstuk 4.1.2 voor meer
details inzake JSR-286.
2.3.2
Integratie
Portalen bevatten “van zichzelf” in principe geen informatie en integreren dan ook niet
met applicaties. De enige integratiekoppelingen zijn die met de security omgevingen
waarbij elk portal minimaal LDAP ondersteunt voor opvragen van accountgegevens. Veel
portalen hanteren hierbij een eigen LDAP schema (waarbij bestaande schema’s worden
uitgebreid of er zelfs een apart schema naast de eventueel bestaande schema’s wordt
opgebouwd). Daarnaast is in veel gevallen een relationele database noodzakelijk voor
opslag van voorkeuren, templates, sessiegegevens, configuratiegegevens, etc.
Integratie met achterliggende informatie is de
taak van de portlets. Zeker als deze worden
geschreven in Java is een zeer grote variëteit
aan componenten, technieken en standaarden
beschikbaar. Een algemeen aanvaard principe is
om gebruik te maken van een separaat ModelView-Controller model op applicatieniveau voor
de bouw van de portlets. Het “Model” is de
informatie die door de portlet moet worden
ontsloten (bv. de inhoud van een database). De
“View” is de logica van de portlet waarmee deze
informatie daadwerkelijk wordt getoond aan de
gebruiker en de “Controller” kan één van de
Figuur 3: MVC model voor portlets
16/52
populaire frameworks zijn zoals Velocity, Spring, Struts, of JSF.
Het is aan te raden om de daadwerkelijke portlet implementatie niet “dikker” te maken
dan strikt noodzakelijk. Er dient zeker geen bedrijfslogica in de portlet te worden
opgenomen. Portlets zijn strikt bedoeld voor de implementatie van gebruikersinteractie en
moeten dan ook tot dat doel beperkt blijven. Daadwerkelijke integratie met
achterliggende applicaties, processen of informatie wordt dan ook veelal geïmplementeerd
door de portlet te koppelen aan web services waarbinnen de bedrijfslogica wordt
geïmplementeerd. Uiteraard is dit geen wetmatigheid en dient de implementatie te
worden afgestemd op de specifieke situatie.
De figuur toont een typische opbouw van een portal “applicatie”, bestaande uit één of
meerdere portlets die op basis van een separate presentatielaag de informatie ontsluiten
uit een achterliggend service landschap. Hiervoor wordt gebruikgemaakt van een
presentatieframework waarmee in feite de gebruikersdialoog wordt bestuurd. De portlets
met bijbehorende presentatieservices formen de “View”, het achterliggende service
landschap het “Model” en het presentatie framework de “Controller”.
17/52
2.3.3
Gebruikersbeheer
Portalservers hebben in het algemeen een eigen gebruikersadministratie. De gebruikersidentifier (naam of anderszins) wordt daarbij gekoppeld aan één of meer rollen en op
basis van deze rollen bepaalt de portalserver welke pagina’s en welke componenten op
die pagina aan die specifieke gebruiker mogen worden getoond. Rollen komen typisch
overeen met groepen in een Directory. Elke portal heeft dan ook de optie om te kunnen
koppelen met een LDAP gebruikers directory.
Vrijwel alle portalservers bieden de
mogelijkheid om de “ingebouwde” beveiliging
op basis van een eigen database en een lokale
“gebruikersnaam/wachtwoord” policy te
vervangen door een Enterprise SSO oplossing.
Hiertoe wordt vaak gebruikgemaakt van een
“agent” dit binnen de web server wordt
geïnstalleerd en die alle binnenkomende URL
verzoeken onderschept3. De oranje
componenten in nevenstaande figuur tonen de
security componenten bij toepassing van
Enterprise SSO:
Indien de gebruiker een portal pagina opvraagt
zal de URL hiervoor in de webserver worden
onderschept door de lokale security agent, ook
wel genoemd het “Policy Enforcement Point” of
PEP. De PEP controleert of deze specifieke
gebruiker al bekend is en of de
toegangsrechten voor de pagina al eens zijn
gecontroleerd. Bij een eerste bezoek zal de
gebruiker eerst naar de login pagina worden
doorgestuurd. Deze pagina staat in principe
niet onder controle van de portalserver, maar
Figuur 4: Portalen en authenticatie
van de Authenticatie Server (onderdeel van het
oranje blok “Authentication, Authorization &
Accounting”, ook wel genoemd het “Policy
Administration Point” of PAP). De wijze van authenticeren wordt bepaald door de
opgevraagde resource (de URL) en kan variëren van eenvoudig met gebruikersnaam /
wachtwoord tot geavanceerd met 2-weg certificaten en/of tokens, of door te controleren
of de gebruiker binnen een federatieve omgeving al is ingelogd.
Uiteindelijk nemen we aan dat de authenticatie succesvol is verlopen en worden de
account gegevens gecontroleerd tegen een centrale administratieve voorziening zoals bv.
een LDAP Directory. De identiteit van de gebruiker wordt vervolgens doorgegeven aan de
portal die deze gebruikt voor het selecteren van de juiste pagina en het eventueel filteren
van de portlets op die pagina. Hiertoe maakt de portal gebruik van rollen die aan de
identiteit van de gebruiker zijn gekoppeld. Alle portal resources (pagina’s en portlets) zijn
eveneens rolgebonden waardoor de portal per individuele gebruiker een eigen pagina kan
construeren.
3
Een andere voorkomende optie is het toevoegen van een “security gateway” waarbij de aanvragen
naar de web server al voordat ze bij de server komen worden onderschept. De functionele werking is
verder gelijk.
18/52
De verantwoordelijkheid van de portalserver beperkt zich tot het selecteren van pagina’s
en portlets. Uiteraard is het daarnaast ook van belang dat deze portlets alleen de
informatie tonen die voor de betreffende gebruiker relevant is en die de gebruiker mag
zien. Het beveiliging van content is de verantwoordelijkheid van de portlet, die dit
eventueel kan delegeren naar het achterliggende servicelandschap. Hiertoe kan de portlet
de identiteit van de gebruiker afleiden uit de portlet context (de gebruikerssessie die door
portal en/of authenticatie voorziening zijn opgezet). Op basis van deze identiteit kan de
portlet zijn eigen securitychecks [doen] uitvoeren. Als de portlets communiceren via een
service architectuur met een ESB dan is het in veel gevallen mogelijk om de beveiliging
“door te trekken” tot op de ESB waarbij de middleware dan automatisch zorgdraagt voor
alle toegangscontroles “in naam van de gebruiker”. Om dit te laten werken is het dan wel
noodzakelijk dat de gebruikersidentiteit éénduidig is vastgelegd over alle aangesloten
systemen. Dit is uiteraard het eenvoudigst indien ook de applicatieomgeving
gebruikmaakt van dezelfde PAP voorziening en gebruikersadministratie als de
portalserver.
Voor een portalserver is de gebruikersidentiteit belangrijk omdat de content daarop wordt
afgestemd. In de simpelste vorm alleen de pagina’s en de daarop geplaatste portlets
maar in meer complexe omgevingen kan ook gebruik worden gemaakt van andere
gebruikersattributen zoals werkgever, universiteit, leeftijd, etc. Op basis van
bedrijfsregels in combinatie met gebruikersgegevens is het dan mogelijk om dynamisch
content te leveren. Dit noemen we “context-gestuurde personalisatie”. Hiertoe moet de
personalisatiecomponent van de portalserver toegang krijgen tot alle relevante
gebruikersgegevens. Omdat die niet altijd netjes in één directory zitten is het gebruik van
een “gebruikersprofiel service” aan te raden. Deze services zijn trouwens (net zoals
context-gestuurde personalisatie) niet standaard, ze zullen altijd op maat moeten worden
ontwikkeld. Gebruikersprofiel services zijn goed te realiseren door gebruik te maken van
Virtual Directory producten. Een Virtual Directory maakt het mogelijk om “naar de
aanvrager toe” een éénduidig LDAP schema te gebruiken, waarbij de onderdelen van dat
schema afkomstig kunnen zijn uit verschillende heterogene en mogelijk overlappende
bronnen zoals relationele databases, web services of andere LDAP directories. Omdat een
Virtual Directory zich gedraagt als een “normale” directory kan hij zondermeer worden
ingezet waar ook deze “normale” directory past.
2.3.4
Portal content management
Zoals al genoemd in hoofdstuk 2.3.2 beschikt een portal in principe zelf niet over “eigen”
data. Alles wat aan de gebruiker wordt getoond is een “portlet” en de implementatie
daarvan is buiten scope voor de portal server. Echter, met de opkomst van de
JSR-168/286 standaarden en de wijdverbreide support hiervan binnen de portal servers,
is er een groeiende verzameling standaard portlets te vinden waarmee snel een
functioneel rijke portal is te bouwen. Steeds vaker zie je bv. dat CMS systemen standaard
JSR-168 portlets beschikbaar stellen om direct content uit het CMS te tonen. Deze
portlets zullen in het algemeen dus wel “CMS-spcifiek” zijn, maar zijn portal
onafhankelijk. Daarnaast heeft elke portal server wel een eigen, proprietary, interface
voor beheer en presentatie van content, veelal uit een geïntegreerd CMS maar vaak ook
in combinatie met separate CMS platformen.
De JCR standaard (Java Content Repository) beschrijft een standaard content repository
interface voor Java. Het is dus een API (Application Programming Interface) beschrijving
en zegt niets over de structuur van de content. Veel [open source] CMS systemen
gebruiken deze standaard (bv. Magnolia, eXo JCR, Alfresco, Jeceira en Apache
Jackrabbit). Jackrabbit geldt als de “reference implementatie” van JCR. De JCR interface
is formeel vastgelegd in de Java JSR-170 standaard. De JCR interface beschouwt een
19/52
repository als een hiërarchische verzameling van abstracte “nodes” waarbij de standaard
het mogelijk maakt om deze nodes aan te maken,
te lezen, te wijzigen of te verwijderen. Zie de
figuur voor het model. Elke node heeft één of
meerdere properties die de eigenschappen van die
node beschrijven. Doordat het functionele model
wordt uitgedrukt in XML elementen is het redelijk
eenvoudig om een portlet te bouwen die een JSR170 compliant repository uitvraagt en op basis van
XSLT operaties de ontvangen content rendeert
naar een presentatievorm naar keuze.
Veel portalen ondersteunen JSR-170 tegenwoordig
direct vanuit de beheerinterface. Er kunnen dan
“on the fly” portlets worden gegenereerd op basis
QuickTime™ and a
van JSR-170 content queries. De JSR-170
decompressor
are needed to see this picture.
standaard dateert uit juni 2005 en is inmiddels
volwassen. Er bestaan redelijk veel
implementaties van. De opvolger, JSR-283, is
Figuur 5: JSR-170 functioneel model
inmiddels in de maak. Per maart 2009 bestaat
hiervan een “proposed final draft”, d.w.z. het finale
voorstel voor de standaard. Echter, gezien de recente datum en het feit dat het nog
steeds een “draft” is, kan niet verwacht worden dat op korte termijn serieuze
implementaties zullen ontstaan.
De JSR-283 standaard biedt additionele functionaliteit zoals de ondersteuning van
“workspaces” (meerdere groepen nodes met elk een eigen “root”), verbeterd beheer van
workspaces, nodes en properties en een verbeterd model voor beheer van
toegangsrechten. Alles bij elkaar biedt de JSR-283 standaard betere ondersteuning voor
grootschalig Enterprise Content Management.
Nog een interessante standaard is JSR-188. Deze standaard (uit eind 2003) is een
formele beschrijving van hetgeen ook wel bekend staat als CC/PP (Composite
Capability/Preference Profile). Het is een RDF4 (Resource Description Framework)
gebaseerd framework voor het beschrijven van de mogelijkheden van user-devices
(browsers, PDA’s, smartphones) v.w.b. de ondersteuning van rendering functionaliteit.
Kort gezegd kan CC/PP worden gebruikt om aan het portal te vertellen hoe de pagina
moet worden opgebouwd op een dusdanige wijze dat deze optimaal is afgestemd op de
functionaliteit van het apparaat waarmee de pagina wordt bekeken. In dat licht gezien is
dit dus een belangrijke standaard als het gaat om kanaalspecifieke “push” van content
naar de gebruiker.
JSR-188 gaat er vanuit dat leveranciers “device profiles” beschikbaar stellen (in RDF)
waarin de mogelijkheden van het device zijn beschreven. Vervolgens dient op de server
een JSR-188 compliant repository beschikbaar te zijn waarin deze profielen worden
geadministreerd en ontsloten. Tot slot dienen programmeurs bij het bouwen van hun
portlets gebruik te maken van de CC/PP API om op een device-onafhankelijke wijze hun
portlets te bouwen. Datzelfde geldt uiteraard ook voor de portal zelf, die uiteindelijk de
complete pagina zou moeten construeren op basis van het client device.
4
RDF is een “XML taal” voor het beschrijven van entiteiten en de verbanden tussen entiteiten. Het
wordt veel gebruikt voor het beschrijven van content classificatiemodellen en thesauri en is één van
de bouwstenen van het “semantisch web”.
20/52
Een afgeleide standaard is User Agent Profile (UAProf) van de Open Mobile Alliance
(OMA). Dit is eveneens een CC/PP gebaseerde standaard voor het vastleggen van device
profiles voor mobiele apparatuur.
Helaas is de JSR-188 standaard niet echt “aangeslagen” in de markt en is de
ondersteuning ervan binnen de portal wereld uiterst beperkt.
21/52
3
Anatomie van een portlet
Ongeacht de exacte technologie die gebruikt wordt, kennen de verschillende portal
technologieën een aantal functionele overeenkomstigheden. Dit hoofdstuk gaat in op deze
functionaliteiten aan de hand van de JSR-168/ JSR-286 specificatie. Voor andere portal
technologieën zal de terminologie wellicht wat afwijken, maar komt de functionaliteit op
hoofdlijnen overeen.
3.1 Portal Pagina
Een portal pagina heeft de volgende algemene layout:
Figuur 6: Anatomie van een portal pagina
Bovenstaande figuur toont een portal pagina met daarop een viertal portlets. Elke portlet
wordt getoond binnen een “portlet window”, gegenereerd door de portlet container. De
portlet zelf is uitsluitend verantwoordelijk voor het genereren van de “portlet fragment”,
dus de content die in het window wordt getoond. De container voegt aan dit fragment
eventueel een kader toe
Portlet Objects
alsmede “versieringen”
Portlet
Portal Page
zoals een titel en
Portlet Window 1
Portlet Window 2
verschillende knoppen. De
GenericPortlet
knoppen kunnen, in
PortletPreferences
PortletPreferences
combinatie met paginacontrol links, worden
gebruikt om portlet in- en
MyPortlet
OtherPortlet
uit te klappen en om
Portlet Window 3
additionele dialogen te
activeren (de zogenaamde
PortletPreferences
“portlet view-modes”, zie
Portlet Window 4
hoofdstuk 3.3). Al deze
extra content is ook te
onderdrukken, waarmee
een portlet een uiterlijk kan
krijgen
dat
uitsluitend wordt bepaald
Figuur 7: Portlet windows
22/52
door de door de portlet gegenereerde markup.
Een portlet kan meerdere malen voorkomen op dezelfde pagina, waarbij sprake is van
een gedeelde portlet instantie maar met unieke Portlet Windows. Een portlet window
bevat contextuele informatie die door de portlet container aan de portlet instantie
beschikbaar wordt gesteld en die de portlet onder andere dient te gebruiken om
voorkeurinstellingen van de gebruiker voor dat specifieke window in op te slaan. Deze
contextuele informatie is beschikbaar in de vorm van een “PortletPreferences” object. Op
het moment dat de portlet op een pagina wordt geplaatst wordt hieraan door de container
automatisch een preferences object toegevoegd, waarbij de default waarden worden
opgehaald uit de Portlet Deployment Descriptor. De figuur hierboven toont een tweetal
portlet instanties (“objecten”) die beide zijn geassocieerd met twee aparte portlet
windows. Portlet “OtherPortlet” bezit twee windows met elk een eigen preferences object
terwijl portlet “MyPortlet” twee windows bezit met een gedeeld preferences object. Het
beheer van “PortletPreferences” objecten is de verantwoordelijkheid van de container.
Voor de portlet instanties zijn deze associaties onzichtbaar. Als een portlet meerdere
malen binnen dezelfde pagina wordt gebruikt zal hij door de container ook meerdere
malen worden geactiveerd, één maal voor elk portlet window waarmee de portlet is
geassocieerd. De portlet instantie kan bij het uitvoeren van een render- of action request
(zie hoofdstuk 3.4) het preference object van het huidige window opvragen.
Het meerdere malen plaatsen van een portlet op een pagina is in het algemeen alleen dan
zinvol als elk portlet window apart geconfigureerd kan worden middels de preferences
objecten (gebruikersvoorkeuren). Een voorbeeld hiervan is een nieuws portlet, waarbij de
gebruiker via de voorkeurinstellingen per portlet window andere nieuwsbronnen kan
selecteren. Om de gebruiker in staat te stellen ook daadwerkelijk zijn voorkeuren aan te
geven dient de portlet de “EDIT” view-mode te ondersteunen (zie hoofdstuk 3.3). Het
voorbeeld is in ieder geval illustratief voor het tonen van de relatie tussen de
verschillende onderdelen (Portlet Object, PortletPreferences Object, Portlet Window en
Portal Pagina).
Het verdient sterke aanbeveling om portlets altijd af te leiden van de generieke
“GenericPortlet” klasse, welke op zijn beurt de portlet interface “Portlet” implementeert.
Beide zijn onderdeel van de JSR-168 standaard en beschikbaar in elke compatible portlet
container.
3.2 Portlet Window States
Een portlet window kan een aantal verschillende “representatievormen” aannemen,
genoemd de “window states” van de portlet. De JSR-168 standaard schrijft de volgende
drie states voor:
1. NORMAL – het window neemt een hoeveelheid ruimte in beslag die is vastgesteld
tijdens opbouw van de pagina. In deze toestand zal de portlet waarschijnlijk de
pagina delen met andere portlets.
2.
MAXIMIZED – het window is “uitgeklapt” (vergelijk de “maximize” button onder
Windows) en neemt maximale ruimte in binnen het gebied op de pagina waarbinnen
de portlet is geplaatst. Dit is een hint aan de portlet dat er meer ruimte dan
gebruikelijk beschikbaar is voor het renderen van content.
3.
MINIMIZED – het window is “ingeklapt” (vergelijk de “minimize” button onder
Windows) en neemt minimale ruimte in binnen het gebied op de pagina waarbinnen
de portlet is geplaatst. Dit is een hint aan de portlet dat geen, of slechts minimale,
output mag worden geproduceerd tijdens een “render” request.
23/52
Naast deze drie voorgedefinieerde window states kan een portlet nog een willekeurig
aantal additionele window states
ondersteunen. Deze dienen in de Deployment
Descriptor van de portlet te worden
gespecificeerd. Deze window states moeten
dan wel ondersteund worden door de portlet
container! Het is dus niet zo dat een portlet
states kan “verzinnen” die de container niet
kent.
Normaalgesproken wordt een portal pagina
opgebouwd uit een aantal losse gebieden
(“areas”) waarbinnen portlets kunnen worden
geplaatst zoals nevenstaande figuur toont. Een
portlet mag nooit meer plaats innemen dan
“zijn” gebied toelaat. Informatie betreffende de
window state kan de portlet ophalen uit de
ontvangen PortletRequest objecten (zie
hoofdstuk 3.4).
Een portlet kan zijn window state wijzigen bij
het uitvoeren van een “processAction”. De
Figuur 8: Pagina opbouw
aangeboden window state moet dan wel geldig
zijn voor zowel de portlet en de portlet container.
3.3 Portlet View-Modes
Een portlet opereert altijd in één uit “n” zogenaamde “view-modes”. Deze mode bepaalt
wat voor soort informatie de portlet aan de gebruiker toont en wat voor dialoog de portlet
met de gebruiker voert. Wisseling tussen view-modes wordt gestuurd door de portlet
container op basis van “processAction” requests (zie hoofdstuk 3.4). De standaard
schrijft minimaal de volgende drie modes voor:
1. VIEW – genereer markup content conform de momentele “state” van de portlet. Dit is
de normale operationele mode van elke portlet en de portlet is dan ook verplicht om
deze mode te ondersteunen.
2.
EDIT – de portlet dient een gebruikersdialoog te executeren waarmee de gebruiker in
staat wordt gesteld om het gedrag en de instellingen van de portlet aan te passen aan
de wensen en eisen van de gebruiker. Met andere woorden: deze mode
implementeert “application customization”. De mode wordt normaalgesproken
geactiveerd middels een icoon in de titelbalk van de portlet, of pagina-breed middels
activeren dan “pagina-edit” mode. Dit is portlet container afhankelijk. De portlet is
niet verplicht om de edit mode te implementeren.
3.
HELP- de portlet biedt statische- of context gevoelige help informatie aan. De
implementatie is portlet specifiek en de help mode wordt normaalgesproken
geactiveerd middels een icoon in de titelbalk van de portlet. De portlet is niet
verplicht om de help mode te implementeren.
Naast deze drie voorgedefinieerde modes kan een portlet nog een willekeurig aantal
additionele modes ondersteunen. Deze dienen in de deployment descriptor van de portlet
te worden gespecificeerd. Deze modes moeten dan wel ondersteund worden door de
portlet container! Het is dus niet zo dat een portlet modes kan “verzinnen” die de
container niet kent.
24/52
3.4 Portlet Lifecycle
De lifecycle van een portlet komt tot uiting in een viertal methoden
op het Portlet interface. De portlet container zal
normaalgesproken precies één portlet instantie creëren per portlet
definitie (XML deployment descriptor) en per Java Virtual Machine
(JVM). Deze ene instantie zal dus gedeeld worden tussen alle
pagina’s en gebruikers, althans voor zover de gebruikersessies
door dezelfde JVM worden afgehandeld. De portlet container is vrij
om het moment van laden en instantiëren te kiezen. Aangezien
het aanroepen van de portlet constructor niet inhoudt dat de
portlet al actief is binnen de container, mag de portlet in zijn
constructor geen gebruik maken van container resources! Pas na
het aanroepen van de “init” methode is de portlet volledig gereed
voor afhandelen van requests.
1. init; wordt aangeroepen door de portlet container nadat een
nieuwe instantie van de portlet is geïnstantieerd en voordat de
instantie requests gaat behandelen. Dit gebeurt in principe
éénmalig en dient door de portlet te worden gebruikt voor
eenmalige initialisatie. De portlet kan geen gebruik maken van
portal resources voordat de “init” methode is uitgevoerd (en
kan dat dus wel tijdens uitvoer van “init”).
not initialised
"init"
"processAction"
"render"
active
"destroy"
destroyed
Figuur 9: Portlet Lifecycle
2.
processAction; wordt aangeroepen door de portlet container
als gevolg van ontvangst van een action URL met als target de betreffende portlet
(zie verder).
3.
render; wordt aangeroepen door de portlet container tijdens constructie van een
pagina.
4.
Destroy; wordt aangeroepen door de portlet container als de portlet instantie niet
langer nodig is.
De normale lifecycle van een portlet bestaat uit het éénmalig aanroepen van init,
(overgang van “not-initialised” naar “active” state), gevolgd door een aantal malen
processAction en/of render (voor elke keer dat de pagina waarop de portlet voorkomt
wordt opgebouwd, dit is de “active” state). Tot slot wordt destroy aangeroepen voordat
de portlet wordt verwijderd (overgang naar “destroyed” state). De portlet kan geen portal
resources meer gebruiken nadat de “destroy” methode is aangeroepen en de portlet
code kan worden opgeruimd door de garbage collector.
Een pagina wordt normaalgesproken opgebouwd als gevolg van ontvangst van een URL
door de portlet container. Deze URL kan de vorm hebben van een action URL. In dat
geval bevat de URL de identifier voor de portlet die als target dient voor de action. De
container dient dan als eerste voor die betreffende portlet de processAction methode
aan te roepen en vervolgens te wachten totdat deze methode gereed is. Vervolgens dient
de container de render methode aan te roepen voor elke portlet op de pagina. Dit mag
sequentieel of parallel (in afzonderlijke threads). Aanname is dat de portal engine dit
multi-threaded zal doen.
De URL kan de vorm hebben van een render URL. In dat geval is geen portlet specifiek
geadresseerd en mag de container voor geen enkele portlet op de pagina de
processAction aanroepen. In plaats daarvan worden alleen de render methoden
aangeroepen, mogelijk parallel.
25/52
Onderstaande figuur toont de relatie tussen de “processAction” en de “render”
methoden:
Figuur 10: Pagina opbouw sequence
In dit geval wordt de processAction uitgevoerd door Portlet A omdat dat kennelijk de
portlet was die als target in de PortletURL was aangegeven. Welke portlet uiteindelijk de
processAction methode gaat uitvoeren wordt volledig bepaald door URL parameters en
is dus afhankelijk van de URL waarop de gebruiker heeft geklikt. De methode wordt altijd
als eerste uitgevoerd voordat de render methode wordt aangeroepen!
Merk op dat de processAction method altijd uitgevoerd wordt door de portlet waaruit
“geklikt” is. Van deze eigenschap kan gebruik gemaakt worden, maar het is aan te raden
om de processAction methode in alle portlets éénduidig te implementeren middels een
gedeelde state machine (zie verder).
Als een willekeurige portal pagina wordt benaderd doordat de gebruiker “elders” in de
portal op een paginalink klikt (een link met algemeen format
http://www.myportal.com/portal/myportal/mypage), dan zal de portal deze pagina
genereren middels “render” requests naar alle op de pagina aanwezige portlets. Als dit
de eerste keer is dat de betreffende portlets worden geactiveerd dan zal de container van
elke portlet eerst de “init” methode aanroepen (dit gebeurt dan dus alleen voor de
eerste gebruiker die de pagina voor de eerste keer opent, “init” wordt immers slechts
één maal in de lifecycle van een portlet aangeroepen). Het is theoretisch ook mogelijk om
een pagina te laden middels een “processAction” request, maar het nadeel hiervan is
dat deze URL dan één specifieke portlet op één specifieke pagina dient te adresseren
(action requests zijn altijd gericht op een portlet). Dit maakt de paginalink gevoelig voor
fouten en slecht onderhoudbaar.
26/52
3.5 Portlet Application
Portlets die samen voorzien in de implementatie van de gebruikersinterface van één
applicatie dienen te worden gecombineerd binnen een Portlet Application. Een Portlet
Application is een speciale vorm van een Web Application. Portlet Applications worden
beschreven door een [Portlet Application] Deployment Descriptor en bevatten een enkele
PortletContext (per Java VM) die door de deelnemende portlets kan worden gebruikt
om de applicatie context op te halen en/of te wijzigen.
3.5.1
Portlet Context
Elke Portlet Application bezit een
PortletContext. Dit is in feite een
extensie van de ServletContext,
aangezien portlets onderdeel zijn van een
web applicatie. Indien de portlet container
is gedistribueerd over meerdere JVM’s
bezit elke portlet applicatie een
PortletContext instance per JVM.
PortletContext en ServletContext
hebben toegang tot dezelfde resources.
De portlet kan zijn PortletContext
Figuur 11: Portlet applicatie
gebruiken om attributen en settings te
delen met andere portlets binnen dezelfde
Portlet Application. De PortletContext dient met name te worden gebruikt voor het
registreren van attributen/instellingen op applicatie niveau, niet op sessie niveau,
hiervoor dient PortletSession (zie hierna).
Elke implementatie van zekere omvang zal gebruik maken van meerdere JVM’s. Daarom
is de PortletContext dus niet geschikt om dynamische informatie te delen tussen alle
portlet instanties van één Portlet Application. Een goede implementatie zal dus gebruik
maken van een RDBMS voor opslag van dynamische informatie en zal PortletContext
alleen gebruiken voor statische informatie of informatie die alleen relevant is voor
objecten binnen dezelfde JVM.
De figuur hiernaast toont nogmaals de relatie tussen de componenten. Omdat een Portlet
Application dus een variant is van een Web Application, heeft hij ook een Web Application
Deployment Descriptor en deze dient dan ook gebruikt te worden voor vastleggen van
algemene configuratie informatie voor de applicatie als geheel.
3.5.2
Sessies
De portlet container is verantwoordelijk voor het bijhouden van gebruikerssessies. Deze
hebben de vorm van een PortletSession object. Binnen deze PortletSession kan een
portlet attributen opslaan met als scope de portlet zelf of de applicatie. In het eerste
geval zijn opgeslagen attributen alleen beschikbaar voor de betreffende portlet, in het
tweede geval zijn ze beschikbaar voor alle portlets binnen dezelfde Portlet Application.
Attributen worden opgeslagen met een zelfgekozen naam en kunnen willekeurige
objecten zijn.
De portal container is verantwoordelijk voor het correct bijhouden van de sessie context.
Met name het activeren van de juiste PortletSession voor opvolgende http requests en
het “tracken” van sessies is een verantwoordelijkheid van de container. Hier hoeven
Portlets dus zelf geen rekening mee te houden. Uitgangspunt is dat alle requests die het
gevolg zijn van een specifieke gebruikersactie binnen een bepaalde Portlet, gegarandeerd
binnen dezelfde sessie zullen worden afgehandeld.
27/52
Elke Portlet Application heeft één aparte PortletSession per gebruikerssessie. Dus een
gebruiker die meerdere malen op het portal is aangelogd zal meerdere PortletSession
objecten bezitten.
3.5.3
State control; Portlet URL’s
Portlets mogen nooit direct HTML URL’s genereren, aangezien de container zijn eigen URL
format kan en mag hanteren. In plaats daarvan dienen portlets gebruik te maken van
door de API aangeboden methoden om PortletURL objecten van het juiste type te
maken. De URL objecten ondersteunen een aantal methoden om op de juiste wijze
key/value tuples aan de URL toe te voegen. URL’s kunnen daarnaast uitsluitend worden
gemanipuleerd vanuit de render methode. Dit is conform het model dat de
processAction uitsluitend dient om portlet state bij te werken en dat markup alleen
wordt gegenereerd vanuit de render methodes. Een processAction wordt
normaalgesproken altijd gevolgd door een render op dezelfde portlet (zie ook het
sequence diagram in hoofdstuk 3.4).
Om de state van een portlet (of groep portlets) te sturen dient de portlet dan ook “Action
URL’s” te genereren en deze te koppelen aan knoppen en/of andere navigatiemiddelen die
invloed op de state hebben. Als de gebruiker op zo’n URL klikt zal bij het opnieuw
opbouwen van de pagina dus altijd eerst processAction worden uitgevoerd op de bij de
URL behorende portlet. Deze methode dient op basis van de ontvangen informatie een
state-update uit te voeren. Als de methode gereed is zal de portlet container alle render
methoden aanroepen om op basis van de nieuwe state de pagina op te bouwen met
eventueel nieuwe content.
Het is een beperking van de huidige JSR-168 standaard dat een portlet alleen URL’s kan
bouwen die reflecteren aan de “eigen” portlet. Het is dus niet mogelijk om te verwijzen
naar andere pagina’s binnen de portal. Dit heeft alles te maken met het feit dat een
portlet een “op zichzelf” staande entiteit is die geen weet heeft van zijn (portal) context.
Alleen op deze wijze is te garanderen dat de portlet werkt in willekeurige portalen en op
willekeurige pagina’s! Dit gaat met name een rol spelen bij gebruik van WSRP, waar de
portlet op “virtuele” wijze in meerdere portalen kan leven. Verwijzen naar andere pagina’s
zal in zo’n geval vreemde zijeffecten op kunnen leveren. Deze beperking is wel iets om bij
ontwerp van het portal interactiemodel rekening te houden.
3.5.4
Events
De JSR-286 standaard beschrijft een uitgebreid mechanisme waarmee portlets zich
kunnen “abonneren” op events, events kunnen ontvangen of events kunnen versturen.
Het event framework moet niet worden verward met bv. JMS. Het beperkt zich tot de
portal omgeving en er is geen sprake van “guaranteeed delivery” (met andere woorden:
events kunnen theoretisch “kwijt raken”).
Portlets kunnen zich “abonneren” op specifieke events (XML structuren). Als het juiste
event optreedt zal de container vervolgens op de portlet de processEvent methode
aanroepen met de eventinformatie als parameter. Events zullen altijd optreden vóór de
render fase en de portlet mag tijdens het afhandelen van events (of tijdens de
processAction) zelf nieuwe events genereren door de setEvent methode van de portlet
container aan te roepen. Deze aanroepen resulteren dan eventueel weer in nieuwe
processEvent aanroepen op andere portlets etc. De container zal pas beginnen met de
render fase als alle events die tijdens de processAction fase zijn ontstaan zijn
afgehandeld.
Het JSR-286 event raamwerk biedt uitgebreide mogelijkheden om dynamische interactie
tussen portlets en de portlet container te implementeren. De event inhoud kan in principe
alles zijn, van simpele naam/waarde paren tot complete Java objecten.
28/52
3.5.5
Publieke renderparameters
Ook nieuw in JSR-286 is het gebruik van publieke renderparameters, welke primair
bedoeld zijn voor het delen van view-state informatie tussen portlets. Het voordeel van
publieke parameters boven events is het vermijden van de overhead van de event
functies. Een publieke parameter “zit” op de pagina en kan door elke portlet simpelweg
worden uitgelezen. Een mooi voorbeeld is het definiëren van “Postcode” als een publieke
parameter. Als de pagina meerdere portlets heeft die allemaal gebruikmaken van
postcode (zoals bv. een weer portlet, een landkaart portlet, een restaurant portlet, etc.)
zullen alle portlets hun content automatisch aanpassen aan de opgegeven postcode zodra
één van deze portlets de postcode aanpast. De portlets hoeven verder geen informatie
van- of over elkaar te weten of te delen, anders dan een gemeenschappelijke definitie
van de “Postcode” variabele.
De portalserver kan publieke parameters coderen binnen de URL van de pagina, waardoor
ze automatisch worden meegenomen in bv. bookmark lijsten. Dit is echter implementatie
afhankelijk.
29/52
3.5.6
Resource
Een JSR-286 portlet kan een nieuwe methode, serveResource, implementeren. Deze
methode is qua scope zeer beperkt en laat het bv. niet toe om events te genereren of
publieke parameters te wijzigen. Daarnaast is het niet mogelijk om de window state of de
view mode aan te passen. Het belangrijkste doel van serveResource is het samenwerken
met een browser-side stukje [AJAX] scripting om daarmee dynamisch onderdelen van een
HTML pagina aan te passen zonder dat een complete pagina refresh noodzakelijk is.
Onderstaande figuur toont hoe dit werkt in relatie met de browser en de portal container:
Figuur 12: JSR-286 sequenties
De browser stuurt in dit geval een XMLHttpRequest (XHR) naar de portal, bv. vanuit
Javascript op de pagina. De portal vertaalt deze request naar een serveResource
aanroep op een specifieke portlet. De portlet genereert een HTML fragment en stuurt dit
terug naar de container die het op zijn beurt ongewijzigd naar de browser stuurt. Het
fragment kan HTML zijn, maar ook XML of een willekeurige andere opmaaktaal. De portal
doet in principe niets met het fragment, anders dan het ongewijzigd naar de browser
doorsturen.
Een voor de hand liggende toepassing is een “adresgenerator” portlet waarbij in de
request een postcode wordt gestuurd. De response bevat het complete adres. Op deze
wijze ziet een gebruiker na het intypen van zijn/haar postcode automatisch het complete
adres worden ingevuld.
30/52
3.5.7
Filters
Een portlet filter is een stukje Java code waarmee de inhoud en structuur van request en
response objecten naar- en van portlets kan worden “onderschept” en eventueel
getransformeerd. Filters kunnen bv. worden gebruikt om additionele informatie in een
portlet request te stoppen voordat de portlet wordt aangeroepen, of om informatie in het
response object te wijzigen voordat dit door de container verder wordt verwerkt. Filters
maken het dus mogelijk om in te grijpen op de manier waarop de container informatie
met portlets uitwisselt.
Het is mogelijk om meerdere filters te declareren en filters kunnen zelf bepalen of ze al
dan niet verwerking overdragen aan het volgende filter in de keten.
Een simpele toepassing van een filter is bv. een stukje code waarmee de inhoud van elke
request en response wordt gelogd.
31/52
4
Portal Standaarden
4.1 Java Portlet Specification
4.1.1
JSR 168
Vrijwel alle portal implementaties ondersteunen tegenwoordig de Java Portlet
Specification, version 1.0. Dit is een implementatie van JSR-168 en beschrijft de
interactie tussen de Java code van de portlet en de “portlet container” (m.a.w. de
portalserver). Portlets geschreven volgens deze standaard zijn in principe zonder wijziging
te deployen in elke container die de standaard ondersteunt. Zoals de naam al impliceert is
JSR-168/286 een pure Java standaard. Dit heeft alles te maken met het feit dat de
meeste portalservers geschreven zijn in Java of alleen Java portlets ondersteunen.
Uitzondering is Microsoft die feitelijk “alle talen zolang het maar geen Java is” ondersteunt
in hun Sharepoint server. Microsoft confirmeert zich dan ook niet aan de JSR
standaarden.
4.1.2
JSR 286
Sinds juni 2008 is de opvolger van JSR-168 formeel vrijgegeven als standaard. Deze JSR286 standaard biedt een aantal extra’s vergeleken met JSR-168, te weten:
 Events – een portlet kan events ontvangen van de portlet container en kan events
sturen naar de container. Op basis hiervan kunnen portlets informatie uitwisselen met
elkaar en/of reageren op veranderingen in de omgeving (bv. het feit dat de gebruiker
op een bepaalde link heeft geklikt);

Publieke renderparameters – een portlet kan parameters “publiek” verklaren waarmee
ze beschikbaar komen voor andere portlets op de pagina. Via deze parameters
kunnen portlets dus direct state informatie uitwisselen;

Resource – portlets kunnen optreden als “resources” op een pagina en maken het
mogelijk om alleen een gedeelte van een pagina aan te passen bv. via AJAX calls;

Filters – portlets kunnen dynamisch de request en response dataobjecten
manipuleren en transformeren;
4.1.3
Samenvatting
De JSR-168 standaard is inmiddels volwassen geworden en is beschikbaar in de meeste,
zo niet alle, Java portalservers. De ervaring heeft geleerd dat in het algemeen JSR-168
portlets prima kunnen worden geporteerd tussen verschillende container implementaties.
Nadelen zijn er ook: de JSR-168 standaard is uitsluitend gericht op Java en is verder
redelijk “kaal”, met name als het gaat om de interactie tussen de portlet en zijn pagina
(inclusief andere portlets). Zolang voor een applicatie slechts één of twee onafhankelijke
portlets nodig zijn is dit geen groot probleem. Echter, in veel gevallen is er sprake van
niet-triviale dialoogfunctionaliteit en dan is vaak behoefte aan een meer geavanceerd
protocol. Nu is inter-portlet communicatie in de praktijk voor een enkele applicatie goed
op te lossen door gebruik te maken van een set gedeelde presentatie services (een extra
service laag, dus). Echter, ook dit is niet altijd toereikend.
De JSR-286 standaard is bedoeld als uitbreiding op JSR-168 om juist deze problematiek
op te lossen. Helaas ondersteunen veel moderne containers wel JSR-168 maar nog geen
JSR-286! Met een beetje extra aandacht kan ook met JSR-168 echter prima worden
gewerkt, zelfs als inter-portlet communicatie op een pagina noodzakelijk is. JSR-286
32/52
vinden we momenteel in de “voorop lopende” open-source portalen zoals LifeRay Sun
WebSpace (gebaseerd op LifeRay) en eXo.
In het geval dat een portalserver de JSR-168/286 standaard ondersteunt verdient het
gebruik ervan absoluut de voorkeur boven gebruik maken van de “portal specifieke”
API’s. Alhoewel de verleiding vaak groot is om toch maar de container specifieke
functionaliteit te gebruiken is dit in de meeste gevallen niet nodig. Toepassen van JSR168/286 garandeert het eenvoudig kunnen migreren van één portal implementatie naar
een andere.
Vanuit de markt is er altijd al redelijk veel kritiek geweest over de beperkte scope van de
portlet API’s en het feit dat het zo lang duurt voordat nieuwe versies van de API
beschikbaar komen (versie 1.0 dateert uit 2003, versie 2 is pas in 2008 gekomen). Een
veel gehoord punt van kritiek is het ontbreken van toegang tot portal “data”. Echter, in
mijn opinie is deze kritiek niet geheel juist: de portlet API specificeert de interactie tussen
de portlet en zijn container. De container biedt een run-time omgeving waarmee door
portlets gegenereerde markup fragmenten aan elkaar worden “geweven” tot complete
pagina’s. Hoe de portlet aan zijn markup fragment komt is niet relevant. Portalen hebben
in principe GEEN EIGEN DATA! Alle informatie die door de portal naar de gebruikers wordt
ontsloten wordt beschikbaar gesteld door de portlets en niet door de portalserver zelf.
Dit houdt uiteraard in dat er wat meer effort door de programmeur moet worden besteed
aan het ontsluiten van door de portlet beschikbaar te stellen informatie. Deze informatie
valt uiteen in twee delen:
1) sessie-gerelateerde user-interactie informatie (m.a.w. de “portal sessie” inclusief de
identiteit van de ingelogde gebruiker). Deze informatie wordt door de container
aangeboden;
2) business-gerelateerde informatie, m.a.w. de “toegevoegde waarde” van de portlet
zoals bv. e-mail, nieuws, weer,
messaging, collaboratie, file access,
etc. Etc.
Categorie (2) moet door de portlet
zelfstandig worden opgelost. De
container helpt hierin een beetje met het
beschikbaar stellen van context en state.
Hoe de portlet het “business deel” oplost
is zijn eigen verantwoording. Meer en
meer wordt hier gebruik gemaakt van
additionele Web Application Frameworks
zoals Java Server Faces (JSF), Struts of
Spring. Veel portalservers bieden
tegenwoordig dan ook naadloze
integratie met deze frameworks.
De aanbevolen structuur wordt dan als
volgt:
Hierbij zijn de feitelijke portlets “zo dun
mogelijk” en zorgen deze alleen voor
state update en rendering van
presentatie fragmenten. De feitelijke
“business presentatie” logica zit in
separate presentatie services die op hun
beurt weer gebruik kunnen maken van
bedrijfsservices.
Figuur 13: Constructie presentatieservices
33/52
Er zijn tegenwoordig nog maar erg weinig Java portalservers die geen ondersteuning
bieden voor JSR-168. De meest voor de hand liggende uitzondering is Microsoft
Sharepoint, doch dit is geen Java portal. Sharepoint is een .Net implementatie en
ondersteunt alle Microsoft programmeertalen. Het aantal “niet-Java” portalservers is
verder zeer gering. We komen dan al snel terecht bij specifieke Web Applicatie
Frameworks op basis van PHP, Perl, Ruby of andere scripting talen. Deze omgevingen zijn
zonder uitzondering specifiek en hebben hun eigen (niet-standaard)
programmeeromgevingen.
4.2 Web Services for Remote Portlets (WSRP)
Het Web Services for Remote Portlets
Consumer
Portal
(WSRP) protocol is ontwikkeld voor het
technologie-neutraal koppelen van
presentatie componenten. In het algemeen
Pagina Structuur
wordt het protocol geïmplementeerd
binnen een Enterprise Portal omgeving
Local Portlets
Remote Portlets
waardoor de betreffende portal hetzij
(JSR-168)
(WSRP ‘stubs’)
“eigen” portlets beschikbaar kan stellen
WSRP Consumer
aan remote portalen (“WSRP Producer”),
hetzij gepubliceerde portlets van remote
Producer
Portal
portalen kan weergeven in de lokale
paginastructuur (“WSRP Consumer”).
WSRP werkt nauw samen met JSR-168.
Pagina Structuur
(en inmiddels is er een WSRP 2.0
standaard die dan weer gebaseerd is op
Private Portlets
Public Portlets
JSR-286). Alhoewel beide standaarden
(JSR-168)
(JSR-168)
onafhankelijk van elkaar zijn ontwikkeld,
zijn er duidelijke overeenkomsten in
gebruik. Hierdoor is het eenvoudig om
Figuur 14: WSRP Structuur
portlets die zijn ontwikkeld conform JSR168 te publiceren middels WSRP. De
portlet ontwikkelaar hoeft hier in principe
geen rekening mee te houden, de extra functionaliteit wordt volledig geboden door de
WSRP interfaces van de betreffende Portlet Container. In de meeste gevallen is het
voldoende om in de Deployment Descriptor van de betreffende portlet aan te geven dat
de portlet gepubliceerd mag worden middels WSRP.
Doordat WSRP is gebaseerd op Web Services en XML, is het protocol neutraal v.w.b. de
achterliggende technologie aan beide kanten. Zo biedt Microsoft Sharepoint 2007
standaard functionaliteit voor het “consumeren” van via WSRP aangeboden portlets
ondanks dat de portal technlogie compleet verschillend is van de meeste andere, Java
gebaseerde, portalservers. Echter het “produceren” van WSRP portlets wordt niet door
Microsoft ondersteund.
Figuur 14 toont beknopt de relatie tussen producer en consumer. De figuur toont een
“producer” portal waarbinnen een aantal portlets tot “publiek” zijn bestempeld
(aangegeven in de Deployment Descriptor van de betreffende portlets). Deze portlets zijn
vervolgens toegankelijk via het “WSRP Producer” interface van de portal. Een “consumer”
portal kan via de “WSRP Consumer” logica de specificaties van de remote portlets
opvragen en deze portlets beschikbaar stellen aan de gebruiker als ware het lokale
portlets.
Merk op dat een portal zowel producer als consumer kan zijn en ook tegelijkertijd. Het
gaat dan uiteraard om verschillende portlets (een consumer kan geen portlets die hij
34/52
middels WSRP heeft gegenereerd zelf beschikbaar stellen als producer, immers, deze
portlets bestaan niet fysiek binnen de betreffende portal).
4.2.1.1
Overzicht van het Producer interface
De WSRP “producer” is de entiteit die een presentatiecomponent beschikbaar stelt aan
“derden”. De Producer dient daartoe een aantal Web Service interfaces te leveren,
waarvan de volgende twee verplicht zijn:

Service Description Interface
Door uitvragen van dit interface kan de vragende partij (de “consumer”) achterhalen
welke portlets door de betreffende producer worden aangeboden. Dit interface biedt
de volgende informatie:
1. De producer “meta-data”. Hiermee worden specifieke producer kenmerken
overgebracht aan de consumer. Onderdeel hiervan is bv. of de consumer zich
dient te registreren of niet, hoe cookies moeten worden beheerd, of de consumer
“URL-rewriting” dient uit te voeren, locale support, etc.
2. De lijst met beschikbare portlets met per portlet de titel, portlet description,
ondersteunde window states, view modes, mime-types, etc.

Markup Interface
Dit interface dient door de consumer te worden gebruikt voor het ophalen van de
daadwerkelijk gegenereerde content. Het interface biedt een tweetal methoden die elk
een JSR-168 “tegenpool” bezitten met gelijksoortige functionaliteit:
Methode “performBlockingInteraction” is de WSRP versie van de JSR-168
“processAction” methode. De consumer roept de methode aan voor het bijwerken
van de “state” van de producer portlet, waarbij andere portlets binnen dezelfde
pagina niet mogen worden geactiveerd.
Methode “getMarkup” is de WSRP versie van de JSR-168 “render” methode. De
consumer roept de methode aan voor het daarwerkelijk ophalen van de door de
remote portlet gegenereerde markup; dit is in de meeste gevallen een HTML
fragment.
Vervolgens bestaan er nog twee optionele interfaces:

Registration Interface
Via dit interface kan een consumer zich direct (in-band) registreren bij een producer
en kunnen specifieke kenmerken van de consumer worden doorgegeven aan de
producer. De producer kan hiermee rekening houden bij het genereren van content.
Er ontstaat in dit geval een “statefull” verbinding tussen consumer en producer.
De WSRP standaard gaat niet in detail in op de exacte wijze waarop registratie plaats
dient te vinden. Er zijn diverse mogelijkheden, variërend van een simpele aanroep
van het Registration Interface (zonder aanvullende kenmerken) tot een complete outof-band registratie procedure met contracten en certificaten. In dit laatste geval zullen
specifieke kenmerken moeten worden overgedragen tijdens aanroep van de
“register” methode op het Registration Interface.
Registratie is vooral bedoeld om een ‘context’ te creëren waarbinnen producer en
consumer informatie uitwisselen. Het zou bv. kunnen zijn dat een producer
verschillende portlet sets beschikbaar stelt aan verschillende consumers, of dat een
consumer specifieke eisen stelt aan de door de producer gegenereerde content. Ook
kan een producer bepaalde functionaliteit onthouden aan bepaalde consumers (die
mogen bv. een portlet niet verkleinen of vergroten).
35/52

Portlet Management Interface
Via dit interface kan de consumer de remote portlets beheren alsof ze onderdeel zijn
van het consumer portal. Het gaat hierbij om op afstand aanpassen van portlet
properties, het clonen van portlets en het verwijderen van portlets.
4.2.1.2
Markup generatie
Het “markup” interface vormt de bron voor de daadwerkelijke portlet content. De
consumer zal dit interface gebruiken bij het opbouwen van een lokale pagina waarop
“remote” portlets voorkomen. Het interface wordt gebruikt om “user-state” door te geven
van consumer naar producer en om “markup” door te geven van producer naar
consumer.
De volgende methoden zijn beschikbaar op dit interface:
a) De “getMarkup” methode wordt gebruikt voor het ophalen van de daadwerlijke portlet
markup. Het is in feite de WSRP tegenhanger van de “render” methode van JSR-168;
b) Methode “performBlockingInteraction” is de methode die wordt aangeroepen om
gebruikersinvoer door te sturen naar de remote portlet waarvoor deze invoer is
bedoeld. Het is de tegenhanger van de JSR-168 methode “processAction”;
c)
De methode “initCookie” wordt gebruikt om de producer in staat te stellen om
eventuele cookies te initaliseren en terug te sturen naar de consumer voor gebruik
binnen de huidige sessie. Producers kunnen cookies bv. gebruiken voor het expliciet
koppelen van sessie state aan bepaalde producer instances (i.g.v. load balancers of
producers die binnen een cluster opereren). Verder worden cookies natuurlijk
veelvuldig gebruikt om server state vast te leggen binnen de browser.
d) Methode “releaseSessions” kan door de consumer worden gebruikt om sessie
informatie binnen de producer op te ruimen. Op deze wijze kan de consumer ervoor
zorgen dat sessies die binnen de consumer niet langer geldig zijn (bv. na timeout of
expliciete logout) ook aan de producer zijde niet langer bestaan.
Bij het opbouwen van een pagina met remote portlets volgt de consumer portal exact
dezelfde processtappen als JSR-168. Er zijn twee varianten:
1) De pagina wordt opgebouwd zonder dat er sprake is van een “user action”. Dit is bv.
het geval indien een portal pagina voor de eerste maal wordt aangeroepen vanuit een
andere pagina, of de pagina wordt eenvoudigweg ververst. In dit geval zal de
consumer portal voor elke “remote” portlet de methode “getMarkup” aanroepen,
mogelijkerwijs vanuit meerdere threads. De ontvangende producer portal zal deze
aanroep verwerken en tenslotte de “render” methode aanoepen op de
corresponderende “fysieke” portlet.
36/52
2) De pagina wordt opgebouwd als gevolg van een “user action”, m.a.w. de gebruiker
klikt op een link die is gekoppeld aan een portlet. Dit kan bv. de “submit” knop zijn
van een formulier. Als de “target” van deze actie een “remote” portlet betreft zal de
consumer portal als eerste de methode “performBlockingInteraction” aanroepen
met als één van de argumenten de verzamelde gebruikersgegevens (formulier
velden). De consumer wacht vervolgens op return van deze methode, andere portlets
worden dus nog niet verwerkt. De producer portal ontvangt de argumenten en zal
tenslotte methode “processAction” op de “fysieke” targer portlet aanroepen. Ook
hier zullen andere portlets niet worden geactiveerd. Als deze aanroep is afgerond zal
de consumer portal vervolgens “getMarkup” gaan aanroepen van alle “remote”
portlets om de actuele content
op te halen.
Dit sequence diagram toont het
complete “two-step process” bij
verwerken van
gebruikersinvoer. Het diagram
toont alleen de “remote”
portlets, waarbij we er vanuit
gaan dat de producer een
tweetal portlets, A en B,
beschikbaar heeft gesteld op de
pagina waarop de gebruiker de
invoer heeft gepleegd.
Figuur 15: WSRP Content generatie
4.2.1.2.1
URL’s in markup
De markup die door de producer wordt geproduceerd kan uiteraard URL’s bevatten.
Aangezien de gebruiker communiceert met de consumer en niet met de producer, dienen
deze URL’s uiteindelijk te verwijzen naar de consumer site en niet naar de producer site.
WSRP biedt hiervoor een aantal alternatieven, afhankelijk van de bereidwilligheid van de
producer portlet om “WSRP aware” URL’s te genereren of niet.
In het eenvoudigste geval heeft de feitelijke portlet code van de producer geen weet van
het gebruik van WSRP en deze zal dan ook URL’s maken die verwijzen naar producer
resources. In dit geval zal de WSRP producer in de gegenereerde markup de URL’s
voorzien van “tags” en hij zal de consumer de instructie geven dat alle van een “tag”
voorziene URL’s moeten worden aangepast aan de situatie van de consumer. Als
parameter aan de tag is de actie meegegeven die de consumer moet uitvoeren indien de
gebruiker klikt op de uiteindelijke URL. WRSP kent hiertoe een drietal acties:
1.
blockingAction – de URL resulteert in een “state-change” binnen de portlet en zal
dus moeten worden uitgevoerd als een sequentie van “performBlockinInteraction”
op de betreffende portlet, gevolgd door “getMarkup” voor alle portlets;
2.
render – de URL dient te resulteren in het uitvoeren van alleen een “render” op alle
portlets;
37/52
3.
resource – de URL vormt een verwijzing naar additionele pagina resources zoals
plaatjes en/of bestanden;
Een alternatief is het gebruik van “URL Templates”. In dit geval stuurt de consumer zijn
context naar de producer (in de vorm van één of meer “URL Templates”) als onderdeel
van de “performBlockingInteraction” of “getMarkup” aanroep. De producer gebruikt
deze context om URL’s te genereren die direct verwijzen naar deze consumer context en
dus niet achteraf door de consumer hoeven te worden herschreven. Voordeel is uiteraard
dat performance winst kan worden geboekt. Nadeel is dat de producer hiermee
afhankelijk wordt van de consumer en geen markup kan cachen voor meerdere
consumers.
Een portlet die wordt gebruikt binnen een WSRP omgeving en die gebruik maakt van
herschrijven van URL’s door de consumer kan uitsluitend URL’s genereren die refereren
aan die betreffende portlet. Het is dus expliciet niet mogelijk om pagina URL’s te
genereren! Dit is ook logisch, een WSRP portlet wordt immers “op zichzelf” gebruikt, de
pagina structuur wordt volledig bepaald door de consumer. Ook URL’s naar andere
portlets binnen dezelfde producer is een twijfelachtige zaak. Immers, het is niet zeker dat
deze portlets bestaan bij de consumer.
4.2.1.2.2
Cookies
In veel gevallen zal een portal gebruik maken van Cookies om state op te kunnen slaan in
de browser van de gebruiker. Als de producer behoefte heeft aan het gebruik van Cookies
zal hij dit kenbaar maken middels het “requiresInitCookie” element in de response op
“getServiceDescription”.
De consumer dient in dit geval de markup interface methode “initCookie” aan te roepen
waarna de producer één of meerdere Cookies teruggeeft. Deze moeten met elke volgende
“markup” of “performBlockingInteraction” worden meegegeven aan de producer.
Tijdens de sessie kunnen Cookies ongeldig raken. De producer zal dit kenbaar maken
middels “invalidCookie” foutmeldingen. De consumer moet op dat moment opnieuw
“initCookie” aanroepen om “verse” Cookies te krijgen.
4.2.1.3
De WSRP 2.0 standaard
Sinds april 2008 is de WSRP 2.0 standaard formeel vrijgegeven. WSRP 2.0 biedt
aansluiting op de JSR-286 standaard en heeft dan ook ondersteuning voor de typische
JSR-286 uitbreidingen:
 Events – een portlet kan reageren op events die zich in de consumeromgeving
hebben voorgedaan. Dit kunnen events zijn van portlets die afkomstig zijn van
verschillende producers (een “echt” gedistribueerd event netwerk dus). De
functionaliteit komt overeen met het JSR-286 eventmodel;

Publieke renderparameters – deze parameters worden in WSRP 2.0 altijd via de URL
doorgegeven en zijn beschikbaar voor alle portlets op een consumer pagina,
onafhankelijk of dit een lokale portlet is (dus in de context van de consumer) of dat
het een via WSRP ontsloten “remote” portlet is;

Resource – identiek aan de JSR-286 spcificatie kunnen portlets render “fragmenten”
genereren die vanaf de producer, via WSRP, naar de consumer worden geleid en
vandaar naar de browser van de gebruiker, zonder dat hiervoor de volledige pagina
hoeft te worden gerefreshed;
38/52
Naast deze uitbreidingen biedt WSRP 2.0 tevens nog:
 Caching – markup fragmenten voor remote portlets worden in de consumer
opgeslagen. De cache wordt bijgewerkt conform een “expiration” mechanisme (dus na
“x” seconde verversen) of d.m.v. een expliciete validatiecheck bij de producer;

Leasing – in de WSRP 1.0 standaard was de verbinding tussen “consumer” en
“producer” in principe permanent. De WSRP 2.0 standaard biedt de mogelijkheid om
conditioneel een geldigheidsperiode aan de verbinding te koppelen;
4.2.2
Samenvatting
De WSRP 1.0 standaard is volwassen en is beschikbaar voor veel uiteenlopende
portalservers. Echter, er zijn gevallen waar de portalserver wel het “consumer” interface
aanbiedt maar niet het “producer” interface (een goed voorbeeld hiervan is Microsoft
Sharepoint 2007). WSRP is het enige alternatief voor het direct koppelen van portalen.
Het grote voordelen van WSRP is de mogelijkheid om direct portlets aangeboden door
portal A beschikbaar maken via de presentatielaag van portal B. Portal B hoeft deze
portlets niet zelf te onderhouden. Daarnaast kunnen gedistibueerde netwerken van
portlets worden gebouwd, ongeacht de technologie.
Er zijn echter ook een aantal nadelen. Zo is de beveiliging slecht geregeld in de
standaard. Omdat WSRP is gebaseerd op web services wordt vaak gesteld dat beveiliging
op het service transportniveau moet worden opgelost d.m.v. WS-Security of SAML. In de
praktijk bieden maar weinig portalservers deze optie ook aan. De standaard methode is
om security te regelen op het consumer portal door toegang tot pagina’s met WSRP
portlets te limiteren tot geauthenticeerde gebruikers en om HTTPS / SSL te gebruiken
over de verbinding tussen producer en consumer. Performence en complexitied van WSRP
is problematisch. De standaard definieert in feite een protocol om gebruikersinterfaces te
transporteren over web services. Dit maakt de interactie complex en vrij breekbaar. In
veel gevallen is het (in ieder geval architectuur-technisch) netter om de onderliggende
functionaliteit beschikbaar te stellen als bedrijfsservice en deze service met een “eigen”
portlet van het consumer portal te ontsluiten. De afhankelijkheiden tussen producer en
consumer worden beter te beheren en de connectie is bovendien beter de beveiligen.
WSRP is verder een vrij complex protocol en levert redelijk veel overhead op.
Performance is een issue, zeker als de verbinding tussen producer en consumer via het
Internet loopt. Tenslotte wordt de WSRP 2.0 standaard wordt door slechts weinig
portalservers ondersteund.
39/52
4.3 Microsoft Sharepoint
Microsoft Sharepoint heeft functionaliteit om portal omgevingen aan gebruikers aan te
bieden, waarbij zogenaamde ‘webparts’ de rol van de portlet hebben. Deze portals zijn
alleen in staat functionaliteit aan te bieden die op de Sharepoint server of farm zelf
geïmplementeerd is. Koppeling met andere systemen zal gebouwd/gekocht moeten
worden om vervolgens aangeboden te kunnen worden in de portal. Dit lijkt daarmee sterk
op wat JSR-168 kan bieden. Sharepoint implementeert, in tegenstelling tot JSR-168, geen
open standaard voor de communicatie tussen portal en achterliggende systemen.
Sharepoint kan middels WSRP portlets consumeren.
4.4 Gadgets en Widgets
Gadgets en Widgets zijn termen die horen bij de “Web 2.0 hype”. Maar wat zijn nu
eigenlijk een Gadget en Widgets en wat kan je er mee?
4.4.1
Wat is een Gadget?
De term “Gadget” of “Widget” kom je nogal eens tegen binnen de wereld van Web 2.0.
De beste definitie van een “Gadget” is:
“Een universele, publieke, op basis van een URL toegankelijke service waarmee
toegang wordt verkregen tot een applicatie die speciaal is toegesneden om te
worden opgenomen binnen de HTML structuur van een web pagina”.
Gadgets en Widgets zijn een verschillende naam voor feitelijk hetzelfde ding. Omdat de
API specificatie de Gadget API heet, zal in het vervolg de term Gadget worden gehanteerd
wanneer we aan deze technologie refereren.
Gadgets zijn in principe “browser based”. De logica maakt gebruik van Javascript,
eventueel gecombineerd met dynamische content-rendering tools zoals Flash of Microsoft
Silverlight. Communicatie met de achterliggende applicatielogica maakt gebruikt van
AJAX waardoor het mogelijk wordt om alleen de door de Gadget getoonde content bij te
werken waarbij de rest van de pagina niet wijzigt. Gadgets zijn de belangrijkste
bouwsteen voor Rich Internet Applications (RIA’s) en voor de creatie van Mashups.
Mashups maken het mogelijk om de content van meerdere informatiebronnen aan de
browser kant te combineren tot nieuwe functionaliteit, zonder aan de oorspronkelijke
bronnen iets te hoeven wijzigen.
Uniek aan gadgets, in vergelijking met JSR-168 portlets, is dat ze naast in een browser,
ook in toenemende mate rechtstreeks, zonder browser, gebruikt kunnen worden op
‘devices’ zoals mobiel telefoons en smartphones zoals de iPhone en Android. Ook bieden
gangbare besturingsystemen zoals Microsoft Vista, MacOS en diverse Linux varianten
momenteel reeds de mogelijkheid gadgets rechtstreeks op de desktop weer te geven
zonder (zichtbare) tussenkomst van een browser. Er zijn ondertussen zelfs televisie
toestellen die zelfstandig gadgets kunnen weergeven5
Net als een portlet kan een Gadget een “window” bezitten met daarop knoppen voor
omschakeling tussen verschillende “views” (de meest voor de hand liggende zijn daarbij
de “view” mode waarbij de daadwerkelijke functionaliteit van de Gadget wordt getoond en
de “customize” mode waarbij de gebruiker de Gadget kan aanpassen aan eigen wensen
en voorkeuren. In tegenstelling tot een [JSR-168/286] Java portlet waarbij de code aan
de portal-kant wordt uitgevoerd, worden bij de Gadget de meeste operaties uitgevoerd
binnen de browser op basis van Javascript bibliotheken.
5
http://connectedtv.yahoo.com/services/tv-widgets
40/52
Gadgets zijn als zodanig “uitgevonden” door Google. De Gadget specificatie maakt
tegenwoordig onderdeel uit van de OpenSocial API (waarover later meer). De specificaties
zijn te vinden op de site van opensocial.org6. OpenSocial is (nog) geen formele open
standaard en Google is nog steeds een van de belangrijkste spelers is bij de
doorontwikkeling van de gadgets API. Echter de OpenSocial API wordt beheerd door een
stichting – de OpenSocial Foundation - en het proces rondom de doorontwikkeling is
transparant en toegankelijk7.
4.4.2
Gadgets API
De Gadget specificatie gaat met name over de weergave van gadgets. De gadgets API is
gebaseerd op een drietal componenten:
1. De “Gadget Specificatie”, een XML file waarin de kenmerken, content en
configuratiegegevens van de Gadget zijn beschreven. Deze file wordt “ergens” op
het Internet opgeslagen en is via een URL toegankelijk.
De gadget specificatie is zeer eenvoudig. Hieronder een voorbeeld van een
eenvoudige gadget.
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Hello World!">
<Require feature="opensocial-0.8" />
</ModulePrefs>
<Content type="html">
<![CDATA[
Hello, world!
]]>
</Content>
</Module>

De <Module> sectie geeft aan dat
deze xml file een gadget beschrijft.

Het onderdeel <ModulePrefs>
Heeft metadata over de gadget
zoals auteur, licentie, ect.

De <Require feature="opensocial0.8" /> beschrijft de
afhankelijkheden van de gadget, in
dit geval, de OpenSocial API
(v0.8), meer hierover in het
volgende hoofdstuk.

De <Content> sectie beschrijft de
content van de gadget. In dit geval
zal de inhoud van het type ‘html’
zijn. Andere datatypen zijn
mogelijk, maar worden voor OpenSocial containers niet aangeraden.
Figuur 16: HelloWorld Gadget in iGoogle
6
http://www.opensocial.org
7
http://wiki.opensocial.org/index.php?title=Specification_Process
41/52

Het <![ CDATA[…]]> blok is de daadwerkelijke inhoud van de gadget. Omdat
het hier een html widget betreft, zou dit blok HTML code, CSS stylesheets
enJavaScript functies kunnen bevatten.
Bovenstaande Gadget leidt in iGoogle tot de weergave zoals getoond in figuur
17
2.
De “Gadget Implementatie”, de achterliggende code (server-side, “ergens op het
Internet”) die door de browser-kant van de Gadget wordt aangeroepen om
daadwerkelijke content te tonen. Theoretisch kan dit leeg zijn of een vast inhoud
hebben, zoals bovenstaande boorbeeld. We spreken dan van een “statische”
Gadget en die zijn over het algemeen niet bijzonder interessant want redelijk
beperkt in functionaliteit;
3.
De “Gadget Code”, Javascript, HTML, Flash, etc., code componenten die binnen de
browser de Gadget presentatielaag vormen;
4.4.3
OpenSocial
De Gadget specificatie maakt onderdeel uit van de ‘OpenSocial’ specificatie. OpenSocial
definieert een API waarbij het uitgangspunt een zogenaamde ‘Social Application’ is. Dit
soort applicaties draaien om mensen, hun relaties en hun activiteiten.
De 0.9 versie 8 van de API die is sinds April 15, 2009 beschikbaar is, implementeert
interfaces voor onder andere:

Personen en hun eigenschappen

Relaties (Vrienden/Groepen)

Activiteiten

Messaging

Gadgets

De data uitwisseling van bovenstaande middels Javascript, Rest en SOAP

Authenticatie middels OAuth
OpenSocial faciliteert in drie onderdelen, zie figuur 17:
Figuur 17: OpenSocial componenten
1.
8
OpenSocial applicaties (App)
Dit zijn de op gadgets en OpenSocial standaard gebaseerde applicatie die op een
http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/OpenSocial-Specification.html
42/52
(web) server geplaatst wordt en bepaalde functionaliteit kunnen uitvoeren. Welke
functionaliteit wordt uitgevoerd is volledig afhankelijk van wat de betreffende Gadget
implementeert, en dit is niet afhankelijk van de uiteindelijke presentatie van de
gadget, noch van de data waarop de Gadget werkt.
2.
OpenSocial Container (‘Social Network’)
De OpenSocial container implementeert de OpenSocial API en een OpenSocial Data
Server in het sociale netwerk. Het is de container die mensen, hun eigenschappen,
relaties en activiteiten beschikbaar maakt aan de App’s middels de
gestandaardiseerde OpenSocial API. De wijze waarop deze gegevens verzameld
worden is aan de container. Vaak zal een container daarom functionaliteit bieden om
account, profielen en relaties aan te maken en te beheren. Er zijn een aantal zeer
bekende container aanbieders, waarbij die van Google (iGoogle9), MySpace (MySpace
Developer10), Yahoo (Yahoo! Application Platform11) en Linkedin (LinkedIn
Applications Platform12) wel de bekendste zijn. Ook het Nederlandse Hyves
implementeert een OpenSocial container (Hyves Developer Site13). Via deze
containers gebruiken maandelijks meer dan 100 miljoen mensen op OpenSocial
gebaseerde technologie. De meest containers implementeren momenteel API 0.8.x
Naast de vele beschikbare sites die de container als (onderdeel van) een ‘hosted’
dienst aanbieden, zijn er implementaties beschikbaar om zelf een OpenSocial
container beschikbaar te stellen. Shindig14 van de Apache Foundation is de Open
Source referentie implementatie van de OpenSocial API’s en wordt actief ondersteund
door onder andere Google.
3.
‘Sharing and Accessing Social Data‘
Het gecombineerde resultaat van functionaliteit van de App en data van de
OpenSocial Container wordt door de container geserveerd aan een
eindgebruikersapplicatie. De eindgebruikersapplicatie, vaak een browser, presenteert
(rendert) het geheel op basis van de gadget spec. en toon de middels de OpenSocial
API vergaarde data.
4.4.4
Gadgets Veiligheid
Het open karakter van gadgets brengen ook een aantal uitdagingen met zich mee. Gadget
hebben op het gebied van veiligheid niet een erg goede naam. Dit is vooral veroorzaakt
doordat in de eerste versies van de spec de veiligheid onderbelicht was. Ondertussen zijn
er een aantal significante verbetering aangebracht om de veiligheid van gadgets te
verbeteren. Hieronder worden een aantal aandachtspunten opgesomd.

In tegenstelling tot portlets dienen gadgets niet zomaar met elkaar te kunnen
communiceren. Dit is noodzakelijk om onderlinge beïnvloeding te vermijden. Het
hele idee achter een Gadget is het binnen de browser draaien van Javascript,
aangeleverd door een stukje software “ergens” op het Internet. De gebruiker kan
willekeurige gadgets op een pagina verzamelen en elke Gadget kan in theorie zijn
9
http://www.google.com/ig
10
http://developer.myspace.com/community/
11
http://developer.yahoo.com/yap/
12
http://www.linkedin.com/static?key=developers_opensocial
13
http://www.hyves.nl/gapsb
14
http://incubator.apache.org/shindig/
43/52
gekoppeld aan een andere website. Omdat de ‘bron’ van een gadget overal op
internet kan zijn, dienen zowel de container als de gadgets onderling beschermd
te worden. De introductie van CAJA 15 16, wat zoveel betekend als kluis of cel
introduceert dit soort mogelijkheden binnen OpenSocial containers. Naast het
afbeschermen van gadgets wordt ook de interactie tussen gadgets en container
gecontroleerd. Caja is nog niet voltooid. Wel is het tegenwoordig een standaard
onderdeel van de Shindig referentie applicatie.

Beveiliging is binnen gadgets niet expliciet geregeld. Standaard https kan gebruik
worden om de communicatie tussen Gadget (web)server en de portal te
beveiligen. Authenticeren vanuit een Gadget is moeilijk, zo niet onmogelijk omdat
de web browsers over het algemeen niet toestaan dat “vreemde” web sites
(referenties vanuit een pagina naar een URL anders dan de pagina URL), security
Cookies plaatsen en deze Cookies noodzakelijk zijn voor het vastleggen van login
informatie. Als een Gadget in combinatie met een portal wordt gebruikt is dit
probleem minder relevant (althans, voor gadgets die gebruik maken van datzelfde
portal) omdat de gebruiker op het portal moet inloggen voordat de pagina met de
gadgets kan worden aangeboden.
In het geval dat zowel de portal als de gadgets voor authenticatie gebruik maken
van een federatie zoals de SURFfederatie zijn bovenstaande zaken echter geen
probleem. De portal en de gadgets gedragen zich net als ‘normale’ webbased
‘service providers’ en in voorkomende gevallen wordt zelfs Single-Sign-On
gerealiseerd tussen de portal en de gadgets.

De huidige OpenSocial API implementeert Oauth. Middels OAuth kun je
‘resources’ (foto’s videos, contact lijstjes, etc) die zich op een site bevinden delen
met een andere sites, zonder dat je wachtwoorden en gebruikersnaam ook met
iedere site moet delen.

Gadgets vormen potentieel een groot risico op het gebied van privacy. Omdat
gadgets vrijwel per definitie in iemand anders z’n omgeving draaien, vormen ze
daarmee een potentieel interessante inspiratiebron voor hackers en phishers. Een
Gadget kan ongemerkt worden ingezet om bijvoorbeeld informatie van de
gebruiker te verzamelen en door te sturen. Zie bijvoorbeeld het volgende artikel:
“Analyst: Beware of the Google gadgets”17
Daarnaast ondersteunt de OpenSocial specificatie een aantal eigenschappen van
personen waarvan het dubieus is of je die wel zou moeten willen vrijgeven. Dit
varieert van ‘favorite books/food/whatwever’ tot ‘sexual preference’. Het verdient
dan ook de aanbeveling in onderwijs of onderzoek context zeer terughoudend te
zijn met het aanleveren van dit soort informatie naar de gadgets die in de
container gebruikt worden. Er zou bijvoorbeeld gekozen kunnen worden niet meer
informatie weg te geven dan reeds door de IdP van de instelling van de gebruiker
beschikbaar wordt gemaakt.

Gadgets zijn in principe publiek toegankelijk. Zoals voor iedere dienst op internet
geld dat ook de servers die gadgets aanleveren goed beveiligd dienen te worden.
Daarnaast heeft iedereen toegang heeft tot de Gadget en/of de Gadget code.
gadgets die gevoelige informatie manipuleren zijn dus een slecht idee.
15
http://code.google.com/p/google-caja/
16
http://google-caja-discuss.googlegroups.com/web/caja-spec.pdf
17
http://www.debianhelp.org/node/14120
44/52
4.4.5
Samenvatting
Gadgets maken het mogelijk om dynamische pagina’s te bouwen zonder daarvoor kennis
te hoeven hebben van code en maken het mogelijk om snel Mashups en Rich Internet
Applications (RIA’s) te ontwikkelen.
Omdat de “server side” van een Gadget niet afhankelijk is van een specifiek framework
kan de Gadget Implementatie worden ontwikkeld met een willekeurig Web Framework.
De enige randvoorwaarde is de ondersteuning van HTTP en HTML.
Gadgets en OpenSocial zijn zeer open en worden reeds door diverse grote platformen
gebruikt en is daarmee bewezen technologie. Het gemak waarmee het mogelijk is
functionele componenten (‘Apps’) uit te wisselen tussen OpenSocial compatible portals
maat het gebruik van dit soort technologie extra aantrekkelijk.
Echter, de OpenSocial API is (nog) geen open standaard. Wel zijn er tekenen die laten
zien dat er in die richting wordt bewogen.
Om veilig en betrouwbaar met gadgets te kunnen werken verdient het de voorkeur een
container omgeving te gebruiken die door een vertrouwde partij beheerd wordt. SURFnet
zou hierin prima een centrale rol kunnen spelen voor haar instellingen. Voor een
dergelijke container zou SURFnet nauwkeurig moeten afwegen welke onderdelen van
OpenSocial API wel en niet geïmplementeerd worden. Daarnaast zou bij het aanspreken
van ‘externe’ gadgets de gebruiker expliciet gevraagd moeten worden of hij/zij de
attributen die wel door SURFnet geprovisioned worden ook echt beschikbaar wil maken
voor de widget. Gebruik van “externe” gadgets dient zorgvuldig te worden overwogen en
het verdient aanbeveling gadgets niet te gebruiken voor bewerken van gevoelige
informatie. Opnieuw zou SURFnet hier een rol kunnen spelen. Middels de SURFfederatie
kunnen instellingen nauwkeurig regelen welke attributen gebruikers wel, en welke niet
beschikbaar gemaakt worden richting een container omgeving. Daarnaast zou SURFnet
een rol kunnen spelen bij het beoordelen van de betrouwbaarheid van gadgets van
derden en/of instellingen.
4.5 Gadgets en Portalen combineren
Gadgets laten zich prima combineren met portalen. Veel portal servers bieden
ondersteuning op basis van JSR-168/286 portlets die in feite een “placeholder” vormen
voor de Gadget code. Ze laten zich op een portal pagina plaatsen zoals elke andere
portlet, met het grote verschil dat er in feite een “lege” server-side portlet achter zit. De
feitelijke code draait volledig binnen de browser (in combinatie met de Gadget
Implementatie die achter de opgegeven URL zit “verstopt”).
De figuur toont hoe gadgets samen met een portal gebruikt kunnen worden voor het
genereren en tonen van dynamische wijzigende web content:
In eerste instantie biedt de portal server het Gadget aan in de vorm van een
[JSR-168/286] portlet. Deze portlet genereert de “Browser-kant” van de Gadget in de
vorm van Javascript. Voordeel is dat de Gadget op deze manier op een pagina kan
worden geplaatst net zoals de “standaard” Java portlets.
45/52
Bij het renderen van de pagina worden de gadgets vertaald naar Javascript “insertions” in
de HTML pagina. Ze maken voor hun runtime omgeving gebruik van door Google
beschikbaar gestelde Javascript bibliotheken.
De Gadget Descriptor beschrijft in principe de functionaliteit en configuratiegegevens van
de Gadget. In theorie heb je niet meer nodig dan deze descriptor. De Gadget Browser
Code is onderdeel hiervan en bevat de Javascript code waarmee de Gadget binnen de
browser wordt geïmplementeerd. Om dynamische gadgets te maken die opereren op
externe content (= content beschikbaar “ergens” op het Internet) zal er ook sprake zijn
van server-side componenten, in de figuur omschreven met “Gadget Implementatie”.
Deze componenten kunnen in elke [web]taal zijn geschreven en worden vanuit de Gadget
aangeroepen d.m.v. AJAX calls. Het is deze combinatie van browser-kant logica met
server-kans logica die het Gadget concept zo krachtig maken.
De figuur toont een aparte server voor de Gadget Implementatie. Dat kan echter ook de
portal server zijn. In dat geval kan je een implementatie bouwen waarbij server-side
(portlet code) en browser-side (gadgets) samenwerken om volledig dynamische pagina’s
te realiseren.
Gadgets zijn een krachtige aanvulling op
het scala aan portalpagina
ontwikkeltools. Onder andere via de
Google repository is het mogelijk om te
Figuur 18: Relatie Gadgets & Portalen
kiezen tussen vele honderden
verschillende gadgets die, mits de
juiste portal server is gekozen, direct op
een pagina zijn te plaatsen, al ware het
lokale portlets.
46/52
5
Functionele eisen
5.1 Requirements
De functionele eisen zijn aangeleverd door SURFnet op basis van een tweetal interview
rondes met afgevaardigden van de afdelingen Community Support en Middleware
Services. Naast een overzicht van de functionele eisen voor de portal-technologie is er
een lijstje met functionele eisen voor de te realiseren portlet en widget technologie naar
voren gekomen. Dit lijst is op de volgende pagina te lezen.
De tabel hieronder bevat de geïnventariseerde eisen met betrekking tot portaltechnologie
met hun prioriteit:
Ident:
Eis:
MoSCoW:
F01
Diensten (services) van zowel SURFnet als
instellingsdiensten en diensten van derden moeten door
middel van de portaltechnologie zichtbaar gemaakt kunnen
worden binnen de portal.
M
F02
De portaltechnologie moet personalisatie-functionaliteiten
beschikbaar maken
M
F03
Free widget placing: Widgets moeten door de gebruiker vrij
gepositioneerd kunnen worden binnen de portal
M
F04
De portaltechnologie moet generiek herbruikbare widgets
kunnen faciliteren
M
F05
De portaltechnologie moet bewust zijn dat de gebruiker
aangemeld is bij de portal**
M
F06
De portaltechnologie moet informatie (logs) kunnen
bijhouden over het gebruik van de portlets en widgets
M
F07
De portal moet de gebruiker de mogelijkheid bieden de
layout van de portal aan te passen
M
F08
De portaltechnologie moet vertrouwende widgets herkenbaar
kunnen maken. Evenzo de niet-vertrouwde widgets. De CI
moet daarbij betrouwbaarheid van widgets kunnen checken
M
F09
De portal moet niet de rechten en rollen van de
onderliggende diensten kunnen overschrijven
M
F10
De portaltechnologie moet de portlets met meerdere
identiteiten kunnen consumeren*
S
F11
De portaltechnologie moet de huidige presentatievorm
kunnen opslaan en deelbaar beschikbaar stellen
S
*: De gebruiker moet gelijktijdig ingelogd kunnen zijn via federatieve inloggegevens en
inloggegevens van instellingspecifieke diensten, alsmede diensten (google bijvoorbeeld)
van de derden. Hierbij is het van belang dat de inloggegevens van de gebruiker niet
doorgespeeld worden naar diensten van niet-federatiefgekoppelde diensten.
**: De portaltechnologie moet een intelligente en specifieke profielen-optie faciliteren
47/52
5.2 Technologiemapping
Niet elke in hoofdstuk 2 beschreven technologie is even geschikt voor de implementatie
van de in hoofdstuk 5 beschreven eisen. De tabel hieronder geeft op basis van een
“consumentengids” beoordelingsmethode een overzicht van toepasbaarheid. Hierbij is
gebruik gemaakt van de volgende symbolen:
“-“
Geen of slechts beperkte support;
“+/-“ Support, maar onder condities;
“+”
Support;
Voor alle drie geldt: op en aanmerkingen zijn mogelijk via footnotes.
F01
-
-
+/-
+/-
?20
-
+
+
F02
-
-
+/-
-
+
+
+
+
F03
-
-
+/-
+/-
+
+
+
+
F04
-
-
-
+/-
+
+
+
+
F05
-
-
+/-
+
+
+
+
+
F06
-
-
+/-
+
+
+
+
+
F07
-
-
-
-
+
+
+
+
F08
-
-
+/-
+/-
+
+
+
+
F09
-
-
+/-
+/-
+
+
+
+
F10
-
-
+/-
+/-
+
+
+
+
F11
-
-
+/-
+/-
+
+
+
+
Gadgets &
OpenSocial
Portal Server
(WSRP)
Portal Server (JSR
168/286)
Portal Server
(proprietary)
RWD
Frameworks19
Eis:
MVC Engines18
Markup Templates
Scripting
Tech:
18
Voor MVC engines geldt dat in principe “alles kan”, je moet het alleen wel zelf bouwen.
19
Voor RWD geldt dat de support sterk afhankelijk is van het type framework. Sommigen zijn beter
dan anderen. Kans op maatwerk is zeer groot.
20
Afhankelijk van wat de portals implementeren
48/52
6
Conclusie
De belangrijkste functionele wens die ten grondslag ligt aan in dit onderzoek is het in samenhang
kunnen presenteren van diensten (services) van zowel SURFnet, instellingen als ook diensten van
derden. Omdat portaltechniek hiervoor de meest geschikte oplossingrichting lijkt, is gekeken naar de
technologieën die hiervoor beschikbaar zijn en wat de voor- en nadelen van de verschillende
technologieën zijn. Het Collaboration Infrastructure21 rapport geeft daarnaast aan dat om het voor
derden mogelijk te maken om delen hiervan te consumeren, het verstandig is om te kiezen voor een
oplossing op basis van een open koppelvak. Hiernaar wordt door SURFnet in het SURFworks
programma in 2009 onderzoek gedaan onder de werknaam “Collaboration Infrastructure”.
In het onderzoek is gekeken naar de volgende technologieën:
 Scripting

Markup templates

MVC Engines

RWD Frameworks

Portal Server (proprietary)

Portal Server (JSR168/286)

Portal Server (WSRP)

Gadgets & OpenSocial
Het is mogelijk portals te realiseren op basis van een geïntegreerde oplossing, zoals beschreven in het
eerste deel van hoofdstuk 2. In dit soort oplossingen is er vaak een sterke koppeling tussen
presentatie en functionaliteit, en ontbreekt het aan standaardisering in de interfaces hiertussen. Er
dient voor iedere nieuwe service een nieuwe maatwerkkoppeling gerealiseerd te worden met het
achterliggend bronsysteem. Naast de diverse Rapid Web Development Frameworks (RWD) die
beschreven zijn is ook Microsoft Sharepoint een product dat deze lijn volgt, met dien verstande dat als
gevolg van de grootte en functionele rijkdom van dit product, het niet zonder meer op een lijn gezet
kan worden met de andere RWD systemen. Juist omdat koppelingen steeds opnieuw aangemaakt
moeten worden is een dergelijk systeem niet erg geschikt om als presentatielaag voor een nog
onbekend aantal diensten te dienen.
Het scheiden van presentatie en functionaliteit, en vervolgens de communicatie tussen die twee lagen
standaardiseren, zal het opnemen van services in een portal aanzienlijk vereenvoudigen. Dat is de
basis van de JSR-168 portal-standaard. De portal omgeving biedt slechts die functionaliteit die nodig is
om weergave van de gebruikersinterface en om een beperkte set interacties af te handelen. Alle
andere zaken moeten door een applicatie server ‘achter’ de portal afgehandeld worden. JSR-168 is
volledig geaccepteerd binnen alle Java portalproducten, en nauwelijks daarbuiten. JSR-168 gaat
voornamelijk over de interoperabiliteit van portletcode in verschillende portalproducten, maar niet over
de interoperabiliteit van portlets zelf. Het mixen van services uit verschillende bronnen op
presentatieniveau is dan ook iets waar JSR-168 geen handvatten voor biedt. Hierdoor dient alsnog de
combinatie en eventuele integratie van de services in achterliggende applicatie server te gebeuren, die
vervolgens het resultaat ervan via de protal presenteerd. De opvolger van JSR-168, de JSR-286
standaard, biedt betere mogelijkheden op dit vlak, maar wordt helaas nog weinig geïmplementeerd.
21
Dit rapport is opgesteld in het kader van de technologieverkenning “Collaboration Infrastructure & Federated
Collaboratories” dat in de eerste helft van 2009 is opgesteld.
Hoewel JSR-168/286 in potentie een goede set standaarden biedt, is het feit dat er eigenlijk alleen op
Java goede implementaties bestaan een groot probleem. Microsoft producten implementeren in ieder
geval deze standaard niet. Dit maakt gebruik van deze standaarden als basis voor een generieke
integratie omgeving zeer lastig.
WSRP (Web Services for Remote Portlets) is expliciet bedacht om portlets uit verschillende
omgevingen te kunnen mengen in één presentatie omgeving. Hoewel de naam (‘portlets’) nog duidelijk
naar de java achtergrond van deze standaard verwijst, is deze standaard een echte
interoperabiliteitstandaard en daarmee platformonafhankelijk. Er zijn bijvoorbeeld ook in PHP en
ASP/.NET omgevingen implementaties en ook Microsoft Sharepoint is in staat WSRP portlets te
consumeren. Er zijn echter wel (aanzienlijke) nadelen met betrekking tot WSRP; zoals de performance
en complexiteit en ook de beveiliging behoeft de nodige aandacht. In veel gevallen is het eenvoudiger
om de onderliggende functionaliteit beschikbaar te stellen als service en deze met een “eigen” lokale
JSR-168 portlet richting de portal te ontsluiten.
OpenSocial gadgets introduceren een open, platform onafhankelijk, model voor het presenteren van
functionele componenten aan gebruikers. Hiervoor kunnen zowel portals, ‘gewone’ websites als ook
‘devices’ zoals mobiele telefoons gebruikt worden. Het maakt daarnaast in principe niet uit waar de
functionaliteit vandaan komt, en het is dus mogelijk in de presentatielaag gadgets uit verschillende
bronsystemen te mixen. Verder is de gadgets API relatief licht, en sterk geoptimaliseerd op gebruik in
een internetcontext.
De combinatie van deze zaken maakt OpenSocial bij uitstek geschikt voor gebruik als standaard voor
het leveren van functionaliteit richting een ‘consumer’ zoals bedoeld in de context van de Collaboration
Infrastructure. Daarnaast biedt OpenSocial als enige naast een standaard voor het weergegeven van
gadgets ook een set gestandaardiseerde data-API’s die met name in ‘sociale’ context waardevol zijn.
Zo zijn standaard personen, groepen en hun activiteiten in de API aanwezig.
OpenSocial is een vrij nieuwe standaard, maar mede dankzij uitgebreide ondersteuning in de industrie
(o.a. Google) wordt hier hard aan (door)ontwikkeld. Verder is het gebruik van de standaard
aanzienlijk. Op OpenSocial gebaseerde ‘social networks’ worden dagelijks door tientallen miljoenen
mensen gebruikt. Het lijkt er verder op dat de standaard op niet al te lange termijn een echte Open
Standaard gaat worden, nu de API is ondergebracht bij een onafhankelijke stichting.
OpenSocial kent echter ook een aantal nadelen. Deze liggen vooral op het gebied van privacy en
veiligheid. Omdat het relatief eenvoudig is via de OpenSocial API kennis te nemen van eigenschappen
van gebruikers, groepen en hun activiteiten, is het verstandig om OpenSocial applicaties alleen te
gebruiken indien de container waarin de gadgets draaien te vertrouwen is. Hierin zou SURFnet een
faciliterende rol kunnen spelen voor de doelgroep. Ten aanzien van de veiligheid dient bij een
mogelijke implementatie aanzienlijke aandacht geschonken te worden aan het afschermen van
gadgets om interacties tussen gadgets en de container waar ze binnen draaien en tussen de gadgets
onderling te voorkomen. Hiervoor is echter reeds technologie beschikbaar.
Wanneer de beschikbare technologieën worden afgezet tegen de doelstellingen van de Collaboration
Infrastructure lijkt een omgeving op basis van OpenSocial gadgets het meest geschikt. Geen van de
diensten van SURFnet, uitgezonderd SURFmedia, is out-of-the-box in staat zichzelf middels ook maar
één van de beschikbare portal technologieën in een portal te representeren. Dit zal naar verwachting
ook in hoge mate gelden voor de diensten van onze instellingen en diensten van marktpartijen. De
lichtgewicht OpenSocial API is echter relatief eenvoudig en vormt daarmee de kleinste barrière.
Daarnaast wordt OpenSocial reeds door grote spelers gebruikt. Hierdoor is er nu al veel functionaliteit
beschikbaar en lijkt doorontwikkeling voorlopig gegarandeerd. Het is verder de verwachting dat steeds
meer services Gadgets als additionele methodiek gaan aanbieden om de functionaliteiten van de
service beschikbaar te maken.
50/52
Om veiligheid en privacy voor de gebruikers te garanderen zou SURFnet een eigen, op OpenSocial
gebaseerde portal omgeving moeten aanbieden, waardoor goede controle over deze aspecten mogelijk
is. Door de SURFfederatie en groepsrelatie dienst te koppelen aan deze portal kan de SURFnet
‘context’ worden toegevoegd aan de omgeving. Vervolgens kan op relatief eenvoudige, controleerbare,
en gestandaardiseerde wijze Gadget functionaliteit van SURFnet, instellingen en mogelijk ook van
derden beschikbaar worden gemaakt voor eindgebruikers.
51/52
COLOFON
Dit Rapport is opgesteld in opdracht van het SURFworks programma 2009 en maakt deel uit van de
Proof of Concept Collaboration Infrastructure.
Tekst
Wouter Meijers (Everett)
Niels van Dijk (SURFnet)
Paul van Dijk (SURFnet)
Review
Remco Poortinga (SURFnet)
Paul van Dijk (SURFnet)
Floor Jas (SURFnet)
© SURFnet bv 2009
52/52
Download