0
我有一个使用OSGi进行生命周期和依赖管理的模块化应用程序。但是,例如,某些软件包需要一段时间才能启动,因为它们必须从某处获取数据。另外,它们可能无法在配置更新期间处理某些调用,例如,保持与db的连接的包在更新连接参数时无法发送查询。如何扩展/修改OSGi生命周期管理?
因此,在我看来,一束可以比OSGi容器管理的状态更微妙的状态,并且因为它们影响包交互,所以需要进行一些处理。我可以看到这样做的三个基本策略:
- 螺丝微妙,并且例如把所有初始化代码放入
BundleActivator.start()
。如果获取这些数据需要花费很长时间,那么捆绑就不会永远开始。我不能100%确定这会覆盖所有情况,而且看起来有点不对。 - 使我的包与一个额外的事件系统,他们用来通知对方更微妙的状态,如“暂时不可用”或“真正准备好”。这可能只是不必要的开销。
- 让这个捆绑包保持其对自身更细微的状态更改,并且只需接受调用,并在必要时在内部推迟它们。当调用者实际上可以更好地处理不可用性时,这可能不合适。
你有什么一般的建议吗? OSGi中有甚么可以使用的东西?
因此,在(2)/(4)中的注册将不会从Activator.start()中完成,而是从在(1)中启动的后台线程中完成? – 2009-10-14 14:28:03
您可以从任何地方进行注册/跟踪 – basszero 2009-10-15 18:57:56