0

我正在尝试在我的 RAP 应用程序中配置osgi-jax-rs-connector 。

自述文件说使用配置管理服务进行配置。

ServiceReference caRef = context
    .getServiceReference(ConfigurationAdmin.class.getName());

上面的代码总是返回null. ServiceReference获取对 ConfigurationAdmin 的引用的正确方法是什么。之前是否需要启动另一个捆绑包?

4

2 回答 2

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 可能是对的,可能一开始就没有安装配置管理服务。但是,使用您当前的代码段,您的代码无论如何都会在另一个时间爆炸。

于 2013-08-08T07:35:32.740 回答
1

如果您运行 Equinox,请确保 Config Admin 包 (org.eclipse.equinox.cm) 已安装并启动。

于 2013-08-07T14:45:19.553 回答