如何在AEM中跨多个OSGI服务共享配置

时间:2017-04-18 22:27:49

标签: osgi cq5 aem

在AEM中,我需要配置字符串列表并在多个服务之间共享。完成此任务的最佳方法是什么?该列表需要在运行时配置。

1 个答案:

答案 0 :(得分:4)

您可以创建一个配置的专用配置服务,并由需要一个或多个配置值的所有其他OSGi服务引用。

配置服务示例

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.osgi.service.component.ComponentContext;

@Service(ConfigurationService.class)
@Component(immediate = true, metatype = true)
public class ConfigurationService {

    @Property
    private static final String CONF_VALUE1 = "configuration.value1";
    private String value1;

    @Property
    private static final String CONF_VALUE2 = "configuration.value2";
    private String value2;

    @Activate
    public void activate(final ComponentContext componentContext) {
        this.value1 = PropertiesUtil.toString(componentContext.get(CONF_VALUE1), "");
        this.value2 = PropertiesUtil.toString(componentContext.get(CONF_VALUE2), "");
    }

    public String getValue1() {
        return this.value1;
    }

    public String getValue2() {
        return this.value2;
    }
}

这是这类课程的最低要求。但它将创建一个可配置的OSGi服务,您可以在Apache Felix Configuration Manager(/system/console/configMgr)中进行配置。

注意:在metatype = true注释中使用@Component非常重要。

下一步是在"消费"中引用此服务。服务。

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;

@Service(MyService.class)
@Component(immediate = true, metatype = true)
public class MyService {

    @Reference
    private ConfigurationService configurationService;

    @Activate
    public void activate(final ComponentContext componentContext) {
        this.configurationService.getValue1();
    }
}

注意:此示例使用Apache SCR注释,该注释可与开箱即用的AEM一起使用。您可以在官方文档中了解有关此示例(@Service@Component@Property@Reference)中使用的SCR注释的更多信息:Apache Felix SCR Annotation Documentation