【问题标题】:Dynamic sharing of data between 2 Plugins Eclipse rcp在 2 个插件 Eclipse rcp 之间动态共享数据
【发布时间】:2020-01-29 15:15:52
【问题描述】:

假设 eclipse rcp 应用程序中有两个插件 P1 和 P2 可用。

P1 和 P2 都是由不同的构建过程分别构建的

在我的场景中,根据用户的选择,基础产品中只有 p1、p2 或两个插件可用。

当两个插件都可用时,我想在插件 P1 和 P2 之间交换数据,否则插件将使用自己的数据。

OSGI 声明式服务在我的场景中能否正常工作,

有什么方法可以公开从插件 P1 返回 json 或字符串的服务 api,而 P2 可以在不依赖它的情况下使用它,我的意思是,插件 p2 应该只在 p1 存在时使用它,如果不存在,它应该可以正常工作。

请多多指教。

编辑: 谢谢你的建议

我完全同意拥有一个通用插件是理想的。

但是在我们的例子中,我们有一个基础产品,不幸的是我们无法控制,我的意思是我们可以将任何插件添加到基础存储库。

插件 P1 和 P2 是 2 个不同的产品,它们彼此独立工作,但具有可以相互补充的数据。我们喜欢从插件 p2 进行 api 调用,如果插件 p1 安装在基础产品上并使用数据来增强 p2 中的现有视图,否则仅显示 p2 数据。

我假设,使用 declerative 服务,插件 P2 可以使用作为 Eclipse 标准插件的一部分的 osgi 规范 api 调用插件 P1 公开的 api,而无需在插件 P1 和 P2 之间添加任何依赖关系。如果有任何选项可以实现这一点,请告诉我。

【问题讨论】:

    标签: eclipse eclipse-plugin osgi rcp declarative-services


    【解决方案1】:

    当然,您可以有可选的依赖项 - 但我的建议是引入 P3,以保留公共数据。使 P1 和 P2 依赖于该插件,并无条件地从通用“存储”插件中检索数据。

    如果您使 P1 依赖于 P2(反之亦然),您需要将此依赖项设为可选,并且您将引入两者的循环编译时依赖项。解决这种循环的一个好方法是引入一个通用的第三个模块,它只是实现了共同的需求。

    编辑:回答您的 cmets - 如果您让 P1 注册 P2 引用的服务,那么 P2 将依赖于 P1 的服务接口,除非您从公共 P3 注册一个类,两者都依赖于该类。话虽如此,没有什么可以阻止您将任意 JRE 类注册为服务 - 这将是非常规且奇怪的 hack,但我想您可以将 HashMap 注册为服务。感觉不干净、有异味、很黑、很奇怪——代码的维护者可能会困扰你,但我想从技术上讲这是可能的。我是不是说我不建议这样做,而且它很丑?

    【讨论】:

    • 我们有一个基础产品,不幸的是我们无法控制,插件 P1 和 P2 来自 2 个不同的产品,它们彼此独立工作,但具有可以相互补充的数据。如果 P1 安装在基础产品上,并且我们使用数据来增强 P1 中的现有视图,否则仅显示 P2 数据。我假设,使用 declerative 服务,插件 P2 可以使用 osgi 规范 api 调用插件 P1 公开的 api,这些 api 是 eclipse 标准插件的一部分,而不会在插件 P1 和 P2 之间添加任何依赖关系。有没有办法实现这个。
    • 您的意思是您希望 P1 和 P2 依赖于平台中可用的东西,并保存两者都可以破译的任意数据?您在寻找是/否的答案吗?或者对于可以用作 P1 和 P2 的公共数据接收器的插件的名称? y/n 答案是“是的,如果有这样的插件”,这暗示我自己无法回答第二个问题(就其名称而言),因为我不熟悉 eclipse 的生态系统和基础设施产品.
    • 是的,我希望 P1 向 osgi 平台或某种注册表注册服务,P2 使用相同的服务注册表通过服务名称动态发现它,如果注册的服务存在,则调用它真正了解 P1 或注册它的人。你认为它可以实现吗?
    • 查看我对答案的编辑。简而言之:“是的,但是……”,意思是“我不会去那里”
    • 感谢您的建议。我是 DS 的新手,正在寻找像 Rest Services 这样的东西,在你的调用者(浏览器)和提供服务的组件(rest services web applicaiton)中,除了 URL 之外,不会共享任何共同点,所有数据共享都是通过 JSON 进行的或 XML。我期待像 ServiceRegistry.CallService(ByServiceName of Plugin P1with Parameter) 这样的东西,这将返回我可以解析和使用插件 2 中的数据的字符串响应。
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2012-07-05
    • 2017-05-06
    • 1970-01-01
    • 2011-06-16
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多