启动时更新OSGi捆绑包
我有几个OSGi包,每个都可以从OSGi包存储库更新。 当我启动OSGi框架(ApacheFelix)时,我希望启动第一个捆绑包,并检查所有已安装捆绑包的更新。如果有可用的更新,它应该更新每个更新(包括自身),然后继续启动(或者可能关闭,操作系统将重新启动应用程序) 如何以符合OSGi的方式最好地实现这一点启动时更新OSGi捆绑包,osgi,Osgi,我有几个OSGi包,每个都可以从OSGi包存储库更新。 当我启动OSGi框架(ApacheFelix)时,我希望启动第一个捆绑包,并检查所有已安装捆绑包的更新。如果有可用的更新,它应该更新每个更新(包括自身),然后继续启动(或者可能关闭,操作系统将重新启动应用程序) 如何以符合OSGi的方式最好地实现这一点 第一个包应该如何自我更新?它可以在启动时更新自身吗?您可以查看OSGi核心规范中的状态图(这应该是图28)。在这里,您可以看到处于启动状态的bundle只能移动到活动状态(抛出异常时会出现异
第一个包应该如何自我更新?它可以在启动时更新自身吗?您可以查看OSGi核心规范中的状态图(这应该是图28)。在这里,您可以看到处于启动状态的bundle只能移动到活动状态(抛出异常时会出现异常)。捆绑包只能在处于已安装或已解析状态时更新。为此,必须在其处于活动状态时停止 这里的问题是,当bundle处于启动状态时,您无法停止它。只要Activators start()方法被执行,bundle就仍然处于启动状态,而不是活动状态
您可以做的是在Bundle中启动一个线程,检查其活动状态,然后调用update()方法。但别忘了终止线程,否则垃圾收集器将无法释放当前包的jar文件的资源。您应该做以下几件事:
- 用于安装临时捆绑包的代码
- 用于临时束的激活器
- 对于代理人自身的bnd项目