X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fosgi%2FActivator.java;h=b39549ed5b73095f44194a30e15d5b6cdaa182ce;hp=5642cc7188788fd74a7aeccf7ca8ffa97abd009e;hb=c99a5bb839b67beefc5a339e60438894ab4037c2;hpb=a8ceea323c972b086d3c9e6817dce53659ce8343 diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java index 5642cc7188..b39549ed5b 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java @@ -8,19 +8,20 @@ package org.opendaylight.controller.netconf.confignetconfconnector.osgi; -import org.opendaylight.controller.config.yang.store.api.YangStoreService; import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory; +import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; +import org.osgi.util.tracker.ServiceTracker; +import org.osgi.util.tracker.ServiceTrackerCustomizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Hashtable; - import static com.google.common.base.Preconditions.checkState; -public class Activator implements BundleActivator, YangStoreServiceTracker.YangStoreTrackerListener { +public class Activator implements BundleActivator { private static final Logger logger = LoggerFactory.getLogger(Activator.class); @@ -29,10 +30,43 @@ public class Activator implements BundleActivator, YangStoreServiceTracker.YangS private ConfigRegistryLookupThread configRegistryLookup = null; @Override - public void start(BundleContext context) throws Exception { + public void start(final BundleContext context) throws Exception { this.context = context; - YangStoreServiceTracker tracker = new YangStoreServiceTracker(context, this); - tracker.open(); + + ServiceTrackerCustomizer customizer = new ServiceTrackerCustomizer() { + @Override + public ConfigRegistryLookupThread addingService(ServiceReference reference) { + logger.debug("Got addingService(SchemaContextProvider) event, starting ConfigRegistryLookupThread"); + checkState(configRegistryLookup == null, "More than one onYangStoreAdded received"); + + SchemaContextProvider schemaContextProvider = reference.getBundle().getBundleContext().getService(reference); + + YangStoreServiceImpl yangStoreService = new YangStoreServiceImpl(schemaContextProvider); + configRegistryLookup = new ConfigRegistryLookupThread(yangStoreService); + configRegistryLookup.start(); + return configRegistryLookup; + } + + @Override + public void modifiedService(ServiceReference reference, ConfigRegistryLookupThread configRegistryLookup) { + logger.debug("Got modifiedService(SchemaContextProvider) event"); + configRegistryLookup.yangStoreService.refresh(); + + } + + @Override + public void removedService(ServiceReference reference, ConfigRegistryLookupThread configRegistryLookup) { + configRegistryLookup.interrupt(); + if (osgiRegistration != null) { + osgiRegistration.unregister(); + } + osgiRegistration = null; + Activator.this.configRegistryLookup = null; + } + }; + + ServiceTracker listenerTracker = new ServiceTracker<>(context, SchemaContextProvider.class, customizer); + listenerTracker.open(); } @Override @@ -42,27 +76,10 @@ public class Activator implements BundleActivator, YangStoreServiceTracker.YangS } } - @Override - public synchronized void onYangStoreAdded(YangStoreService yangStoreService) { - checkState(configRegistryLookup == null, "More than one onYangStoreAdded received"); - configRegistryLookup = new ConfigRegistryLookupThread(yangStoreService); - configRegistryLookup.start(); - } - - @Override - public synchronized void onYangStoreRemoved() { - configRegistryLookup.interrupt(); - if (osgiRegistration != null) { - osgiRegistration.unregister(); - } - osgiRegistration = null; - configRegistryLookup = null; - } - private class ConfigRegistryLookupThread extends Thread { - private final YangStoreService yangStoreService; + private final YangStoreServiceImpl yangStoreService; - private ConfigRegistryLookupThread(YangStoreService yangStoreService) { + private ConfigRegistryLookupThread(YangStoreServiceImpl yangStoreService) { super("config-registry-lookup"); this.yangStoreService = yangStoreService; } @@ -71,8 +88,7 @@ public class Activator implements BundleActivator, YangStoreServiceTracker.YangS public void run() { NetconfOperationServiceFactoryImpl factory = new NetconfOperationServiceFactoryImpl(yangStoreService); logger.debug("Registering into OSGi"); - osgiRegistration = context.registerService(new String[]{NetconfOperationServiceFactory.class.getName()}, factory, - new Hashtable()); + osgiRegistration = context.registerService(NetconfOperationServiceFactory.class, factory, null); } } }