只有在Apache Felix中绑定有效配置时才激活组件

时间:2017-04-12 16:31:21

标签: osgi apache-felix karaf declarative-services

我们正在使用声明性服务来创建组件。我们有一个硬性要求,即只有在配置存在且有效时,组件提供的服务才可用。当存在有效配置时,我们还需要组件(和服务)立即可用。

对于要求re:配置的存在,我们使用以下设置:

configurationPolicy=ConfigurationPolicy.REQUIRE

为了立即提供该组件,我们使用了以下设置:immediate = true

为了验证配置,我们在组件激活方法中应用验证逻辑,如果我们发现配置无效,则会引发ComponentException异常。

我们在Karaf 4.0.8中获得的结果是有意义的,除了服务看起来仍然可用(由服务列出),而组件未通过scr:components命令显示为ACTIVE。

以下是一个示例代码,其中配置仅在“计数”时才被视为有效。属性是< = 10:

@Component(immediate=true, configurationPolicy=ConfigurationPolicy.REQUIRE)
public class MyTestComponent implements MyTestInterface {

    int count=0;
    public void sayHello() {
        for (int i=0; i<count; i++)
            System.out.println("Hello!!");
    }

    @Activate
    public void activate(BundleContext context, Map<String,String> config) {
        count = Integer.valueOf(config.get("count"));
        if (count>10) {
            throw new ComponentException("Count should be <=10");
        }
        System.out.println("COUNT from config: " + count);
    }

    @Deactivate
    public void deactivate() {
        System.out.println("Component being de-activated");
    }
}

0 个答案:

没有答案