我已经定义了一个cluster_implementation
带有声明式服务 (DS) 组件定义的 OSGi 包 ( ),指定了一个导出的服务、一个激活方法和一个停用方法。
在 Activate 方法的主体中,我需要访问文件系统中不存在但捆绑在 OSGi 包本身中的一个文件。在激活方法期间,文件内容被检索为InputStream
using java.lang.ClassLoader:getResourceAsStream
。
这主要是有效的,但在一种情况下它不起作用。在我的应用程序中,由 导出的服务cluster_implementation
可以被其他捆绑包通过服务注册表或声明式服务或 spring-dm 引用。组件的激活策略是delayed
在第一次引用服务时激活它。
现在,如果激活是因为来自声明性服务组件的引用,则文件内容可以正常读取,如果激活是因为 spring-dm 组件需要该服务,那么InputStream
资源的NULL
! immediate="true"
现在我已经通过在组件属性中设置使组件立即激活来解决问题,但是我的要求是:
- 是否允许在 DS 组件激活期间以 Stream 的形式获取资源的内容?
- 如果这是合法的,为什么通过 spring-dm 激活会导致资源作为 Stream 不可访问?顺便说一句,资源在那里 - 如果我这样做,
Bundle.findEntries
我可以看到它!
我使用的 OSGi 框架是 Equinox 3.6。