2013-05-30 123 views
1

运行的扩展是否有可能运行同时两个版本的延伸与扩展点的OSGi应用程序?不同版本同时

这是我想达到什么:
我有一个扩展点Foo和与符号名酒吧和1.0.0版本的模块插入到模块A和模块B的扩展点和运行(即实例化) 。然后,我安装了一个新的扩展程序包,其中包含一个bug修复程序,symbolicName Bar和版本1.0.1。我只想在模块B中运行这个新版本,所以模块A仍然使用Bar v1.0.0,模块B现在使用Bar v1.0.1。

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

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

+0

“他们是技术上无关的捆绑”......好吧,他们不是,他们是同一捆绑的两个版本。 –

+0

@Neil,因为他们有不同的符号名称osgi可能知道他们包含相同的代码,只是不同的版本?两个真正不相关的bundle之间的唯一区别是它们的符号名称,所以如果一个bundle的两个确切副本有两个不同的符号名称,osgi如何知道? – Hilikus

+0

你说得对,OSGi将它们视为不同的捆绑包。我认为将它们称为“无关”是一种延伸,因为它们实际上是相同的,除了BSN之外。 –

回答

2

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

+0

我同意,离开了Eclipse扩展点,并采用纯OSGi服务 – Cristiano