Met Eclipse Update Manager kunt u op gestructureerde wijze Eclipse-updatesites renderen en doorbladeren. Een updatesite kan categorieën bevatten die in de boomstructuur worden afgebeeld, en deze categorieën kunnen op hun beurt weer features bevatten. Features kunnen worden geïnspecteerd in de view Preview in Update Manager. Als een feature kan worden geïnstalleerd, ziet u in genoemde view een knop met de tekst "Nu installeren" waarop u kunt klikken om de Eclipse-installatiewizard te starten. Na voltooiing van de installatietaak maakt de feature deel uit van het product.
Deze standaardmethode is niet de enige manier om te installeren features te presenteren. Leveranciers kunnen Update Manager-taken zoals het presenteren, registreren en zoeken van features overnemen en het beheer pas weer aan Update Manager overdragen wanneer de features daadwerkelijk in een Eclipse-product moeten worden geïnstalleerd.
Update Manager kan een servlet uitvoeren waarmee aanvragen van webpagina's kunnen worden verwerkt. Deze functionaliteit is standaard uitgeschakeld: u moet deze activeren op de pagina Voorkeuren > Installeren/Bijwerken > Webupdates. Wanneer u op OK klikt, activeert u de toepassingenserver die binnenkomende aanvragen kan afhandelen. Hierna worden alle URL's die vanuit Update Manager worden geopend, gecodeerd met de nodige callback-URL-informatie. Als de eerste URL een standaardwebpagina is, bevat de gecodeerde URL het querygedeelte waarmee de callback-URL voor Eclipse wordt toegevoegd:
http://acme.com/myApplication.html
wordt
http://acme.com/myApplication.html?updateURL=<localhost>:<localport>?org.eclipse.update/install
Hierbij geldt het volgende: 'localhost' (lokale host) is het adres van de Eclipse-server die wordt uitgevoerd op de lokale computer, 'localport' (lokale poort) wordt dynamisch geselecteerd wanneer de server wordt opgestart, en de query is de naam van de Eclipse-webtoepassing en de naam van de servlet waarmee de aanvraag wordt afgehandeld.
Als de oorspronkelijke URL al een query is:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2
wordt onze informatie eenvoudigweg toegevoegd als een extra parameter:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2&updateURL=<localhost>:<localport>?org.eclipse.update/install
De codering wordt genegeerd door standaardwebpagina's en query's en veroorzaakt geen problemen. Ook de presentatie wordt er verder niet door beïnvloed. Er wordt slechts informatie toegevoegd die van nut is voor pagina's waarop deze kan worden verwerkt.
Omdat een webpagina moet worden gestart vanuit Update Manager, kunnen sitebladwijzers in de view Updates worden gegenereerd als webbladwijzers. Deze bladwijzers worden in Update Manager ook als zodanig behandeld en wanneer u erop klikt, wordt de bijbehorende URL in een browser geopend. (Als er een ingebedde browser beschikbaar is in de desbetreffende versie van het besturings- en venstersysteem, wordt de URL rechtstreeks in Update Manager geopend. Anders wordt de URL geopend in het residente browservenster).
Leveranciers kunnen hun updatewebpagina's op elke gewenste manier instellen: sommigen gebruiken uitgebreide webtoepassingen en databases, anderen gebruiken eenvoudige, statische HTML. Leveranciers met een complexere architectuur hebben uiteraard een toegevoegde waarde voor gebruikers. Uitgebreide zoekfuncties voor nieuwe features, updates en e-fixes, veelzijdige visuele presentaties van geselecteerde features, artikelen over de werking ervan, allerlei nuttige links, 'meest populaire features'-verkiezingen...de mogelijkheden zijn ongekend. Bovendien kunnen leveranciers een verificatiesysteem instellen om de toegang tot sommige features te beperken, te vereisen dat gebruikers zich registreren, enzovoort.
Er zijn allerlei verschillende manieren om de gecodeerde informatie te extraheren. U kunt dit heel eenvoudig doen met de onderstaande Java-scriptfunctie:
<SCRIPT LANGUAGE="JavaScript"> function getArgs() { var args = new Object(); var query = location.search.substring(1); var pairs = query.split("&"); for (var i=0; i<pairs.length; i++) { var pos = pairs[i].indexOf('='); if (pos == -1) continue; var argname = pairs[i].substring(0, pos); var value = pairs[i].substring(pos+1); args[argname] = unescape(value); } return args; } </SCRIPT>
De hierboven weergegeven functie ontleedt de URL van de huidige pagina en retourneert query-argumenten als een array.
De functie van de callback-URL is om ervoor te zorgen dat webpagina's het beheer weer overdragen aan Eclipse. Als de gebruiker eenmaal een te installeren feature heeft geselecteerd, moet het beheer worden overgedragen aan Eclipse om deze taak te voltooien. De functie van webupdates is niet om updatesites overbodig te maken: updatesites zijn nog steeds nodig, maar in dit scenario worden ze slechts gebruikt als locatie waar features fysiek zijn opgeslagen. Op een gegeven moment moet een callback plaatsvinden van de webpagina naar Eclipse en de URL van de updatesite worden doorgegeven, evenals het ID en de versie van de geselecteerde feature. Deze informatie wordt gecodeerd door de oorspronkelijke callback-URL te gebruiken, daar de nodige argumenten aan toe te voegen en zo een query te maken.
De argumenten voor de callbackquery zijn:
De callback naar Eclipse moet worden uitgevoerd wanneer gebruikers alle nodige selecties op de webpagina hebben gemaakt en alleen nog maar op een 'Download'-knop of -hyperlink hoeven te klikken. Hier volgt een eenvoudige voorbeeldimplementatie van deze voorziening:
<input type="button" name="Download" value="Download" onClick="javascript:download('com.example.root', '1.0.0')">
In de code hierboven zijn het ID en de versie van de feature hard-coded in de tag van de knop.
De downloadfunctie kan als volgt worden geïmplementeerd:
function download(id, version) { var args = getArgs(); if (args.updateURL) { var updateURL = args.updateURL; var callback = updateURL+"?server= "+escape("http://acme.com/updateSite/")+ "&feature="+escape(id+'_'+version)+"&backURL="+escape(location); location = callback; } }
In de Java-scriptfunctie hierboven wordt query gemaakt op basis van de callback-URL die in het begin in de pagina-URL is gecodeerd. Nadat de query is gemaakt, wordt de browser verzocht om deze te verwerken. Hiertoe roept de browser de Eclipse-servlet aan, die vervolgens de query verwerkt, verbinding maakt met de updatesite van de leverancier (in dit geval "http://acme.com/updateSite/") en de feature met het opgegeven ID en versienummer opzoekt. Als alles naar behoren verloopt, wordt het Eclipse-venster op de voorgrond geopend en wordt de bekende installatiewizard gestart. Vanaf dat moment werkt u opnieuw in Eclipse en kunt u de installatie op de gebruikelijke wijze voltooien.
Het is belangrijk te weten dat dit hele mechanisme afhankelijk is van de juiste codering van callback-URL's. Als de pagina met de 'Download'-link of -knop zich enkele niveaus lager in de websitestructuur bevindt, moet de eerste webpagina (die gestart is vanuit Update Manager) ervoor zorgen dat de callback-URL wordt doorgegeven aan alle pagina's die vanuit die pagina worden geopend. Dit kan op meerdere manieren worden bereikt, bijvoorbeeld door de URL rechtstreeks te coderen in de pagina, of op te slaan in een tijdelijke cookie of in een servlet waarmee de pagina's van de site worden aangeboden.