是否可以在带有扩展点的OSGi应用程序中运行并发两个版本的扩展?
这就是我想要完成的事情:
我有一个扩展点Foo和一个带有符号名称Bar和版本1.0.0的模块插入扩展点并在模块A和模块B中运行(即实例化)。然后我安装一个带有错误修复的新扩展包, symbolicName Bar和版本1.0.1。我想只在模块B中运行这个新版本,因此模块A仍然使用Bar v1.0.0,模块B现在使用Bar v1.0.1。
从我所看到的情况来看,这是不可能的,因为扩展需要是一个单例,因此不能有相同符号名称的两个版本。所以我们当前的解决方案是让符号名称包含版本: symbolicName Bar_1_0_0和 symbolicName Bar_1_0_1。这样做,我们可以独立并同时运行每个模块中的每个版本,因为它们是技术上不相关的捆绑包,恰好插入到同一个扩展点中。
但是,将版本放在符号名称中似乎是错误的方法。这可以在不改变符号名称的情况下完成吗?我错过了什么吗?
答案 0 :(得分:2)
你没有遗漏任何东西。 Eclipse扩展系统(plugin.xml)仅适用于singleton bundle,这意味着多个版本不能同时处于活动状态。要使用非单例扩展,您必须使用不同的扩展系统。我知道OSGi服务可以处理这种情况。可能想看一下OSGi规范。