如何等待p2配置文件完成

时间:2013-10-07 14:38:41

标签: eclipse p2

我们正在使用p2来更新我们的RCP应用程序,到目前为止这个工作到目前为止我已经意识到在某些情况下P2 IProfile是emty(不是null但是空的)并且当然总是返回emty结果查询。

仅在启动应用程序时发生这种情况,这意味着如果我稍后请求相同的配置文件,我会获得完整的配置文件。

IProfile的Javadoc提到了profile是特定状态的快照这一事实。 所以我似乎提前查询了ProfileRegistry,但配置文件尚未完成。 我在javadoc上找不到任何方法来等待配置文件正确填充。

我会很感激任何可以帮助我很好地解决这个问题的人,因为使用睡眠(有效)并不是一个可接受的解决方案。 谢谢。

1 个答案:

答案 0 :(得分:0)

这是我实施的丑陋解决方案,基本上测试时间stam以确保配置文件已加载

// there seems to be a bug because if the agent is created too quickly then the profile is empty.
// so we loop until we get a proper profile
do {
    try {
       Thread.sleep(50);
    } catch (InterruptedException e) {
       interrupted = true;
    }
    if (agent != null) {
       agent.stop();
    }
    agent = agentProvider.createAgent(getP2AgentUri());
    IProfileRegistry profRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
    profile = profRegistry.getProfile(getP2ProfileId());
} while (profile != null && profile.getTimestamp() == 0 && !interrupted && !progress.isCanceled());

我使用的配置文件是 SELF ,但是我使用一种方法获取ProfileId,因为我有基于另一个外部p2配置文件的JUnit测试。