El gestor de actualizaciones de Eclipse puede utilizarse para visualizar y examinar sitios de actualización de Eclipse de forma predecible. Un sitio de actualización puede contener categorías que se muestran en el árbol de vista y, a su vez, estas categorías contienen características. Las características pueden inspeccionarse en la Vista previa del gestor de actualizaciones. Si una característica es una candidata de instalación válida, contendrá un botón "Instalar ahora" que lanzará el asistente de instalación de Eclipse. Cuando finalice la tarea de instalación, la característica formará parte del producto.
Esta forma estándar de presentar las características para la instalación no es la única. Los proveedores pueden encargarse de la presentación, el registro, la búsqueda y otras tareas desde el gestor de actualizaciones y devolver el control sólo cuando haya llegado realmente el momento de instalar una característica en un producto de Eclipse.
El gestor de actualizaciones tiene capacidad para ejecutar un servlet que pueda aceptar peticiones de páginas Web. Esta capacidad no es automática: debe activarse en la página Preferencias>Instalar/Actualizar>Actualizaciones desencadenadas desde la Web. Cuando se pulse Aceptar, el gestor de actualizaciones activará el servidor de aplicaciones que puede manejar las peticiones de entrada. Después de eso, todos los URL abiertos desde el gestor de actualizaciones se codificarán con la información de URL de la llamada de retorno. Si el URL inicial es una página Web habitual, el URL codificado contendrá la parte de consulta que añade el URL de llamada de retorno que debe utilizarse para llamar a Eclipse:
http://acme.com/myApplication.html
se convierte en
http://acme.com/myApplication.html?updateURL=<localhost>:<localport>?org.eclipse.update/install
donde 'localhost' es la dirección del servidor de Eclipse que se ejecuta en la máquina local, localport se selecciona dinámicamente cuando se inicia el servidor, y la consulta es el nombre de la aplicación Web de Eclipse y el nombre del servlet que maneja la petición.
Si el URL original ya es una consulta:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2
la codificación añadirá simplemente la información en forma de otro parámetro:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2&updateURL=<localhost>:<localport>?org.eclipse.update/install
Las consultas y las páginas web normales pasan por alto la codificación, y ésta no causa problemas ni afecta a la presentación. Simplemente añade información que una página que tenga conocimiento de ella puede utilizar.
Puesto que una página Web debe lanzarse desde el gestor de actualizaciones, los favoritos del sitio de la vista Actualizaciones pueden crearse como favoritos Web. El gestor de actualizaciones trata estos favoritos según su condición y, cuando el usuario efectúe una doble pulsación sobre uno de ellos, el URL se abrirá en un navegador (si hay un navegador incorporado disponible en la versión del sistema operativo y de ventanas, se abrirá directamente dentro del gestor de actualizaciones; de lo contrario, se abrirá en la ventana del navegador residente).
Los proveedores pueden configurar sus páginas web de actualización de la forma que deseen: pueden utilizar aplicaciones Web elaboradas respaldadas por bases de datos, o utilizar código HTML estático simple. La utilización de una arquitectura más compleja permite a los proveedores ofrecer funciones más valiosas a los usuarios. Algunas de las posibilidades son: búsquedas complejas de características nuevas, actualizaciones y arreglos electrónicos, presentaciones visuales variadas de características seleccionadas, artículos relativos a sus funciones, diversos enlaces útiles y votaciones acerca de las "características más populares". Además, los proveedores pueden habilitar la autenticación para restringir el acceso a algunas de las características, requerir el registro de los usuarios, etc.
Existen numerosos procedimientos para extraer la información codificada. Uno muy sencillo es utilizar la función Java Script como se muestra a continuación:
<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 función del ejemplo analiza el URL de la página actual y devuelve los argumentos de la consulta en forma de matriz.
El papel del URL de llamada de retorno consiste en permitir que las páginas Web devuelvan el control a Eclipse. Una vez que el usuario ha seleccionado una característica para instalar, debe devolverse a Eclipse para poder completarla. El papel de la actualización desencadenada desde la Web no consiste en convertir en obsoletos los sitios de actualización: siguen siendo necesarios, pero en este escenario se utilizan simplemente como ubicación en la que se almacenan físicamente las características. En algún momento, la página Web debe realizar una llamada de retorno a Eclipse y pasar el URL del sitio de actualización, así como el ID y la versión de la característica seleccionada. Esta información se codifica mediante la utilización del URL de llamada de retorno original y la adición de los argumentos, formando así una consulta.
Los argumentos de la consulta de llamada de retorno son:
La llamada de retorno a Eclipse debe realizarse cuando los usuarios hayan finalizado todas las selecciones en la página Web y lo único que falta es pulsar algún tipo de botón o hiperenlace "Bajar". Una implementación sencilla de esta función puede ser la siguiente:
<input type="button" name="Bajar" value="Download" onClick="javascript:download('com.example.root', '1.0.0')">
En el código anterior, el ID y las versiones de característica están codificadas por programa en el indicador button.
La función de bajada (download) puede implementarse de la forma siguiente:
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; } }
En la función JavaScript anterior, para formar la consulta se utiliza el URL de llamada de retorno que se codificó en el URL de la página del principio. Una vez creada la consulta, se solicita al navegador que la abra. Este paso provocará que el navegador llame al servlet de Eclipse, que procesará la consulta, se conectará con el sitio de actualización del proveedor (en este caso, "http://acme.com/updateSite/") y localizará la característica con el ID y la versión suministrados. Si todo el proceso se realiza correctamente, la ventana de Eclipse aparecerá en la parte superior y se abrirá el asistente de instalación que ya conocemos. En este punto, se encontrará de nuevo en Eclipse y podrá finalizar la instalación de la forma habitual.
Es importante señalar que el hecho de disponer del URL de llamada de retorno codificado es crucial para todo el mecanismo. Si la página que contiene el enlace o botón "bajar" ('download') se encuentra a varios niveles de profundidad en el mapa del sitio web, la página web raíz (la que se lanzó desde el gestor de actualizaciones) debe asegurarse de que el URL de llamada de retorno que se ha pasado a todas las páginas se ha abierto desde esa página. Esta operación puede realizarse de diversas maneras (codificando directamente en la página, guardando un cookie transitorio, almacenándolo en un servlet que sirve las páginas desde el sitio, etc.).