0

我们正在使用 p2 来更新我们的 RCP 应用程序,到目前为止效果很好,直到今天我意识到在某些情况下 P2 IProfile 是 emty(不是 null 而是空的)并且当然总是返回 emty 结果查询。

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

IProfile 的 Javadoc 提到 profile 是特定状态的快照这一事实。所以看来我要提前查询 ProfileRegistry 并且配置文件还没有完成。我在 javadoc 上找不到任何方法来等待配置文件被正确填写。

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

4

1 回答 1

0

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

// 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 测试。

于 2013-10-08T08:42:41.287 回答