Как я могу безопасно использовать профиль Eclipse p2? - PullRequest
3 голосов
/ 17 июня 2011

При попытке обновить плагины Eclipse при запуске Eclipse у меня возникают некоторые проблемы.Моя программа выскакивает диалоговое окно на Help -> Check for Updates при запуске Eclipse.Но когда пользователь быстро приступает к обновлению, Eclipse выдает исключение, сообщающее, что профиль p2 используется.Я полагаю, что это потому, что другие задания Eclipse используют профиль p2 при запуске, и, таким образом, моей программе не удается использовать профиль p2 для обновления плагинов.Как я могу безопасно использовать профиль p2?Как я могу использовать профиль p2 изолированно?

Я загрузил минимальный фрагмент кода, необходимый для воспроизведения проблемы на github .И я подробно описал проблему и шаги по ее воспроизведению в проблеме в репозитории github .

Ответы [ 2 ]

0 голосов
/ 18 июня 2011

Мой коммит открывает диалоговое окно «Проверка обновлений», вызывая команду «org.eclipse.equinox.p2.ui.sdk.update» вместо вызова следующего метода.

org.eclipse.equinox.p2.ui.ProvisioningUI.openUpdateWizard(boolean, UpdateOperation, LoadMetadataRepositoryJob)

Удивительно, но это изменение, похоже, решает проблему с состоянием гонки при доступе к профилю p2.У кого-нибудь есть объяснение того, как мой коммит устраняет условие гонки?

0 голосов
/ 17 июня 2011

Вы можете получить ProvisioningJob из вашего UpdateOperation, пусть он принадлежит семейству запущенных заданий на смену профиля. Смотри org.eclipse.core.runtime.jobs.Job.belongsTo(Object).

Кроме того, у меня есть две идеи сделать это с помощью внутреннего API,

  1. попробуйте протестировать блокировку профиля, чтобы увидеть, изменяется ли он. org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.lockProfile(Profile)
  2. выполните то же, что и раньше, но перехватите IlegalStateException, затем зарегистрируйте ProvisioningListener на IProvisioningEventBus, чтобы получать уведомление о завершении работы профиля changechange.
...