如何安全地使用Eclipse p2配置文件?

时间:2011-06-17 00:46:31

标签: eclipse eclipse-rcp eclipse-plugin pde p2

当我尝试在Eclipse启动时更新Eclipse插件时遇到一些问题。我的程序在Eclipse启动时弹出Help -> Check for Updates对话框。但是,当用户快速进行更新时,Eclipse会抛出一个异常,说明p2配置文件正在使用中。我相信这是因为其他Eclipse作业在启动时使用p2配置文件,因此我的程序无法使用p2配置文件来更新插件。如何安全使用p2配置文件?如何单独使用p2配置文件?

我上传了在github上重现问题所需的最少代码。而且,我已经在an issue on the github repository中详细描述了问题以及重现它的步骤。

2 个答案:

答案 0 :(得分:0)

您可以从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,以便在运行profilechangeoperation完成时收到通知。

答案 1 :(得分:0)

My commit通过调用命令“org.eclipse.equinox.p2.ui.sdk.update”打开“检查更新”对话框,而不是调用以下方法。

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

令人惊讶的是,这一变化似乎解决了访问p2配置文件时竞争条件的问题。有没有人解释我的提交如何消除竞争条件?