我目前正在为 OSGi 服务“苦苦挣扎”,或者更具体地说,是在服务之间的布线上“苦苦挣扎”。我了解 DS、SCR 的基础知识以及组件实例获取服务的一般策略。无论如何,这是我的问题:
在 DS 之后,组件在 XML 文件中声明它们提供和使用的服务。在我的例子中,我对特定组件的“使用/引用”服务(由组件的 XML 文件中的“引用”标记声明)感兴趣。
例如,考虑一个正在运行的 OSGi 应用程序:一堆基于服务 (DS) 相互协作的包。现在,我想选择一个特定的捆绑包并查询它对它(可能)使用的服务的所有引用——无论这些服务当前是否可用。
参考 Apache Felix GoGo shell 命令,例如检查需求 *,我确实获得了有关导入包等的信息,但没有获得有关所使用服务的完整概述(-> 当前使用的服务和组件正在等待的服务)。
我已经阅读了框架 API,它提供了对服务注册、修改和注销的洞察力,但显然,它没有提供有关服务包正在等待什么的信息。按照 OSGi 核心规范,这可以通过Listener Hook来实现。
有没有一种方法,我可以查询例如 SCR 以获取特定捆绑包的所有引用服务?显然,SCR 应该读取 bundle 的 Service-Component-XML-file 并“注册”某种“Service Tracker”来跟踪消费/引用的服务——因此,bundle 的消费/引用服务的信息应该以某种方式可用,不是吗?
如果您能帮我解决这个问题,那就太好了。
谢谢,唐