Über Web ausgelöste Aktualisierungen

Mit dem Update-Manager von Eclipse können Sie Eclipse-Update-Sites in einer vorhersehbaren Weise wiedergegeben und durchsucht werden. Eine Update-Site kann Kategorien enthalten, die in der Baumstruktursicht angezeigt werden, und diese Kategorien können wiederum Komponenten enthalten. Komponenten können im Update-Manager in der Sicht "Voranzeige" untersucht werden. Falls eine Komponente ein gültiger Kandidat für die Installation ist, ist sie mit einer Schaltfläche "Jetzt installieren" versehen, die den Installationsassistenten von Eclipse startet. Nach Abschluss der Installationstask ist die Komponente Bestandteil des Produkts.

Neben dieser Standardmethode können Komponenten für die Installation auf auch andere Weise dargestellt werden. Provider können vom Update-Manager die Darstellung, Registrierung, Suche und andere Tasks übernehmen und die Steuerung erst dann wieder zurückgeben, wenn eine Komponente tatsächlich in einem Produkt installiert werden soll.

Der Update-Manager kann ein Servlet ausführen, das Anforderungen von Webseiten akzeptieren kann. Diese Funktionsweise ist nicht automatisch gegeben, sondern muss auf der BenutzervorgabenseiteBenutzervorgaben > Installieren/Aktualisieren > Über Web ausgelöste Aktualisierungen aktiviert werden. Nach Auswahl von OKaktiviert der Update-Manager den Anwendungsserver, der eingehende Anforderungen verarbeiten kann. Danach werden alle URLs, die aus dem Update-Manager heraus geöffnet werden, mit Informationen für die Rückruf-URL codiert. Falls es sich bei der Anfangs-URL um eine normale Webseite handelt, enthält die codierte URL den Abfrageteil, der die Rückruf-URL zum Aufruf von Eclipse hinzufügt:

http://acme.com/myApplication.html

wird zu

http://acme.com/myApplication.html?updateURL=<localhost>:<localport>?org.eclipse.update/install

Hierbei ist "localhost" die Adresse des auf Ihrer lokalen Maschine ausgeführten Eclipse-Servers, und der Wert für "localport" wird dynamisch ausgewählt, wenn der Server gestartet wird. Die Abfrage ist der Eclipse-Webanwendungsname und der Name des Servlets, das die Anforderung verarbeitet.

Falls die Ausgangs-URL bereits eine Abfrage ist, z. B.

http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2

fügt die Codierung diese Informationen einfach als weiteren Parameter hinzu:

http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2&updateURL=<localhost>:<localport>?org.eclipse.update/install

Die Codierung wird von normalen Webseiten und Abfragen ignoriert und verursacht weder Probleme, noch wirkt sie sich auf die Darstellung aus. Sie fügt lediglich Informationen hinzu, die von einer Seite verwendet werden kann, der diese Informationen bekannt sind.

Da eine Webseite aus dem Update-Manager heraus gestartet werden muss, können Lesezeichen für Sites in der Sicht "Aktualisierungen" als Weblesezeichen erstellt werden. Der Update-Manager behandelt diese Lesezeichen entsprechend, und wenn Sie auf eines der Lesezeichen doppelklicken, öffnet er die URL in einem Browser. (Sofern ein eingebetteter Browser in der Version des Betriebs- und Fenstersystems verfügbar ist, wird er direkt im Update-Manager geöffnet. Andernfalls wird er im residenten Browserfenster geöffnet.)

In Webseite ausführbare Tasks

Provider können ihre Webseiten für Aktualisierungen ganz nach Wunsch einrichten, also Webanwendungen mit Datenbanken im Hintergrund entwickeln oder einfaches, statisches HTML verwenden. Die Verwendung einer komplexeren Architektur bringt den Benutzern größere Vorteile. Einige Möglichkeiten, die sich hierbei ergeben, sind komplexe Suchvorgänge nach neuen Komponenten, Aktualisierungen und elektronischen Fixes, die optisch anspruchsvolle Darstellung von ausgewählten Komponenten, Artikel zu deren Funktionalität sowie Abstimmungen über die "beliebtesten" Komponenten. Außerdem können Provider die Authentifizierung aktivieren und somit den Zugriff auf manche Komponenten einschränken, eine Benutzerregistrierung erforderlich machen usw.

Eclipse über Webseite aufrufen

Zum Extrahieren der codierten Informationen gibt es viele unterschiedliche Möglichkeiten. Eine sehr einfache Methode besteht in der Verwendung der im Folgenden dargestellten Funktion für Java-Scripts:

<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>

Diese Funktion nimmt eine Syntaxanalyse für die URL der aktuellen Seite vor und gibt die Abfrageargumente als Feldgruppe zurück.

Die Aufgabe der Rückruf-URL ist es, Webseiten die Rückgabe der Steuerung an Eclipse zu ermöglichen. Sobald ein Benutzer eine zu installierende Komponente auswählt, muss die Steuerung an Eclipse zurückgegeben werden, damit dies ausgeführt werden kann. Die Aufgabe von über das Web ausgelösten Aktualisierungen ist es, Update-Sites nicht veralten zu lassen: Sie werden weiterhin benötigt, in diesem Szenario jedoch einfach als Position verwendet, in der Komponenten physisch gespeichert sind. Webseiten müssen an einem bestimmten Punkt einen Rückruf an Eclipse ausgeben und die URL der Update-Site sowie die ID und die Version der ausgewählten Komponente an Eclipse übergeben. Diese Informationen werden unter Verwendung der ursprünglichen Rückruf-URL codiert, der die Argumente hinzugefügt werden, woraus sich somit eine Abfrage ergibt.

Die Argumente für die Rückrufabfrage lauten:

Der Rückruf an Eclipse sollte erfolgen, wenn die Benutzer alle gewünschten Angaben auf der Webseite ausgewählt haben und nur noch eine Schaltfläche für das Herunterladen oder einen Hyperlink auswählen müssen. Diese Funktionsweise könnte auf die folgende Weise ganz einfach implementiert werden:

<input type="button" 	name="Download" value="Download" 
			onClick="javascript:download('com.example.root', '1.0.0')">

Im vorstehenden Code sind die Komponenten-ID und die Versionen im Schaltflächentag fest codiert.

Die Downloadfunktion kann wie folgt implementiert werden:

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 der oben beschriebenen JavaScript-Funktion wird die Rückruf-URL für die Bildung der Abfrage verwendet, die in der Seiten-URL vom Anfang definiert war. Sobald die Abfrage erstellt wurde, wird der Browser aufgefordert, sie zu öffnen. Dieser Schritt bewirkt, dass der Browser das Eclipse-Servlet aufruft, das die Abfrage verarbeitet, die Verbindung zur Update-Site des Providers herstellt (in diesem Fall "http://acme.com/updateSite/") und nach der Komponenten mit der angegebenen ID und Version sucht. Wenn keine Fehler auftreten, wird das Eclipse-Fenster im Vordergrund angezeigt und ein vertrauter Installationsassistent geöffnet. An dieser Stelle befinden Sie sich wieder in Eclipse und können die Installation wie gewohnt fertig stellen.

Wichtiger Hinweis: Das Vorhanden sein der codierten Rückruf-URL ist für den gesamten Mechanismus von entscheidender Bedeutung. Wenn die Seite, die den Link oder die Schaltfläche für den Download enthält, sich in der Website-Übersicht einige Ebenen weiter unten befindet, muss die Stammwebseite (also die aus dem Update-Manager heraus gestartete Seite) sicherstellen, dass die Rückruf-URL an alle Seiten übergeben wird, die ausgehend von dieser Seite geöffnet wurden. Hierzu gibt es unterschiedliche Methoden (direkte Codierung in der Seite, Speicherung eines transienten Cookies, Speicherung der URL in einem Servlet, das die Seiten aus der Site bedient usw.)..