【问题标题】:Different versions of extensions running concurrently不同版本的扩展同时运行
【发布时间】:2013-05-30 18:05:10
【问题描述】:

是否可以在具有扩展点的 OSGi 应用程序中同时运行两个版本的扩展?

这是我想要完成的:
我有一个扩展点 Foo 和一个带有符号名称 Bar 和版本 1.0.0 的模块插入到扩展点并在模块 A 和模块 B 中运行(即实例化)。然后我安装了一个带有错误修复的新扩展包,symbolicName 栏和版本 1.0.1。我只想在模块 B 中运行这个新版本,所以模块 A 仍然使用 Bar v1.0.0,模块 B 现在使用 Bar v1.0.1。

据我所知,这是不可能的,因为扩展需要是单例,所以不能有两个版本的相同符号名称。所以我们当前的解决方案是让符号名称也包含版本:symbolicName Bar_1_0_0 和 symbolicName Bar_1_0_1。这样做我们可以独立并同时运行每个模块中的每个版本,因为它们在技术上是不相关的包,只是碰巧插入到同一个扩展点。

但是,将版本放在符号名称中似乎是错误的做法。这可以在不更改符号名称的情况下完成吗?我错过了什么吗?

【问题讨论】:

  • “它们在技术上是不相关的捆绑包”......不,它们不是,它们是同一个捆绑包的两个版本。
  • @Neil 因为它们有不同的符号名称,osgi 怎么可能知道它们包含相同的代码,只是版本不同?两个真正不相关的包之间的唯一区别是它们的符号名称,所以如果一个包的两个确切副本具有两个不同的符号名称,osgi 怎么知道?
  • 你说得对,OSGi 将它们视为不同的包。我只是认为称它们为“不相关”有点牵强,因为它们实际上是相同的,除了 BSN。
  • 我称它们为 技术上无关 ;) 感谢您的澄清

标签: java eclipse osgi equinox


【解决方案1】:

你没有错过任何东西。 Eclipse 扩展系统 (plugin.xml) 仅适用于单例包,这意味着多个版本不能同时处于活动状态。要拥有非单例扩展,您必须使用不同的扩展系统。我知道 OSGi 服务可以处理这种情况。可能想看看 OSGi 规范。

【讨论】:

  • 我同意,省略 Eclipse 扩展点并使用纯 OSGi 服务
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2021-09-11
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多