Month: July 2014

ConfigurationAdmin Through OSGI Component Service

One of the fundamental requirement to create a OSGi service to read OSGI config to read  configurable properties .

1. Create Osgi Config Node under your apps  and read that through Service like this

2. Sample OSGI Component reads default com.day.cq.mailer.DefaultMailService PID.

package com.abc.ch.service;
import java.io.IOException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(immediate=true)
@Service(AbcOsgiConfigService.class)
public class AbcOsgiConfigService {
    
    private final Logger LOGGER = LoggerFactory
            .getLogger(AbcOsgiConfigService.class);
    
    @Reference
    ConfigurationAdmin configurationAdmin;
    
    public void activate(ComponentContext ctx){
        LOGGER.info(” activating “);
        BundleContext bundleCtx=ctx.getBundleContext();
        ServiceReference ref = bundleCtx.getServiceReference(ConfigurationAdmin.class.getName());
        
        if (ref != null) {
            configurationAdmin = (ConfigurationAdmin) bundleCtx.getService(ref);
            Configuration config;
            try {
              config = configurationAdmin.getConfiguration(“com.day.cq.mailer.DefaultMailService”);
              LOGGER.info(” Got the Config”+config.getProperties().get(“smtp.host”).toString());
            } catch (IOException e) {
                LOGGER.error(“Error trying to look up datasource configuration”, e);
            }
          }       
    }   
}