X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fosgi%2FActivator.java;h=5d01b8decddf5884654a2e1a7e35c4e81390e4a8;hb=refs%2Fchanges%2F13%2F23413%2F26;hp=5642cc7188788fd74a7aeccf7ca8ffa97abd009e;hpb=ca923718510fffbf66c2a0c6f41a3638d59495e9;p=controller.git 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..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,71 +8,68 @@ package org.opendaylight.controller.netconf.confignetconfconnector.osgi; -import org.opendaylight.controller.config.yang.store.api.YangStoreService; +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.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; +public class Activator implements BundleActivator { -import static com.google.common.base.Preconditions.checkState; + private static final Logger LOG = LoggerFactory.getLogger(Activator.class); -public class Activator implements BundleActivator, YangStoreServiceTracker.YangStoreTrackerListener { + private ServiceRegistration osgiRegistration; - private static final Logger logger = LoggerFactory.getLogger(Activator.class); + @Override + public void start(final BundleContext context) throws Exception { + ServiceTrackerCustomizer schemaServiceTrackerCustomizer = new ServiceTrackerCustomizer() { - private BundleContext context; - private ServiceRegistration osgiRegistration; - private ConfigRegistryLookupThread configRegistryLookup = null; + @Override + 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 start(BundleContext context) throws Exception { - this.context = context; - YangStoreServiceTracker tracker = new YangStoreServiceTracker(context, this); - tracker.open(); - } + @Override + public void modifiedService(ServiceReference reference, ConfigSubsystemFacadeFactory service) { + LOG.warn("Config manager facade was modified unexpectedly"); + } - @Override - public void stop(BundleContext context) throws Exception { - if (configRegistryLookup != null) { - configRegistryLookup.interrupt(); - } - } + @Override + public void removedService(ServiceReference reference, ConfigSubsystemFacadeFactory service) { + LOG.warn("Config manager facade was removed unexpectedly"); + } + }; - @Override - public synchronized void onYangStoreAdded(YangStoreService yangStoreService) { - checkState(configRegistryLookup == null, "More than one onYangStoreAdded received"); - configRegistryLookup = new ConfigRegistryLookupThread(yangStoreService); - configRegistryLookup.start(); + ServiceTracker schemaContextProviderServiceTracker = + new ServiceTracker<>(context, ConfigSubsystemFacadeFactory.class, schemaServiceTrackerCustomizer); + schemaContextProviderServiceTracker.open(); } @Override - public synchronized void onYangStoreRemoved() { - configRegistryLookup.interrupt(); + public void stop(final BundleContext bundleContext) throws Exception { if (osgiRegistration != null) { osgiRegistration.unregister(); } - osgiRegistration = null; - configRegistryLookup = null; } - private class ConfigRegistryLookupThread extends Thread { - private final YangStoreService yangStoreService; - - private ConfigRegistryLookupThread(YangStoreService yangStoreService) { - super("config-registry-lookup"); - this.yangStoreService = yangStoreService; - } - - @Override - public void run() { - NetconfOperationServiceFactoryImpl factory = new NetconfOperationServiceFactoryImpl(yangStoreService); - logger.debug("Registering into OSGi"); - osgiRegistration = context.registerService(new String[]{NetconfOperationServiceFactory.class.getName()}, factory, - new Hashtable()); - } + 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); } + }