Есть ли способ проверить, есть ли у вас подключение / доступ к хранилищу p2 из rcp-приложения в Eclipse 3.7? - PullRequest
0 голосов
/ 01 августа 2011

У меня есть приложение RCP, которое использует обновление без заголовка с репозиторием p2, написанное в eclipse 3.6.После принятия решения о переходе на Eclipse 3.7 оказалось, что мой обходной путь не будет работать, так как некоторые классы больше не присутствуют в 3.7.В чем проблема в 3.6?

Проблема в Eclipse 3.6: Приложение проверяет наличие обновлений перед запуском основного плагина.Он пытается подключиться к хранилищу p2.Если есть подключение к нему, он ищет обновления, если они есть, обновления, если нет, он ничего не говорит об обновлении и продолжить.Если нет соединения, было исключение, которое находится глубоко в среде равноденствия / затмения, которое было обработано платформой, и оно нам никогда не показывается, поэтому приложение не может сказать, есть ли соединение или нет, в результате оно говорит, что естьобновлять нечего.

Решение: Через несколько дней, потратив на это решения, я нашел обходной путь для этого.Решением было создание класса для проверки «Состояние» хранилища, например, есть ли у меня связь с ним или нет.Вот мой класс:

public class RepositoryValidator {

private final static String urlExtension = "artifacts.jar"; //$NON-NLS-1$

private static RepositoryValidator instance;

private RepositoryValidator() {

}

public static RepositoryValidator sharedInstance() {
if (instance == null) {
instance = new RepositoryValidator();
}
return instance;
}

public IStatus checkRepositoryStatus(URI repoURI) {
try {
URI checkURI = new URI(repoURI.toString() + urlExtension);
ILog logger = Activator.getDefault().getLog();
logger.log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
"CHECK REPOSITORY \"artifacts.jar\" - " //$NON-NLS-1$
+ checkURI.toString()));
long result = RepositoryTransport.getInstance().getLastModified(
checkURI, new NullProgressMonitor());
if (result == 0) {
logger.log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
"RESULT FROM CHECK - " + result)); //$NON-NLS-1$
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"WRONG SERVER RESPONCE!!!"); //$NON-NLS-1$
}
} catch (Exception e) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"CONNECTION EXCEPTION", e); //$NON-NLS-1$
}
return new Status(IStatus.OK, Activator.PLUGIN_ID,
"REPOSITORY IS REACHABLE AND OK!!!"); //$NON-NLS-1$


}
}

Здесь я в основном проверяю, был ли изменен artifacts.jar, если я могу получить к нему доступ, у меня есть соединение, если нет, то нет.

Проблема в Eclipse 3.7: В решении для Eclipse 3.6 я использовал класс RepositoryTransport, которого больше нет в 3.7.Я пытался выяснить, был ли этот класс заменен другим, или в доступном классе есть метод, который мог бы достичь аналогичной функциональности.Я не смог найти ничего, связанного с предметом, ни с классом, ни с решением проблемы в 3.6.

Де-нибудь кто-нибудь знает что-нибудь связанное с этой проблемой?Есть ли решение для решения в самой версии 3.6, или они решили заменить этот класс какой-либо подобной функциональностью?Или, если у кого-то есть идеи по поводу другого решения этой проблемы?

Спасибо за продвижение.

1 Ответ

0 голосов
/ 03 августа 2011

Прежде всего, RepositoryTransport перемещается в пакет org.eclipse.equinox.internal.p2.transport.ecf во вновь введенном пакете после рефакторинга кода в 3.7.

Во-вторых, я не думаю, что ваш обходной путь - это хороший способ проверить, есть ли у него обновления или нет.Вы должны использовать p2 API для загрузки вашего репозитория, а затем запросить, содержит ли он обновления для вашей установки.

...