Mises à jour déclenchées à partir du Web

Le gestionnaire de mises à jour d'Eclipse permet d'afficher et de parcourir les sites de mise à jour Eclipse de façon prévisible. Un site de mise à jour peut contenir les catégories affichées dans la vue en arborescence et ces catégories contiennent elles-mêmes des dispositifs. Les dispositifs peuvent être examinés dans la vue Aperçu à l'intérieur du gestionnaire de mises à jour. Si un dispositif constitue un candidat à l'installation possible, il contient un bouton "Install Now" (Installer maintenant) qui lancera l'assistant d'installation d'Eclipse. Une fois la tâche d'installation terminée, le dispositif fait partie du produit.

Ce moyen standard de présenter les dispositifs en vue de leur installation n'est pas le seul disponible. Des fournisseurs peuvent prendre en main les tâches de présentation, d'enregistrement, de recherche, etc., du gestionnaire de mises à jour et ne rendre le contrôle que lorsque le moment est venu d'installer effectivement un dispositif dans un produit Eclipse.

Le gestionnaire de mises à jour est capable d'exécuter un servlet qui peut accepter des requêtes provenant de pages Web. Cette fonction n'est pas automatique : elle doit être activée dans la page Préférences>Installation/Mise à jour>Web-triggered Updates (Mises à jour déclenchées à partir du Web). Lorsque le bouton OK est sélectionné, le gestionnaire de mises à jour active le serveur d'applications qui peut traiter des requêtes entrantes. Ensuite, toutes les URL ouvertes à partir du gestionnaire de mises à jour sont encodées avec les informations de l'URL de rappel. Si l'URL initiale est une page Web ordinaire, l'URL encodée contiendra la partie de la requête qui ajoute l'URL de rappel à utiliser pour appeler Eclipse :

http://acme.com/myApplication.html

becomes

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

où 'localhost' est l'adresse du serveur Eclipse qui s'exécute sur votre machine locale, le port local 'localport' est sélectionné de façon dynamique lors du démarrage du serveur et la requête est le nom de l'application Web Eclipse, ainsi que le nom du servlet qui gère la requête.

Si l'URL d'origine est déjà une requête :

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

l'encodage ajoutera simplement nos informations sous forme d'un autre paramètre :

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

L'encodage est ignoré par les pages Web et les requêtes ordinaires et il n'entraîne aucun incident ni n'affecte la présentation. Il ajoute simplement des informations pouvant être utilisées par une page capable de les identifier.

Du fait qu'une page Web doit être lancée à partir du gestionnaire de mises à jour, les signets de site de la vue Mises à jour peuvent être créés comme des signets Web. Le gestionnaire de mises à jour traite ces signets en conséquence et lorsque vous cliquez deux fois sur l'un d'eux, il ouvre l'URL dans un navigateur (si un navigateur intégré est disponible dans la version du système d'exploitation et de fenêtrage, il l'ouvre directement dans le gestionnaire de mises à jour ; sinon, il l'ouvre dans la fenêtre du navigateur résident).

Tâches pouvant être effectuées dans une page Web

Les fournisseurs peuvent définir leurs pages Web de mise à jour comme ils le souhaitent : ils peuvent utiliser des applications Web élaborées s'appuyant sur des bases de données ou un fichier HTML statique simple. L'utilisation d'une architecture plus complexe permet aux fournisseurs d'offrir plus de valeur aux utilisateurs. Des recherches complexes de nouveaux dispositifs, de mises à jour et de correctifs électroniques, des présentations visuelles riches de dispositifs sélectionnés, des articles sur leur fonctionnalité, des votes portant sur les "dispositifs les plus populaires" figurent parmi les nombreuses possibilités. Par ailleurs, les fournisseurs peuvent utiliser l'authentification pour limiter l'accès à certains dispositifs, exiger l'enregistrement des utilisateurs, etc.

Appel d'Eclipse à partir d'une page Web

Il existe différentes manières d'extraire les informations encodées. Une manière simple consiste à utiliser une fonction Java Script, comme illustré ci-dessous :

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

La fonction ci-dessus analyse l'URL de la page en cours et renvoie les arguments de requête sous forme de tableau.

Le rôle de l'URL de rappel est de permettre aux pages Web de rendre le contrôle à Eclipse. Une fois que l'utilisateur a sélectionné un dispositif à installer, il doit revenir à Eclipse pour terminer l'installation. Le rôle de la mise à jour déclenchée à partir du Web n'est pas de rendre les sites de mise à jour obsolètes : ces derniers sont toujours nécessaires, mais dans ce scénario, ils servent simplement d'emplacement où les dispositifs sont stockés physiquement. A un moment donné, la page Web doit rappeler Eclipse et transmettre l'URL du site de mise à jour, ainsi que l'ID et la version du dispositif sélectionné. Ces informations sont encodées à travers l'utilisation de l'URL de rappel d'origine et l'ajout des arguments et forment ainsi une requête.

Les arguments de la requête de rappel sont les suivants :

Le rappel d'Eclipse doit être effectué lorsque les utilisateurs ont terminé leurs sélections dans la page Web et qu'il ne reste plus qu'à appuyer sur un bouton ou un lien hypertexte de type 'Télécharger'. Voici une implémentation simple de cette fonction :

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

Dans le code ci-dessus, l'ID et la version des dispositifs sont figés dans la balise button.

La fonction de téléchargement peut être implémentée de la façon suivante :

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

Dans la fonction JavaScript ci-dessus, l'URL de rappel qui a été encodée dans l'URL de la page depuis le début est utilisée pour composer la requête. Une fois la requête créée, le navigateur est invité à l'ouvrir. Au cours de cette étape, le navigateur appelle le servlet Eclipse qui va traiter la requête, se connecter au site de mise à jour du fournisseur (dans le cas présent, "http://acme.com/updateSite/") et localiser le dispositif correspondant à l'ID et à la version fournis. Si tout se passe normalement, la fenêtre Eclipse s'affiche en haut et l'assistant d'installation habituel s'affiche. A ce stade, vous êtes revenu dans Eclipse et pouvez terminer l'installation de la manière habituelle.

Il est important de souligner que l'encodage de l'URL de rappel est crucial pour l'ensemble du mécanisme. Si la page qui contient le lien ou le bouton 'télécharger' se trouve à plusieurs niveaux de profondeur dans le plan du site Web, la page Web racine (celle qui est lancée à partir du gestionnaire de mises à jour) doit garantir que l'URL de rappel est transmise à toutes les pages ouvertes à partir de cette page. Il existe différents moyens d'y parvenir (encodage direct dans la page, enregistrement d'un cookie transitoire, stockage de ce dernier dans un servlet qui prend en charge les pages à partir du site, etc.).

 

Copyright IBM Corporation and others 2000, 2003.