我创建了一个带有公开(声明性)服务的 OSGi 包。如果我在调用 activate 时注意到有什么不对劲以至于我无法提供服务,我需要防止它被暴露。目前激活函数如下所示:
public void activate(ComponentContext context, Map<String, Object> properties) {
pid = (String) properties.get(Constants.SERVICE_PID);
try {
...
}
catch(Exception e) {
context.disableComponent(pid);
}
}
另一种选择是像这样包装/传播异常(或抛出一个新异常,取决于):
public void activate(ComponentContext context, Map<String, Object> properties) {
try {
...
}
catch(Exception e) {
throw new ComponentException("Some reason");
}
}
我在OSGi 服务平台服务纲要中的声明性服务部分中找不到指定的正确行为,但我可能遗漏了一些东西