OSGI DS:声明性服务在没有xml文件的情况下工作

时间:2016-05-01 05:10:57

标签: java maven osgi apache-felix

我正在使用felix osgi + ds + weld cdi + pax cdi。所以我有以下服务:

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ServiceScope;

@Component(
    immediate = false,
    property={"label=stub"},
    scope=ServiceScope.PROTOTYPE
)
public class ServiceImpl implements ServiceI{

    @Override
    public String getMyString() {
        Component t=null;
        return "This is my string:"+t;
    }

}

要生成ds.xml文件,我使用maven-bundle-plugin,因为我知道这是生成ds xml文件的现代方法。所以一切似乎都有效。 Ds xml文件由maven插件生成并放入OSGI-INF。我决定检查如果删除这个ds.xml文件,felix会做什么。所以我删除了这个xml文件并清理了osgi缓存。我对结果感到非常惊讶。该服务仍然可以正常注入。我刚收到消息:找不到组件描述符条目'OSGI-INF / .... xml'。此外我认为编译后会删除@Component注释。这就是为什么我没有在我的osgi中安装org.osgi.service.component包。但是一切正常,所有捆绑都已解决。

所以问题 -

  1. 为什么DS服务在没有xml文件的情况下工作?
  2. 为什么我的osgi框架不需要org.osgi.service.component.annotations.Component? Felix包具有org.osgi.service.component.annotations包,但没有org.osgi.service.component.annotations.Component注释。

2 个答案:

答案 0 :(得分:2)

  1. 如果没有xml文件,DS无效。
  2. 可能您已将其从文件系统中删除,但未从部署到OSGi Framework中的捆绑包中删除。

    1. 这些注释只是构建时,它们不会创建运行时依赖项。

答案 1 :(得分:0)

我必须承认尼尔是对的。注释是构建时间。即使Felix SCR人员已经完成了一次妙招并试图进行运行,因为注释具有CLASS保留,因此除非他们解析类文件,否则它们不可用于运行时。

你必须看到别的东西。