我有一个现有的'管道和过滤器'我正在转换为bundle以在osgi框架内工作的应用程序。此应用程序使用管道管理器类,该类读取xml配置文件并使用基于xml文件输入的自定义过滤器组合/配置动态构建管道。
要在具有声明性服务的osgi框架中实现这一点,我的思维过程很简单 - 所有可能的过滤器服务都必须被引用(注入)到管道管理器服务包中,以便它可以动态地构建所请求的任何管道。但是这现在引出了一个问题,如果scr在所有引用的依赖服务都可用之前没有启动捆绑,那么这意味着如果任何过滤器捆绑包不能启动(或关闭),则整个管道管理器服务会关闭吗?
此外,在osgi中创建有状态(初始化,启动,停止等)服务时是否需要考虑特殊注意事项?
答案 0 :(得分:0)
是的,当所需服务不可用时,服务将关闭。但您可以将服务引用标记为可选。这样,当您的过滤器服务出现时,您的主要“管道管理器服务”将保持在线状态。但是您必须处理引用的服务可能不可用的情况。也许在实际需要时甚至需要插件过滤器。
对于在OSGi中运行的有状态服务,没有其他特殊注意事项。拥有有状态服务的所有问题仍然存在。