【发布时间】:2009-10-14 09:29:12
【问题描述】:
我有一个模块化应用程序,它使用 OSGi 进行生命周期和依赖管理。但是,某些捆绑包在启动后需要一些时间才能准备就绪,例如,因为它们必须从某个地方获取数据。此外,它们可能无法在配置更新期间处理某些调用,例如,与数据库保持连接的包在更新连接参数时无法发送查询。
所以,在我看来,bundle 可以拥有比 OSGi 容器管理的状态更微妙的状态,并且由于它们会影响 bundle 交互,因此需要进行一些处理。我可以看到执行此操作的三种基本策略:
- 螺丝精巧,例如将所有初始化代码放入
BundleActivator.start()。如果获取该数据需要很长时间,那么捆绑软件就不会永远启动。我不能 100% 确定这会涵盖所有情况,而且似乎有点错误。 - 为我的捆绑包添加一个额外的事件系统,它们用于通知彼此更微妙的状态,例如“暂时不可用”或“现在真的准备好了”。这可能只是不必要的开销。
- 让捆绑包保持其自身更微妙的状态变化,无论如何都只接听电话,必要时在内部推迟它们。当调用者实际上可以更好地处理不可用性时,这可能不合适。
您对此有何一般性建议? OSGi 中是否有我可以使用的东西?
【问题讨论】: