gpt4 book ai didi

java - 配置服务 .. 使用 XML(而不是属性)

转载 作者:行者123 更新时间:2023-11-30 08:28:46 25 4
gpt4 key购买 nike

我有一个( bnd-annotated )组件,它实现了一个简单的 api 并将自己暴露为一个服务

package com.mycompany.impl;
import com.mycompany.api.IFoo;

@Component(designateFactory=FooImpl.Configuration.class)
class FooImpl implements IFoo {

interface Configuration {
String foo();
// ..
}

Configuration configuration;

@Activate
public void activate(Map properties) {
configuration = Configurable.createConfigurable(Configuration.class, properties);
// ..
}

}

它的配置是由 Felix FileInstall 从监视目录加载的,服务是由 Felix 配置服务实例化的(至少,我假设这就是发生的事情 - 我是 OSGi 的新手,请耐心等待)这个,与生成的 MetaType 描述符运行良好。

然而,就目前而言,FooImpl 需要结构化配置(列表的列表、列表的映射等),我想知道是否有一种优雅的 (*) 方式来通过类似的工作流程配置组件的实例;也就是说,配置发现和实例化/部署保持集中。

在我看来,配置服务规范管理映射 - 我是否必须滚动自己的配置服务和 FileInstall 才能呈现具有 xml/json/yaml 支持的结构化配置的组件?

  • 相对于在属性中定义 xml 配置文件的位置 ...confiception?并进行我自己的解析。

最佳答案

是和不是...

OSGi Configuration Admin 服务处理抽象的 Configuration 记录,这些记录基于平面图(实际上是 java.util.Dictionary,但本质上是同一件事)。 Config Admin 不知道底层物理存储的任何信息;它总是依赖于其他人来调用 ConfigurationAdmin 服务上的方法,即 getConfigurationcreateFactoryConfiguration 等。

调用 Config Admin 的“其他人”通常称为“管理代理”。 Felix FileInstall 是一个非常简单的管理代理示例,它读取 Java 属性格式的文件。实际上,FileInstall 可能简单,我认为它不适合生产部署——但那是一个单独的讨论。

听起来您想编写自己的管理代理来读取 XML 文件并将它们提供给 Config Admin。这确实不是一项艰巨的任务,您不应该害怕接受它。 Config Admin 的设计假设应用程序对配置数据存储有非常不同的要求,因此大多数应用程序必须编写自己的简单管理代理,这就是它没有定义自己的存储格式或位置的原因.

但是,一旦您的管理代理读取了配置数据,就必须将其作为映射/字典传递到配置管理中,然后将其作为映射传递给组件。因此,组件本身不会接收高度结构化的数据,例如树或嵌套 map 。虽然有一些灵 active :配置属性可以包含基本类型的列表;您还可以使用枚举值等。

关于java - 配置服务 .. 使用 XML(而不是属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com