我正在尝试在我的RAP应用程序中配置osgi-jax-rs-connector。
README表示要使用Configuration Admin Service进行配置。
ServiceReference caRef = context
.getServiceReference(ConfigurationAdmin.class.getName());
上面的代码始终会为null
返回ServiceReference
。
获取ConfigurationAdmin引用的正确方法是什么。
是否需要在之前启动另一个捆绑包?
答案 0 :(得分:1)
如果您运行Equinox,请确保已安装并启动Config Admin软件包(org.eclipse.equinox.cm)。
答案 1 :(得分:1)
尝试以这种方式获得ServiceReference正在为灾难做好准备。此代码无法处理OSGi中发生的99%的情况:配置管理员可能不存在,配置管理包在您之后启动,配置管理包在另一个启动级别,配置管理包已停止,并更新配置管理员。核心OSGi API非常强大,并且被许多中间件使用,但不应该用于应用程序代码,因为它需要对底层模型有很多了解并且非常容易出错。
远最简单,最可靠的解决方案是使用声明式服务(DS)和注释:
@Component
public class MyClass implements MyService {
ConfigurationAdmin ca;
@Reference void setCA(ConfigurationAdmin ca) { this.ca = ca; }
public void doMyService() {
// ... you can safely use ca
}
}
Gunnar可能是对的,可能还没有安装配置管理服务。但是,使用您当前的代码段,您的代码会在其他时间爆炸。