X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2Fosgi%2FNetconfImplActivator.java;h=8946765aa6b000ea7ed9d60c05a1d5fdc0688925;hp=1e35597d9a6239d8566005b8bf3775b86282b082;hb=23fe9ca678ada6263fec5dd996f4025e4a32fcf5;hpb=cccc148d3cd2b5a2a7c86da2e74f2ea43fa00b93 diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfImplActivator.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfImplActivator.java index 1e35597d9a..8946765aa6 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfImplActivator.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfImplActivator.java @@ -10,20 +10,23 @@ package org.opendaylight.controller.netconf.impl.osgi; import io.netty.channel.local.LocalAddress; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.HashedWheelTimer; -import java.lang.management.ManagementFactory; import java.util.Dictionary; import java.util.Hashtable; import java.util.concurrent.TimeUnit; import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService; -import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer; import org.opendaylight.controller.netconf.impl.NetconfServerDispatcherImpl; import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory; import org.opendaylight.controller.netconf.impl.SessionIdProvider; import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactoryListener; +import org.opendaylight.controller.netconf.notifications.BaseNotificationPublisherRegistration; +import org.opendaylight.controller.netconf.notifications.NetconfNotificationCollector; import org.opendaylight.controller.netconf.util.osgi.NetconfConfigUtil; 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; @@ -32,38 +35,62 @@ public class NetconfImplActivator implements BundleActivator { private static final Logger LOG = LoggerFactory.getLogger(NetconfImplActivator.class); private NetconfOperationServiceFactoryTracker factoriesTracker; - private DefaultCommitNotificationProducer commitNot; private NioEventLoopGroup eventLoopGroup; private HashedWheelTimer timer; private ServiceRegistration regMonitoring; + private BaseNotificationPublisherRegistration listenerReg; + @Override public void start(final BundleContext context) { - - AggregatedNetconfOperationServiceFactory factoriesListener = new AggregatedNetconfOperationServiceFactory(); - startOperationServiceFactoryTracker(context, factoriesListener); - - SessionIdProvider idProvider = new SessionIdProvider(); - timer = new HashedWheelTimer(); - long connectionTimeoutMillis = NetconfConfigUtil.extractTimeoutMillis(context); - - - commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer()); - - NetconfMonitoringService monitoringService = startMonitoringService(context, factoriesListener); - - NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory( - timer, factoriesListener, idProvider, connectionTimeoutMillis, commitNot, monitoringService); - - eventLoopGroup = new NioEventLoopGroup(); - - NetconfServerDispatcherImpl.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcherImpl.ServerChannelInitializer( - serverNegotiatorFactory); - NetconfServerDispatcherImpl dispatch = new NetconfServerDispatcherImpl(serverChannelInitializer, eventLoopGroup, eventLoopGroup); - - LocalAddress address = NetconfConfigUtil.getNetconfLocalAddress(); - LOG.trace("Starting local netconf server at {}", address); - dispatch.createLocalServer(address); + try { + AggregatedNetconfOperationServiceFactory factoriesListener = new AggregatedNetconfOperationServiceFactory(); + startOperationServiceFactoryTracker(context, factoriesListener); + + SessionIdProvider idProvider = new SessionIdProvider(); + timer = new HashedWheelTimer(); + long connectionTimeoutMillis = NetconfConfigUtil.extractTimeoutMillis(context); + + final NetconfMonitoringServiceImpl monitoringService = startMonitoringService(context, factoriesListener); + + NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory( + timer, factoriesListener, idProvider, connectionTimeoutMillis, monitoringService); + + eventLoopGroup = new NioEventLoopGroup(); + + NetconfServerDispatcherImpl.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcherImpl.ServerChannelInitializer( + serverNegotiatorFactory); + NetconfServerDispatcherImpl dispatch = new NetconfServerDispatcherImpl(serverChannelInitializer, eventLoopGroup, eventLoopGroup); + + LocalAddress address = NetconfConfigUtil.getNetconfLocalAddress(); + LOG.trace("Starting local netconf server at {}", address); + dispatch.createLocalServer(address); + + final ServiceTracker notificationServiceTracker = + new ServiceTracker<>(context, NetconfNotificationCollector.class, new ServiceTrackerCustomizer() { + @Override + public NetconfNotificationCollector addingService(ServiceReference reference) { + listenerReg = context.getService(reference).registerBaseNotificationPublisher(); + monitoringService.setNotificationPublisher(listenerReg); + return null; + } + + @Override + public void modifiedService(ServiceReference reference, NetconfNotificationCollector service) { + + } + + @Override + public void removedService(ServiceReference reference, NetconfNotificationCollector service) { + listenerReg.close(); + listenerReg = null; + monitoringService.setNotificationPublisher(listenerReg); + } + }); + notificationServiceTracker.open(); + } catch (Exception e) { + LOG.warn("Unable to start NetconfImplActivator", e); + } } private void startOperationServiceFactoryTracker(BundleContext context, NetconfOperationServiceFactoryListener factoriesListener) { @@ -83,7 +110,6 @@ public class NetconfImplActivator implements BundleActivator { public void stop(final BundleContext context) { LOG.info("Shutting down netconf because YangStoreService service was removed"); - commitNot.close(); eventLoopGroup.shutdownGracefully(0, 1, TimeUnit.SECONDS); timer.stop();