In this article we will explore ConfigurationAdmin interface. Service for administering configuration data.
ConfigurationAdmin is a dictionary of properties. To identify a target service’s dictionary use its PID.
Sharing as code snippet that reads “rootmapping.target” configuration of the OOTB “Day CQ Root Mapping” service.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.techrevel.dam.core.servlets; | |
import java.io.IOException; | |
import java.util.Dictionary; | |
import javax.servlet.Servlet; | |
import org.apache.sling.api.SlingHttpServletRequest; | |
import org.apache.sling.api.SlingHttpServletResponse; | |
import org.apache.sling.api.servlets.HttpConstants; | |
import org.apache.sling.api.servlets.SlingAllMethodsServlet; | |
import org.apache.sling.commons.osgi.PropertiesUtil; | |
import org.osgi.service.cm.Configuration; | |
import org.osgi.service.cm.ConfigurationAdmin; | |
import org.osgi.service.component.annotations.Component; | |
import org.osgi.service.component.annotations.Reference; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
@Component(service = Servlet.class, property = { "sling.servlet.methods=" + HttpConstants.METHOD_GET, | |
"sling.servlet.paths=" + "/apps/techrevel/accessserviceconfig" }) | |
public class AccessServiceConfig extends SlingAllMethodsServlet { | |
private final Logger LOGGER = LoggerFactory.getLogger(getClass()); | |
@Reference | |
private ConfigurationAdmin configAdmin; | |
/** | |
* The method fetches the Post Process Observation configuration | |
* | |
* @throws IOException | |
*/ | |
private void getConfigs() throws IOException { | |
Configuration taxonomyFeedConfig = configAdmin | |
.getConfiguration("com.day.cq.commons.servlets.RootMappingServlet"); | |
Dictionary<String, Object> properties = taxonomyFeedConfig.getProperties(); | |
LOGGER.debug("[getConfigs] – Root Mapping Target: {}", | |
PropertiesUtil.toString(properties.get("rootmapping.target"), "")); | |
} | |
@Override | |
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { | |
getConfigs(); | |
} | |
} |
When a target service’s configuration is updated, config details would also refresh in ConfigurationAdmin API. Thus, if you read configuration once updates are persisted, you would get the updated values. Example: if we access above servlet after updating the “rootmapping.target”, we would receive the updated value in logs.