The “Right” Way to Search for Cloud Service Configurations from Java in AEM 6

The AEM Cloud Services API is not very well documented and provides several somewhat awkward methods that you can use to find a given Configurationresource. Below are a few examples that I found "in the wild" that do this.

Method 1: Retrieve all Configurationsand repeat them until a named config is found:

public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) {
    Iterator configurations = configurationManager.getConfigurations(resource);
    while (configurations.hasNext()) {
        Configuration configuration = (Configuration) configurations.next();
        if (serviceName.equals(configuration.get("cq:cloudservicename", ""))) {
            return configuration;
        }
    }
    return null;
}

Method 2: Search for all cq:cloudserviceconfigsthat apply to the resource and query for the one you want:

public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) {
    HierarchyNodeInheritanceValueMap pageProperties = 
        new HierarchyNodeInheritanceValueMap(resource);

    String[] allServices = 
        pageProperties.getInherited("cq:cloudserviceconfigs", new String[0]);

    return configurationManager.getConfiguration(serviceName, allServices);
}

Method 3: Like method 2, but it looks like it will only work if the requested configuration is also defined for the first parent that has the property cq:cloudserviceconfigs?

public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) {

    Resource configurationResource = 
        configurationManager.getConfigurationResource(resource);

    if (configurationResource != null) {
        String[] cloudServiceConfigs = configurationResource.adaptTo(Page.class)
            .getProperties().get("cq:cloudserviceconfigs", String[].class);

        if (cloudServiceConfigs != null && cloudServiceConfigs.length > 0) {
            return configurationManager.getConfiguration(serviceName, cloudServiceConfigs);
        }
    }
    return null;
}

, , , , Configuration ConfigurationManager#getService(Resource resource, String serviceName) - , , , , , , .

, :

  • API , ConfigurationManager ?

  • , , ConfigurationManager ?

.

+4

All Articles