【发布时间】: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。
-
我称它们为 技术上无关 ;) 感谢您的澄清