2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.yang.md.sal.dom.impl;
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ClassToInstanceMap;
12 import com.google.common.collect.MutableClassToInstanceMap;
13 import java.util.ArrayList;
14 import java.util.List;
15 import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
16 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
17 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
18 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService;
19 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
20 import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService;
21 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
22 import org.opendaylight.controller.sal.core.api.BrokerService;
23 import org.opendaylight.controller.sal.core.api.model.SchemaService;
24 import org.opendaylight.controller.sal.dom.broker.BrokerImpl;
25 import org.opendaylight.controller.sal.dom.broker.GlobalBundleScanningSchemaServiceImpl;
26 import org.osgi.framework.BundleContext;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
31 * @deprecated Replaced by blueprint wiring
34 public final class DomBrokerImplModule extends org.opendaylight.controller.config.yang.md.sal.dom.impl.AbstractDomBrokerImplModule{
35 private static final Logger LOG = LoggerFactory.getLogger(DomBrokerImplModule.class);
37 private BundleContext bundleContext;
39 public DomBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
40 super(identifier, dependencyResolver);
43 public DomBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final DomBrokerImplModule oldModule, final java.lang.AutoCloseable oldInstance) {
44 super(identifier, dependencyResolver, oldModule, oldInstance);
48 public void validate() {
50 final long depth = getNotificationQueueDepth().getValue();
51 Preconditions.checkArgument(Long.lowestOneBit(depth) == Long.highestOneBit(depth), "Queue depth %s is not power-of-two", depth);
55 public java.lang.AutoCloseable createInstance() {
56 // The services are provided via blueprint so retrieve then from the OSGi service registry for
57 // backwards compatibility.
59 final List<AutoCloseable> closeables = new ArrayList<>();
60 DOMNotificationService domNotificationService = newTracker(
61 DOMNotificationService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES);
63 DOMNotificationPublishService domNotificationPublishService = newTracker(
64 DOMNotificationPublishService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES);
66 DOMRpcService domRpcService = newTracker(
67 DOMRpcService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES);
69 DOMRpcProviderService domRpcProvider = newTracker(
70 DOMRpcProviderService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES);
72 DOMMountPointService mountService = newTracker(DOMMountPointService.class, closeables).
73 waitForService(WaitingServiceTracker.FIVE_MINUTES);
75 final DOMDataBroker dataBroker = getAsyncDataBrokerDependency();
77 final ClassToInstanceMap<BrokerService> services = MutableClassToInstanceMap.create();
79 services.putInstance(DOMNotificationService.class, domNotificationService);
80 services.putInstance(DOMNotificationPublishService.class, domNotificationPublishService);
82 final SchemaService schemaService = getSchemaServiceImpl();
83 services.putInstance(SchemaService.class, schemaService);
85 services.putInstance(DOMDataBroker.class, dataBroker);
87 services.putInstance(DOMRpcService.class, domRpcService);
88 services.putInstance(DOMRpcProviderService.class, domRpcProvider);
90 services.putInstance(DOMMountPointService.class, mountService);
92 BrokerImpl broker = new BrokerImpl(domRpcService, domRpcProvider, services);
93 broker.setDeactivator(new AutoCloseable() {
96 for(AutoCloseable ac: closeables) {
99 } catch(Exception e) {
100 LOG.warn("Exception while closing {}", ac, e);
109 private <T> WaitingServiceTracker<T> newTracker(Class<T> serviceInterface, List<AutoCloseable> closeables) {
110 WaitingServiceTracker<T> tracker = WaitingServiceTracker.create(serviceInterface, bundleContext);
111 closeables.add(tracker);
115 private SchemaService getSchemaServiceImpl() {
116 final SchemaService schemaService;
117 if(getRootSchemaService() != null) {
118 schemaService = getRootSchemaServiceDependency();
120 schemaService = GlobalBundleScanningSchemaServiceImpl.getInstance();
122 return schemaService;
125 public void setBundleContext(final BundleContext bundleContext) {
126 this.bundleContext = bundleContext;