Администратор обновлений Eclipse позволяет отслеживать и просматривать Web-сайты обновлений Eclipse предопределенным способом. Web-сайт обновления содержит структуру категорий, отображаемых на панели, которые в свою очередь содержат комплекты. Отдельные комплекты можно проверить на панели Предварительный просмотр, входящей в состав администратора обновлений. Если установка комплекта возможна, на этой панели будет доступна кнопка "Установить сейчас", запускающая мастер установки Eclipse. В результате установки комплект добавляется в продукт.
Данный способ представления комплектов, доступных для установки, применяется по умолчанию, но не является единственным. При необходимости поставщики могут принять на себя ответственность за выполнение таких задач, как представление, регистрация и поиск комплектов, возвращая управление непосредственно перед установкой комплекта в Eclipse.
Администратор выполнения позволяет запустить сервлет, принимающий запросы от Web-страниц. По умолчанию эта функция не применяется: она активируется отдельно на странице Параметры>Установка/Обновление>Обновления по запросам от Web-страниц. При нажатии кнопки OK администратор обновлений запускает сервер приложений, предназначенный для обработки входящих запросов. В результате во все URL, открываемые с помощью администратора обновлений, добавляется закодированная информация об URL обратного вызова. Если начальный URL указывает на обычную Web-страницу, то в закодированный URL добавляется запрос с URL обратного вызова, применяемым для обращения к Eclipse:
http://acme.com/myApplication.html
преобразуется в
http://acme.com/myApplication.html?updateURL=<локальный-хост>:<локальный-порт>?org.eclipse.update/install
где 'локальный-хост' - это адрес сервера Eclipse, установленного в локальной системе, локальный порт выбирается в динамическом режиме при запуске сервера, а в запросе указано имя Web-приложения Eclipse и имя сервлета, обрабатывающего запрос.
Если исходный URL представляет собой запрос:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2
то в ходе кодировки нужная информация просто добавляется в запрос в качестве дополнительного параметра:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2&updateURL=<localhost>:<localport>?org.eclipse.update/install
Закодированные данные игнорируются обычными Web-страницами и запросами. Как правило, они не приводят к неполадкам и не изменяют оформление. В ходе кодировки в URL добавляется информация, доступная для поддерживающих ее страниц.
Поскольку Web-страница должна запускаться администратором обновлений, закладки на Web-сайты, указанные на панели Обновления, можно создать в качестве Web-закладок. Администратор обновлений обрабатывает такие закладки соответствующим образом. Если дважды щелкнуть на закладке, связанный URL откроется в Web-браузере (если операционная система и система организации окон поддерживают встроенный браузер, то оно откроется непосредственно в окне администратора обновлений; в противном случае, оно откроется в отдельном окне браузера).
Поставщики могут настроить Web-страницы обновлений произвольным образом: разработать Web-приложения, взаимодействующие с базами данных, либо использовать простой, статический текст на языке описания HTML. Применение более сложной архитектуры позволяет поставщикам представить пользователям дополнительные возможности. В частности, сложные запросы на поиск новых комплектов, обновлений и исправлений, эффективное внешнее оформление комплектов, статьи с описанием их возможностей, различные полезные ссылки, голосования, позволяющие определить наиболее популярные комплекты. Кроме того, при необходимости поставщики могут ограничить доступ пользователей к некоторым комплектам с помощью идентификации, требовать регистрацию пользователей и т.д.
Закодированную информацию можно извлечь различными способами. Например, можно использовать очень простую функцию JavaScript, приведенную ниже:
<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>
Данная функция выполняет анализ URL текущей страницы и возвращает аргументы запроса в виде массива.
Роль URL обратного вызова заключается в том, чтобы разрешить Web-страницам возвращать управление Eclipse. Web-страница сообщает Eclipse о комплекте, выбранном пользователем. Роль обновления по запросу Web-страницы не сводится к тому, чтобы сделать Web-сайты обновлений ненужными: они все равно необходимы, однако в этом сценарии они применяются в качестве расположения для хранения комплектов. Web-страница обращается к Eclipse и передает URL сайта обновления, а также ИД и версию выбранного комплекта. Эта информация кодируется с помощью исходного URL обратного вызова, в который добавляются дополнительные аргументы, образующие запрос.
Ниже перечислены аргументы, предусмотренные для запросов обратного вызова:
Возвращать управление Eclipse следует только после того, как пользователь выберет на Web-странице все необходимые комплекты, непосредственно перед загрузкой обновлений. Ниже приведена соответствующая реализация:
<input type="button" name="Download" value="Download" onClick="javascript:download('com.example.root', '1.0.0')">
В данном случае ИД комплекта и версии закодированы в теге кнопки.
Функцию загрузки можно реализовать следующим образом:
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; } }
В функции JavaScript, рассмотренной выше, URL обратного вызова, изначально закодированный в URL страницы, применяется для формирования запроса. После создания запроса браузеру предлагается открыть его. На этом этапе браузер вызывает сервлет Eclipse, обрабатывающий запрос, устанавливающий соединение с сайтом обновления поставщика (в данном случае - "http://acme.com/updateSite/") и выполняющий поиск комплекта в соответствии с указанными ИД и версией. Если ошибки отсутствуют, окно Eclipse перемещается на передний план и в нем открывается стандартный мастер установки. На данном этапе управление передается обратно Eclipse и установка завершается обычным образом.
Обратите внимание, что наличие URL обратного вызова имеет критическое значение для работы механизма в целом. Если страница с ссылкой или кнопкой загрузки расположена в структуре Web-сайта на несколько уровней ниже, корневая Web-страница (запущенная из администратора обновлений) должна передать URL обратного вызова всем страницам, открытым с ее помощью. Для этой цели подходят различные способы (непосредственная кодировка на странице, сохранение временного cookie, сохранение URL в сервлете, обрабатывающем страницы сайта, и т.д.) .