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=5d01b8decddf5884654a2e1a7e35c4e81390e4a8;hp=3ba92b092ed2f5ccb067a8ee25aae3efd08a4d82;hb=23fe9ca678ada6263fec5dd996f4025e4a32fcf5;hpb=386d8f0ac5fa09ee5514d48284f1a4012f408b52 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 3ba92b092e..5d01b8decd 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,8 +8,11 @@ package org.opendaylight.controller.netconf.confignetconfconnector.osgi; +import java.util.Dictionary; +import java.util.Hashtable; +import org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacadeFactory; +import org.opendaylight.controller.netconf.api.util.NetconfConstants; 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; @@ -19,81 +22,54 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Dictionary; -import java.util.Hashtable; - -import static com.google.common.base.Preconditions.checkState; - public class Activator implements BundleActivator { - private static final Logger logger = LoggerFactory.getLogger(Activator.class); + private static final Logger LOG = LoggerFactory.getLogger(Activator.class); - private BundleContext context; - private ServiceRegistration osgiRegistration; - private ConfigRegistryLookupThread configRegistryLookup = null; + private ServiceRegistration osgiRegistration; @Override public void start(final BundleContext context) throws Exception { - this.context = context; + ServiceTrackerCustomizer schemaServiceTrackerCustomizer = new ServiceTrackerCustomizer() { - 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; + public ConfigSubsystemFacadeFactory addingService(ServiceReference reference) { + LOG.debug("Got addingService(SchemaContextProvider) event"); + // Yang store service should not be registered multiple times + ConfigSubsystemFacadeFactory configSubsystemFacade = reference.getBundle().getBundleContext().getService(reference); + osgiRegistration = startNetconfServiceFactory(configSubsystemFacade, context); + return configSubsystemFacade; } @Override - public void modifiedService(ServiceReference reference, ConfigRegistryLookupThread configRegistryLookup) { - logger.debug("Got modifiedService(SchemaContextProvider) event"); - configRegistryLookup.yangStoreService.refresh(); - + public void modifiedService(ServiceReference reference, ConfigSubsystemFacadeFactory service) { + LOG.warn("Config manager facade was modified unexpectedly"); } @Override - public void removedService(ServiceReference reference, ConfigRegistryLookupThread configRegistryLookup) { - configRegistryLookup.interrupt(); - if (osgiRegistration != null) { - osgiRegistration.unregister(); - } - osgiRegistration = null; - Activator.this.configRegistryLookup = null; + public void removedService(ServiceReference reference, ConfigSubsystemFacadeFactory service) { + LOG.warn("Config manager facade was removed unexpectedly"); } }; - ServiceTracker listenerTracker = new ServiceTracker<>(context, SchemaContextProvider.class, customizer); - listenerTracker.open(); + ServiceTracker schemaContextProviderServiceTracker = + new ServiceTracker<>(context, ConfigSubsystemFacadeFactory.class, schemaServiceTrackerCustomizer); + schemaContextProviderServiceTracker.open(); } @Override - public void stop(BundleContext context) { - if (configRegistryLookup != null) { - configRegistryLookup.interrupt(); + public void stop(final BundleContext bundleContext) throws Exception { + if (osgiRegistration != null) { + osgiRegistration.unregister(); } } - private class ConfigRegistryLookupThread extends Thread { - private final YangStoreServiceImpl yangStoreService; - - private ConfigRegistryLookupThread(YangStoreServiceImpl yangStoreService) { - super("config-registry-lookup"); - this.yangStoreService = yangStoreService; - } - - @Override - public void run() { - NetconfOperationServiceFactoryImpl factory = new NetconfOperationServiceFactoryImpl(yangStoreService); - logger.debug("Registering into OSGi"); - Dictionary properties = new Hashtable<>(); - properties.put("name", "config-netconf-connector"); - osgiRegistration = context.registerService(NetconfOperationServiceFactory.class, factory, properties); - } + private ServiceRegistration startNetconfServiceFactory(final ConfigSubsystemFacadeFactory configSubsystemFacade, final BundleContext context) { + final NetconfOperationServiceFactoryImpl netconfOperationServiceFactory = new NetconfOperationServiceFactoryImpl(configSubsystemFacade); + // Add properties to autowire with netconf-impl instance for cfg subsystem + final Dictionary properties = new Hashtable<>(); + properties.put(NetconfConstants.SERVICE_NAME, NetconfConstants.CONFIG_NETCONF_CONNECTOR); + return context.registerService(NetconfOperationServiceFactory.class, netconfOperationServiceFactory, properties); } + }