我们正在使用声明性服务来创建组件。我们有一个硬性要求,即只有在配置存在且有效时,组件提供的服务才可用。当存在有效配置时,我们还需要组件(和服务)立即可用。
对于要求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");
}
}