X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2FGlobalBundleScanningSchemaServiceImpl.java;h=60a7e81c4c046183e6ee59e0f27d48e5a15e90bc;hb=6f80291fa17b2bbe091fd0f8ae88b8c4ae34a411;hp=076fca6f10dbf10070b85ced50aee655c17c94d4;hpb=962d3eef6f172bc8bd66c242eda3250dbda39284;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/GlobalBundleScanningSchemaServiceImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/GlobalBundleScanningSchemaServiceImpl.java index 076fca6f10..60a7e81c4c 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/GlobalBundleScanningSchemaServiceImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/GlobalBundleScanningSchemaServiceImpl.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.sal.dom.broker; import static com.google.common.base.Preconditions.checkState; +import com.google.common.annotations.VisibleForTesting; import java.net.URL; import java.util.ArrayList; import java.util.Collections; @@ -36,48 +37,52 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -public class GlobalBundleScanningSchemaServiceImpl implements // -SchemaContextProvider, // -SchemaService, // -ServiceTrackerCustomizer, // -AutoCloseable { +public class GlobalBundleScanningSchemaServiceImpl implements SchemaContextProvider, SchemaService, ServiceTrackerCustomizer, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(GlobalBundleScanningSchemaServiceImpl.class); + private final ListenerRegistry listeners = new ListenerRegistry<>(); private final URLSchemaContextResolver contextResolver = new URLSchemaContextResolver(); private final BundleScanner scanner = new BundleScanner(); + private final BundleContext context; + private ServiceTracker listenerTracker; private BundleTracker>> bundleTracker; - private ListenerRegistry listeners; private boolean starting = true; - private BundleContext context; + private static GlobalBundleScanningSchemaServiceImpl instance; - public ListenerRegistry getListeners() { - return listeners; + private GlobalBundleScanningSchemaServiceImpl(final BundleContext context) { + this.context = Preconditions.checkNotNull(context); } - public void setListeners(final ListenerRegistry listeners) { - this.listeners = listeners; + public synchronized static GlobalBundleScanningSchemaServiceImpl createInstance(final BundleContext ctx) { + Preconditions.checkState(instance == null); + instance = new GlobalBundleScanningSchemaServiceImpl(ctx); + instance.start(); + return instance; } - public BundleContext getContext() { - return context; + public synchronized static GlobalBundleScanningSchemaServiceImpl getInstance() { + Preconditions.checkState(instance != null, "Global Instance was not instantiated"); + return instance; + } + + @VisibleForTesting + public static synchronized void destroyInstance() { + instance = null; } - public void setContext(final BundleContext context) { - this.context = context; + public BundleContext getContext() { + return context; } public void start() { checkState(context != null); - if (listeners == null) { - listeners = new ListenerRegistry<>(); - } listenerTracker = new ServiceTracker<>(context, SchemaServiceListener.class, GlobalBundleScanningSchemaServiceImpl.this); - bundleTracker = new BundleTracker>>(context, BundleEvent.RESOLVED - | BundleEvent.UNRESOLVED, scanner); + bundleTracker = new BundleTracker<>(context, BundleEvent.RESOLVED | BundleEvent.UNRESOLVED, scanner); bundleTracker.open(); listenerTracker.open(); starting = false; @@ -110,7 +115,7 @@ AutoCloseable { } @Override - public ListenerRegistration registerSchemaServiceListener(final SchemaServiceListener listener) { + public synchronized ListenerRegistration registerSchemaServiceListener(final SchemaServiceListener listener) { Optional potentialCtx = contextResolver.getSchemaContext(); if(potentialCtx.isPresent()) { listener.onGlobalContextUpdated(potentialCtx.get()); @@ -130,7 +135,7 @@ AutoCloseable { } - private void updateContext(final SchemaContext snapshot) { + private synchronized void updateContext(final SchemaContext snapshot) { Object[] services = listenerTracker.getServices(); for (ListenerRegistration listener : listeners) { try { @@ -208,7 +213,7 @@ AutoCloseable { } @Override - public SchemaServiceListener addingService(final ServiceReference reference) { + public synchronized SchemaServiceListener addingService(final ServiceReference reference) { SchemaServiceListener listener = context.getService(reference); SchemaContext _ctxContext = getGlobalContext(); @@ -219,7 +224,7 @@ AutoCloseable { } public synchronized void tryToUpdateSchemaContext() { - if(starting ) { + if (starting) { return; } Optional schema = contextResolver.tryToUpdateSchemaContext();