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=7130dc350134578372348ce829bda08243a5303c;hp=1d18f063bcc062ed64fb077d7cc34d07369a8d2e;hb=b80124e3f7b11cf2f5e5bd4a6b033d855ff4d0d4;hpb=d245dda0d7f6e14891af8a3a8f44d20939e00ee4 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 1d18f063bc..7130dc3501 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 @@ -7,66 +7,93 @@ */ package org.opendaylight.controller.netconf.impl.osgi; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.util.HashedWheelTimer; import java.lang.management.ManagementFactory; import java.net.InetSocketAddress; +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.NetconfServerDispatcher; -import org.opendaylight.controller.netconf.impl.NetconfServerSessionListenerFactory; import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory; import org.opendaylight.controller.netconf.impl.SessionIdProvider; +import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider; import org.opendaylight.controller.netconf.util.osgi.NetconfConfigUtil; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.util.HashedWheelTimer; + public class NetconfImplActivator implements BundleActivator { private static final Logger logger = LoggerFactory.getLogger(NetconfImplActivator.class); private NetconfOperationServiceFactoryTracker factoriesTracker; private DefaultCommitNotificationProducer commitNot; - private NetconfServerDispatcher dispatch; private NioEventLoopGroup eventLoopGroup; private HashedWheelTimer timer; + private ServiceRegistration regMonitoring; @Override - public void start(final BundleContext context) throws Exception { - InetSocketAddress address = NetconfConfigUtil.extractTCPNetconfAddress(context, "TCP is not configured, netconf not available."); + public void start(final BundleContext context) { + final InetSocketAddress address = NetconfConfigUtil.extractTCPNetconfServerAddress(context, + NetconfConfigUtil.DEFAULT_NETCONF_TCP_ADDRESS); + final NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl(); + startOperationServiceFactoryTracker(context, factoriesListener); - NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl(); - factoriesTracker = new NetconfOperationServiceFactoryTracker(context, factoriesListener); - factoriesTracker.open(); - - SessionIdProvider idProvider = new SessionIdProvider(); + final SessionIdProvider idProvider = new SessionIdProvider(); timer = new HashedWheelTimer(); - NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory( - timer, factoriesListener, idProvider); + + long connectionTimeoutMillis = NetconfConfigUtil.extractTimeoutMillis(context); commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer()); - NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory( - factoriesListener, commitNot, idProvider); + SessionMonitoringService monitoringService = startMonitoringService(context, factoriesListener); + + NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory( + timer, factoriesListener, idProvider, connectionTimeoutMillis, commitNot, monitoringService); eventLoopGroup = new NioEventLoopGroup(); NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer( - serverNegotiatorFactory, listenerFactory); - dispatch = new NetconfServerDispatcher(serverChannelInitializer, eventLoopGroup, eventLoopGroup); + serverNegotiatorFactory); + + NetconfServerDispatcher dispatch = new NetconfServerDispatcher(serverChannelInitializer, eventLoopGroup, + eventLoopGroup); logger.info("Starting TCP netconf server at {}", address); dispatch.createServer(address); + context.registerService(NetconfOperationProvider.class, factoriesListener, null); + } + + private void startOperationServiceFactoryTracker(final BundleContext context, final NetconfOperationServiceFactoryListenerImpl factoriesListener) { + factoriesTracker = new NetconfOperationServiceFactoryTracker(context, factoriesListener); + factoriesTracker.open(); + } + + private NetconfMonitoringServiceImpl startMonitoringService(final BundleContext context, final NetconfOperationServiceFactoryListenerImpl factoriesListener) { + final NetconfMonitoringServiceImpl netconfMonitoringServiceImpl = new NetconfMonitoringServiceImpl(factoriesListener); + final Dictionary dic = new Hashtable<>(); + regMonitoring = context.registerService(NetconfMonitoringService.class, netconfMonitoringServiceImpl, dic); + + return netconfMonitoringServiceImpl; } @Override - public void stop(final BundleContext context) throws Exception { + public void stop(final BundleContext context) { logger.info("Shutting down netconf because YangStoreService service was removed"); commitNot.close(); - eventLoopGroup.shutdownGracefully(); + eventLoopGroup.shutdownGracefully(0, 1, TimeUnit.SECONDS); timer.stop(); + + regMonitoring.unregister(); + factoriesTracker.close(); } }