ManagedServiceFactory
我知道这个问题已经有一段时间了,但是当我尝试使用声明式服务创建一个类似的组件时遇到了同样的问题。所以我想分享我的解决方案。也许其他人觉得它有用。我的问题是这样的:
我已经定义了一个组件(用 注释@Component
)。在我使用 felix 文件安装添加的每个配置中,我想要使用给定配置创建并立即激活该组件的实例。
首先,我尝试弄乱 和 的属性factory
,configurationPid
但@Component
所有这些都不需要,甚至返回错误的结果(maven 插件中的 felix 注释处理器在处理 configurationPid 时似乎有一个错误)。
我想出的解决方案:
package com.example.my;
@Component(
name = MyExampleComponent.FACTORY_PID,
configurationPolicy = ConfigurationPolicy.REQUIRE,
property = {"abc=", "exampleProp="}
)
public class MyExampleComponent {
public static final String FACTORY_PID = "com.example.my.component";
@Activate
protected void activate(BundleContext context, Map<String,Object> map) {
// ...
}
}
然后我为 felix file-install 创建了一个配置文件,名为com.example.my.component-test1.cfg
:
abc = Hello World
exampleProp = 123
部署后,它会自动在配置文件夹中创建一个文件夹结构,例如com/example/my/component
包含文件:
factory.config
内容:
factory.pid="com.example.my.component"
factory.pidList=[ \
"com.example.my.component.525ca4fb-2d43-46f3-b912-8765f639c46f", \
]
.
525ca4fb-2d43-46f3-b912-8765f639c46f.config
内容:
abc="Hello World"
exampleProp="123"
felix.fileinstall.filename="file:/..._.cfg"
service.factoryPid="com.example.my.component"
service.pid="com.example.my.component.525ca4fb-2d43-46f3-b912-8765f639c46f"
这525ca4fb-2d43-46f3-b912-8765f639c46f
似乎是一些随机生成的 ID(可能是 UUID)。