X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fmessagebus-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fmessagebus%2Fapp%2Fimpl%2FMessageBusAppImplModule.java;h=dd68714c963490dcb3064a90335ae891a8a1a9d9;hb=08631886ab131bdd74a8364c894792a9ef7253e8;hp=022292a6f37c0f0a7d03802d348b5c88eb83748d;hpb=1e884647502a8d91f8a57bde8193c60b9bbcce0d;p=controller.git diff --git a/opendaylight/md-sal/messagebus-impl/src/main/java/org/opendaylight/controller/config/yang/messagebus/app/impl/MessageBusAppImplModule.java b/opendaylight/md-sal/messagebus-impl/src/main/java/org/opendaylight/controller/config/yang/messagebus/app/impl/MessageBusAppImplModule.java index 022292a6f3..dd68714c96 100644 --- a/opendaylight/md-sal/messagebus-impl/src/main/java/org/opendaylight/controller/config/yang/messagebus/app/impl/MessageBusAppImplModule.java +++ b/opendaylight/md-sal/messagebus-impl/src/main/java/org/opendaylight/controller/config/yang/messagebus/app/impl/MessageBusAppImplModule.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -7,7 +7,9 @@ */ package org.opendaylight.controller.config.yang.messagebus.app.impl; -import java.util.List; +import java.util.HashSet; +import java.util.Set; + import org.opendaylight.controller.config.api.DependencyResolver; import org.opendaylight.controller.config.api.ModuleIdentifier; import org.opendaylight.controller.md.sal.binding.api.DataBroker; @@ -15,7 +17,10 @@ import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService; import org.opendaylight.controller.messagebus.app.impl.EventSourceTopology; -import org.opendaylight.controller.messagebus.app.impl.NetconfEventSourceManager; +import org.opendaylight.controller.messagebus.eventsources.netconf.NetconfEventSourceManager; +import org.opendaylight.controller.messagebus.spi.EventSource; +import org.opendaylight.controller.messagebus.spi.EventSourceRegistration; +import org.opendaylight.controller.messagebus.spi.EventSourceRegistry; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; @@ -23,8 +28,9 @@ import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class MessageBusAppImplModule extends - org.opendaylight.controller.config.yang.messagebus.app.impl.AbstractMessageBusAppImplModule { +import com.google.common.base.Preconditions; + +public class MessageBusAppImplModule extends org.opendaylight.controller.config.yang.messagebus.app.impl.AbstractMessageBusAppImplModule { private static final Logger LOGGER = LoggerFactory.getLogger(MessageBusAppImplModule.class); private BundleContext bundleContext; @@ -52,37 +58,50 @@ public class MessageBusAppImplModule extends @Override public java.lang.AutoCloseable createInstance() { - final List namespaceMapping = getNamespaceToStream(); final ProviderContext bindingCtx = getBindingBrokerDependency().registerProvider(new Providers.BindingAware()); final ProviderSession domCtx = getDomBrokerDependency().registerProvider(new Providers.BindingIndependent()); - final DataBroker dataBroker = bindingCtx.getSALService(DataBroker.class); final DOMNotificationPublishService domPublish = domCtx.getService(DOMNotificationPublishService.class); final DOMMountPointService domMount = domCtx.getService(DOMMountPointService.class); final MountPointService bindingMount = bindingCtx.getSALService(MountPointService.class); final RpcProviderRegistry rpcRegistry = bindingCtx.getSALService(RpcProviderRegistry.class); - final EventSourceTopology eventSourceTopology = new EventSourceTopology(dataBroker, rpcRegistry); - final NetconfEventSourceManager eventSourceManager = new NetconfEventSourceManager(dataBroker, domPublish, - domMount, bindingMount, eventSourceTopology, getNamespaceToStream()); - - final AutoCloseable closer = new AutoCloseable() { - @Override - public void close() { - eventSourceTopology.close(); - eventSourceManager.close(); - } - }; + final EventSourceRegistryWrapper eventSourceRegistryWrapper = new EventSourceRegistryWrapper(new EventSourceTopology(dataBroker, rpcRegistry)); + final NetconfEventSourceManager netconfEventSourceManager = NetconfEventSourceManager.create(dataBroker, domPublish,domMount, bindingMount, eventSourceRegistryWrapper, getNamespaceToStream()); + eventSourceRegistryWrapper.addAutoCloseable(netconfEventSourceManager); + LOGGER.info("Messagebus initialized"); + return eventSourceRegistryWrapper; - return closer; } - private void closeProvider(final AutoCloseable closable) { - try { - closable.close(); - } catch (final Exception e) { - LOGGER.error("Exception while closing: {}\n Exception: {}", closable, e); + //TODO: separate NetconfEventSource into separate bundle, remove this wrapper, return EventSourceTopology directly as EventSourceRegistry + private class EventSourceRegistryWrapper implements EventSourceRegistry{ + + private final EventSourceRegistry baseEventSourceRegistry; + private final Set autoCloseables = new HashSet<>(); + + public EventSourceRegistryWrapper(EventSourceRegistry baseEventSourceRegistry) { + this.baseEventSourceRegistry = baseEventSourceRegistry; } + + public void addAutoCloseable(AutoCloseable ac){ + Preconditions.checkNotNull(ac); + autoCloseables.add(ac); + } + + @Override + public void close() throws Exception { + for(AutoCloseable ac : autoCloseables){ + ac.close(); + } + baseEventSourceRegistry.close(); + } + + @Override + public EventSourceRegistration registerEventSource(T eventSource) { + return this.baseEventSourceRegistry.registerEventSource(eventSource); + } + } }