【问题标题】:OSGi Configuration Admin and MetaType ServiceOSGi 配置管理和元类型服务
【发布时间】:2018-11-13 08:26:48
【问题描述】:

我一直在使用 OSGi 配置管理在我们的程序中实现一些基本的配置功能。我现在开始研究MetaType Service 规范,因为我需要每个配置属性的类型信息。

我不清楚这两种服务如何交互。配置管理员处理本质上无类型的键/值对。 MetaType 服务知道配置属性的名称和类型(除其他外),但不知道它们的值。我的目标是为所有具有配置和相应元类型信息的组件动态生成配置/首选项对话框。根据 MetaType Service 规范,该服务旨在涵盖这个确切的用例。所以我觉得应该不会太难

我可以使用以下示例代码检索元类型信息:

ServiceReference metatypeRef = bundleContext.getServiceReference(MetaTypeService.class.getName());
MetaTypeService service = (MetaTypeService) bundleContext.getService(metatypeRef);
MetaTypeInformation information = service.getMetaTypeInformation(myBundle);

在检索到所需捆绑包的 MetaTypeInformation 对象后,我可以访问元类型 XML 定义中包含的所有信息。特别是可以访问 ObjectClassDefinition:

ObjectClassDefinition ocd = information.getObjectClassDefinition(pid, null);
AttributeDefinition[] attributes = ocd.getAttributeDefinitions(ObjectClassDefinition.ALL);

我的问题是:

  • 给定属性定义;如何检索基础财产的实际价值?我知道它的名字,但不知道它的价值。
  • 如何枚举当前存在的所有捆绑包中的所有组件的元类型信息(活动和非活动)?我知道如何通过配置管理界面列出所有配置。也许有一种方法可以从配置中获取 MetaTypeInformation?

【问题讨论】:

    标签: osgi


    【解决方案1】:

    Configuration Admin 和 MetaType 服务是独立但相关的规范。它们之间没有硬性联系,我认为这可能是有助于回答您的问题的要点之一。

    本质上,配置管理是配置记录的存储。每个配置记录都有一个唯一的持久标识符 (PID),如果配置记录用于工厂配置,那么它也将有一个工厂 PID。配置记录还包含许多键值对,其中键始终是字符串,值是一组有限的类型之一。

    另一方面,元类型是提供配置定义的工具。这些描述了配置中键和值的预期布局,包括与给定键关联的值的类型、值的最小/最大大小、允许值的枚举列表以及可能的默认值。每个键/值定义都保存在一个属性定义中,这些定义在一个与 PID 关联的对象类定义中组合在一起。

    重要的区别在于 Metatype 对运行时的实际配置一无所知(它只是关于配置应该是什么形状的信息)。同样,配置管理员对配置应该是什么形状一无所知,它只知道当前的值是什么。

    因此:

    给定属性定义;如何检索基础财产的实际价值?我知道它的名字,但不知道它的价值。

    您需要识别与包含属性定义的 ObjectClassDefinition 关联的 PID,然后使用它在 Configuration Admin 中查找相关的配置字典。如果 OCD 用于工厂 PID,那么您需要确定要查看该工厂 PID 的哪些配置。

    如何枚举当前存在(活动和非活动)的所有捆绑包中的所有组件的元类型信息?我知道如何通过配置管理界面列出所有配置。是否有办法从配置中获取 MetaTypeInformation?

    MetaTypeService 是 OSGi 服务注册表中的一项服务,您可以使用它来请求给定包的 MetaTypeInformation。如果您依次询问每个捆绑包的元类型信息,那么您将获得您正在寻找的信息。 Configuration Admin 和 Metatype 之间没有硬链接,因此 Configuration 对象无法知道它是否存在元类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2014-02-22
      相关资源
      最近更新 更多