如何将单个配置文件用于多个osgi服务

时间:2019-03-20 12:13:06

标签: java osgi configuration-files

我正在与OSGi R7一起工作,并且有一种情况,对于两个单独的服务使用单个配置文件会很方便,而对每个服务则使用一个新的配置文件。我尝试使用@Component名称属性来设置通用配置文件,但这没有用(例如,重复的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)

2 个答案:

答案 0 :(得分:0)

这里的另一位开发人员能够通过研究另一个服务配置问题找到我的问题的解决方案-长话短说,解决方案是仅设置与1个PID关联的1个配置,然后使用第二个服务的Activate方法,您可以通过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"));
}

答案 1 :(得分:0)

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