X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fmessagebus-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fmessagebus%2Fapp%2Fimpl%2FMessageBusAppImplModule.java;h=803e89a57eeb20e69d540afe8f42badbaf4ce858;hp=1c2b78a85b0a8e06e68e5056e303878d5df7b62f;hb=6c9c88f85589d635e3742cb2557044bf3a006d29;hpb=22c6645e0793c65ba1f0c1004d79cf83e770d765 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 1c2b78a85b..803e89a57e 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,5 +1,5 @@ -/** - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -7,15 +7,28 @@ */ package org.opendaylight.controller.config.yang.messagebus.app.impl; +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.mdsal.InitializationContext; -import org.opendaylight.controller.mdsal.Providers; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +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.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; import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; +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); @@ -26,50 +39,74 @@ public class MessageBusAppImplModule extends org.opendaylight.controller.config. return bundleContext; } - public void setBundleContext(BundleContext bundleContext) { + public void setBundleContext(final BundleContext bundleContext) { this.bundleContext = bundleContext; } - public MessageBusAppImplModule( ModuleIdentifier identifier, DependencyResolver dependencyResolver) { + public MessageBusAppImplModule(final ModuleIdentifier identifier, final DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); } - public MessageBusAppImplModule( ModuleIdentifier identifier, - DependencyResolver dependencyResolver, - MessageBusAppImplModule oldModule, - java.lang.AutoCloseable oldInstance) { + public MessageBusAppImplModule(final ModuleIdentifier identifier, final DependencyResolver dependencyResolver, + final MessageBusAppImplModule oldModule, final java.lang.AutoCloseable oldInstance) { super(identifier, dependencyResolver, oldModule, oldInstance); } @Override - protected void customValidation() {} + protected void customValidation() { + } @Override public java.lang.AutoCloseable createInstance() { - List namespaceMapping = getNamespaceToStream(); - InitializationContext ic = new InitializationContext(namespaceMapping); - final Providers.BindingAware bap = new Providers.BindingAware(ic); - final Providers.BindingIndependent bip = new Providers.BindingIndependent(ic); + 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 RpcProviderRegistry rpcRegistry = bindingCtx.getSALService(RpcProviderRegistry.class); + final MountPointService mountPointService = bindingCtx.getSALService(MountPointService.class); + final EventSourceRegistryWrapper eventSourceRegistryWrapper = new EventSourceRegistryWrapper(new EventSourceTopology(dataBroker, rpcRegistry)); + final NetconfEventSourceManager netconfEventSourceManager + = NetconfEventSourceManager.create(dataBroker, + domPublish, + domMount, + mountPointService, + eventSourceRegistryWrapper, + getNamespaceToStream()); + eventSourceRegistryWrapper.addAutoCloseable(netconfEventSourceManager); + LOGGER.info("Messagebus initialized"); + return eventSourceRegistryWrapper; - getBindingBrokerDependency().registerProvider(bap, getBundleContext()); - getDomBrokerDependency().registerProvider(bip); + } - AutoCloseable closer = new AutoCloseable() { - @Override public void close() { - closeProvider(bap); - closeProvider(bip); - } - }; + //TODO: separate NetconfEventSource into separate bundle, remove this wrapper, return EventSourceTopology directly as EventSourceRegistry + private class EventSourceRegistryWrapper implements EventSourceRegistry{ - return closer; - } + private final EventSourceRegistry baseEventSourceRegistry; + private final Set autoCloseables = new HashSet<>(); + + public EventSourceRegistryWrapper(EventSourceRegistry baseEventSourceRegistry) { + this.baseEventSourceRegistry = baseEventSourceRegistry; + } - private void closeProvider(AutoCloseable closable) { - try { - closable.close(); - } catch (Exception e) { - LOGGER.error("Exception while closing: {}\n Exception: {}", closable, e); + 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); + } + } }