【问题标题】:How to use a single config file for multiple osgi services如何为多个 osgi 服务使用单个配置文件
【发布时间】:2019-08-11 03:10:50
【问题描述】:

我正在使用OSGi R7,并且有一个案例可以方便地将单个配置文件用于两个单独的服务,而为每个服务使用一个新的配置文件。我尝试使用 @Component name 属性设置通用配置文件,但这不起作用(例如重复 PID 警告/错误 - 见下文)。 我尝试的另一件事是仅在一个服务中定义服务配置接口并尝试在两个服务中都使用它,但这似乎也不起作用,因为我没有在第二个服务的@Activate 方法中捕获断点.

@ObjectClassDefinition(name = "My 1st Service Config")
@interface FirstServiceConfig {

  String filePath() default "/path/to/my/file";

}
@Component(immediate = true, name = "com.my.generic.config", configurationPolicy = ConfigurationPolicy.REQUIRE, service = {
    FirstService.class })
@Designate(ocd = FirstServiceConfig.class)



@ObjectClassDefinition(name = "My 2nd Service Config")
@interface SecondServiceConfig {

  String filePath() default "/path/to/my/file";

}
@Component(immediate = true, name = "com.my.generic.config", configurationPolicy = ConfigurationPolicy.REQUIRE, service = {
    SecondService.class })
@Designate(ocd = SecondServiceConfig.class)

【问题讨论】:

    标签: java osgi configuration-files


    【解决方案1】:

    组件必须具有唯一的名称。但是您可以使用 Component.configurationPid 元素来指定组件应该使用的配置 pid。并且多个组件可以使用相同的配置pid。

    【讨论】:

      【解决方案2】:

      这里的另一位开发人员能够找到解决我的问题的解决方案,调查不同的服务配置问题 - 长话短说,解决方案是只设置与 1 个 PID 关联的 1 个配置,然后在第二个服务的激活方法中,您可以通过 ConfigurationAdmin 服务访问任何服务的配置,然后从键中检索配置值:

      @Reference
      ConfigurationAdmin configAdmin;
      
      @Activate
      public void activate() throws IOException {
        Configuration conf = configAdmin.getConfiguration("pid.value.goes.here");
        Dictionary<String, Object> props = conf.getProperties();
      
        filePath = String.valueOf(props.get("configFilePath"));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 2018-12-15
        • 2011-02-08
        • 1970-01-01
        • 2014-06-05
        相关资源
        最近更新 更多