我们有两个捆绑包,都嵌入了相同第三方库的不同版本,我们必须使用不同的配置。不幸的是,库只能通过系统属性进行配置。
因此,我们尝试执行以下Activator
类:
如果OSGi框架同时启动两个bundle,它将无法工作。是否允许OSGi框架实现?这个解决方案安全吗?有没有其他方法可以为不同的包设置相同的系统属性为不同的值?
(如果有可能我们希望避免为这些捆绑设置不同的启动级别。)
答案 0 :(得分:3)
允许OSGi框架实现同时在给定的启动级别内启动bundle。因此,您可以将捆绑包放在不同的起始级别,以确保一个在另一个之前启动。
答案 1 :(得分:1)
在Felix和Equinox中,bundle install / resolve / start / stop / uninstall操作都发生在一个线程上。我无法回想起激活器是否在同一个线程上运行,但我认为它们确实存在。
答案 2 :(得分:1)
如何创建包装库初始化的OSGi服务呢?所以你只需要做一次。或者,服务可以同步初始化,因此确保它不会同时发生。
答案 3 :(得分:0)
强烈要求将它们放在单独的捆绑包中吗? 你如何处理这些库,将它们作为java包导出还是用它们创建服务? 如果您可以将两个库放在同一个包中,那么您将拥有完全控制权,该控制权首先被初始化,并且在一秒内被初始化。
如果您使用Export-Package将它们导出到捆绑包清单中,请注意,即使捆绑包处于RESOLVED状态(即已安装但尚未启动),其他捆绑包也可以使用导出的包。所以有人可能会在创建Bundle Activator之前调用lib的方法,并且已经处理了初始化....