【问题标题】:OSGI DS: declarative services work without xml fileOSGI DS:声明式服务无需 xml 文件即可工作
【发布时间】:2016-08-26 02:06:27
【问题描述】:

我正在使用 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 注释。

【问题讨论】:

    标签: java maven osgi apache-felix


    【解决方案1】:

    我必须承认尼尔是对的。注释是构建时间。即使 Felix SCR 的人会发动政变并尝试在运行时执行它,因为注释具有 CLASS 保留,因此除非它们解析类文件,否则运行时不可用。

    你一定看到了别的东西。

    【讨论】:

      【解决方案2】:
      1. 如果没有 xml 文件,DS 将无法工作。

      您可能已将其从文件系统中删除,但未从部署到 OSGi 框架的捆绑包中删除。

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

      【讨论】:

      • 感谢您的回答。我查了三遍!我删除了里面的jar。证明很简单——osgi 框架给了我警告。你可以自己试试。
      • 我从 2004 年就开始使用 OSGi,不需要尝试。我不知道你到底做错了什么,但我保证 DS 不能在没有 XML 的情况下工作。
      • 那么,为什么 OSGI 会给我这个信息?
      • 因为清单中的 Service-Component 标头指向一个不存在的文件。
      • 好的。如果你不想尝试,那就忘记吧。我说我看到的和结果。你不信。顺便说一句,我使用 felix 框架 4.6.1 和 felix.scr.1.8.3.snapshot。
      猜你喜欢
      • 2012-10-01
      • 2010-11-09
      • 1970-01-01
      • 2012-04-27
      • 2015-12-05
      • 2011-10-14
      • 2013-10-09
      • 2018-05-20
      • 1970-01-01
      相关资源
      最近更新 更多