X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker-config%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fmd%2Fsal%2Fdom%2Fimpl%2FDomBrokerImplModule.java;h=1adf404f0390e20234f7463b628df0b518d8465d;hb=refs%2Fchanges%2F87%2F57187%2F4;hp=fbae80b1f9fa4b3547101cc9005bf9c781e7c6bb;hpb=477c26a243acacadcff6233bb3787662a3cd3e21;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomBrokerImplModule.java b/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomBrokerImplModule.java index fbae80b1f9..1adf404f03 100644 --- a/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomBrokerImplModule.java +++ b/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomBrokerImplModule.java @@ -10,23 +10,30 @@ package org.opendaylight.controller.config.yang.md.sal.dom.impl; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; -import java.util.concurrent.TimeUnit; +import java.util.ArrayList; +import java.util.List; +import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter; -import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl; import org.opendaylight.controller.sal.core.api.BrokerService; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.controller.sal.dom.broker.BrokerImpl; -import org.opendaylight.controller.sal.dom.broker.GlobalBundleScanningSchemaServiceImpl; +import org.osgi.framework.BundleContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public final class DomBrokerImplModule extends org.opendaylight.controller.config.yang.md.sal.dom.impl.AbstractDomBrokerImplModule -{ +/** + * @deprecated Replaced by blueprint wiring + */ +@Deprecated +public final class DomBrokerImplModule extends org.opendaylight.controller.config.yang.md.sal.dom.impl.AbstractDomBrokerImplModule{ + private static final Logger LOG = LoggerFactory.getLogger(DomBrokerImplModule.class); + + private BundleContext bundleContext; public DomBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); @@ -45,38 +52,76 @@ public final class DomBrokerImplModule extends org.opendaylight.controller.confi @Override public java.lang.AutoCloseable createInstance() { - final DOMDataBroker asyncBroker= getAsyncDataBrokerDependency(); + // The services are provided via blueprint so retrieve then from the OSGi service registry for + // backwards compatibility. + + final List closeables = new ArrayList<>(); + DOMNotificationService domNotificationService = newTracker( + DOMNotificationService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES); + + DOMNotificationPublishService domNotificationPublishService = newTracker( + DOMNotificationPublishService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES); + + DOMRpcService domRpcService = newTracker( + DOMRpcService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES); + + DOMRpcProviderService domRpcProvider = newTracker( + DOMRpcProviderService.class, closeables).waitForService(WaitingServiceTracker.FIVE_MINUTES); + + DOMMountPointService mountService = newTracker(DOMMountPointService.class, closeables). + waitForService(WaitingServiceTracker.FIVE_MINUTES); + + SchemaService globalSchemaService = newTracker(SchemaService.class, closeables). + waitForService(WaitingServiceTracker.FIVE_MINUTES); + + final DOMDataBroker dataBroker = getAsyncDataBrokerDependency(); final ClassToInstanceMap services = MutableClassToInstanceMap.create(); - final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(getNotificationQueueDepth().getValue().intValue(), - getNotificationQueueSpin().longValue(), getNotificationQueuePark().longValue(), TimeUnit.MILLISECONDS); - services.putInstance(DOMNotificationService.class, domNotificationRouter); - services.putInstance(DOMNotificationPublishService.class, domNotificationRouter); + services.putInstance(DOMNotificationService.class, domNotificationService); + services.putInstance(DOMNotificationPublishService.class, domNotificationPublishService); - final SchemaService schemaService = getSchemaServiceImpl(); + final SchemaService schemaService = getSchemaServiceImpl(globalSchemaService); services.putInstance(SchemaService.class, schemaService); - services.putInstance(DOMDataBroker.class, asyncBroker); + services.putInstance(DOMDataBroker.class, dataBroker); - final DOMRpcRouter rpcRouter = new DOMRpcRouter(); - schemaService.registerSchemaContextListener(rpcRouter); - services.putInstance(DOMRpcService.class, rpcRouter); - services.putInstance(DOMRpcProviderService.class, rpcRouter); + services.putInstance(DOMRpcService.class, domRpcService); + services.putInstance(DOMRpcProviderService.class, domRpcProvider); - final DOMMountPointService mountService = new DOMMountPointServiceImpl(); services.putInstance(DOMMountPointService.class, mountService); - return new BrokerImpl(rpcRouter, services); + BrokerImpl broker = new BrokerImpl(domRpcService, domRpcProvider, services); + broker.setDeactivator(() -> { + for (AutoCloseable ac : closeables) { + try { + ac.close(); + } catch (Exception e) { + LOG.warn("Exception while closing {}", ac, e); + } + } + }); + + return broker; } - private SchemaService getSchemaServiceImpl() { + private WaitingServiceTracker newTracker(Class serviceInterface, List closeables) { + WaitingServiceTracker tracker = WaitingServiceTracker.create(serviceInterface, bundleContext); + closeables.add(tracker); + return tracker; + } + + private SchemaService getSchemaServiceImpl(SchemaService globalSchemaService) { final SchemaService schemaService; if(getRootSchemaService() != null) { schemaService = getRootSchemaServiceDependency(); } else { - schemaService = GlobalBundleScanningSchemaServiceImpl.getInstance(); + schemaService = globalSchemaService; } return schemaService; } + + public void setBundleContext(final BundleContext bundleContext) { + this.bundleContext = bundleContext; + } }