-
- 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<NetconfNotificationCollector, NetconfNotificationCollector> notificationServiceTracker =
+ new ServiceTracker<>(context, NetconfNotificationCollector.class, new ServiceTrackerCustomizer<NetconfNotificationCollector, NetconfNotificationCollector>() {
+ @Override
+ public NetconfNotificationCollector addingService(ServiceReference<NetconfNotificationCollector> reference) {
+ listenerReg = context.getService(reference).registerBaseNotificationPublisher();
+ monitoringService.setNotificationPublisher(listenerReg);
+ return null;
+ }
+
+ @Override
+ public void modifiedService(ServiceReference<NetconfNotificationCollector> reference, NetconfNotificationCollector service) {
+
+ }
+
+ @Override
+ public void removedService(ServiceReference<NetconfNotificationCollector> reference, NetconfNotificationCollector service) {
+ listenerReg.close();
+ listenerReg = null;
+ monitoringService.setNotificationPublisher(listenerReg);
+ }
+ });
+ notificationServiceTracker.open();
+ } catch (Exception e) {
+ LOG.warn("Unable to start NetconfImplActivator", e);
+ }