X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcore%2Fapi%2FAbstractConsumer.java;h=99a38ca43a5be68fd3c9bad328e20ab98d0578a4;hb=616a88111ea9603f0d6f93c7462e6dab39644fcf;hp=1fb73bc9a9fd9a1799a502051bcd1548c3917a1b;hpb=a251833f27fd00040904e2df316cd707c8129d1e;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java index 1fb73bc9a9..99a38ca43a 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java @@ -13,17 +13,24 @@ import java.util.Collections; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; +import org.osgi.util.tracker.ServiceTracker; +import org.osgi.util.tracker.ServiceTrackerCustomizer; -public abstract class AbstractConsumer implements Consumer, BundleActivator { +public abstract class AbstractConsumer implements Consumer, BundleActivator,ServiceTrackerCustomizer { + + + + + private BundleContext context; + private ServiceTracker tracker; + private Broker broker; - Broker broker; - ServiceReference brokerRef; @Override public final void start(BundleContext context) throws Exception { + this.context = context; this.startImpl(context); - brokerRef = context.getServiceReference(Broker.class); - broker = context.getService(brokerRef); - broker.registerConsumer(this,context); + tracker = new ServiceTracker<>(context, Broker.class, this); + tracker.open(); } @@ -32,9 +39,7 @@ public abstract class AbstractConsumer implements Consumer, BundleActivator { public final void stop(BundleContext context) throws Exception { stopImpl(context); broker = null; - if(brokerRef != null) { - context.ungetService(brokerRef); - } + tracker.close(); } protected void startImpl(BundleContext context) { @@ -49,4 +54,25 @@ public abstract class AbstractConsumer implements Consumer, BundleActivator { return Collections.emptySet(); } + + @Override + public Broker addingService(ServiceReference reference) { + if(broker == null) { + broker = context.getService(reference); + broker.registerConsumer(this, context); + return broker; + } + + return null; + } + + @Override + public void modifiedService(ServiceReference reference, Broker service) { + // NOOP + } + + @Override + public void removedService(ServiceReference reference, Broker service) { + stopImpl(context); + } }