X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fconfig%2Factor_system_provider%2Fimpl%2FActorSystemProviderModule.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fconfig%2Factor_system_provider%2Fimpl%2FActorSystemProviderModule.java;h=8c2e8d05463684107460ae347ea9d235e1d71c80;hp=89f296d47dea08f93396ef6431eee2459acd7df9;hb=dceb9db7853dabfbd4abdfb3d886a79871097831;hpb=2608b7032d0d019f5125704609eaaa0590c4598a diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/actor_system_provider/impl/ActorSystemProviderModule.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/actor_system_provider/impl/ActorSystemProviderModule.java index 89f296d47d..8c2e8d0546 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/actor_system_provider/impl/ActorSystemProviderModule.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/actor_system_provider/impl/ActorSystemProviderModule.java @@ -8,6 +8,12 @@ package org.opendaylight.controller.config.yang.config.actor_system_provider.impl; +import akka.actor.ActorSystem; +import com.google.common.collect.ForwardingObject; +import org.opendaylight.controller.cluster.ActorSystemProvider; +import org.opendaylight.controller.cluster.ActorSystemProviderListener; +import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.osgi.framework.BundleContext; public class ActorSystemProviderModule extends AbstractActorSystemProviderModule { @@ -27,11 +33,53 @@ public class ActorSystemProviderModule extends AbstractActorSystemProviderModule } @Override - public java.lang.AutoCloseable createInstance() { - return new ActorSystemProviderImpl(bundleContext); + public boolean canReuseInstance(AbstractActorSystemProviderModule oldModule) { + return true; + } + + @Override + public AutoCloseable createInstance() { + // The service is provided via blueprint so wait for and return it here for backwards compatibility. + WaitingServiceTracker tracker = WaitingServiceTracker.create( + ActorSystemProvider.class, bundleContext); + ActorSystemProvider delegate = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES); + return new ForardingActorSystemProvider(delegate, tracker); } public void setBundleContext(BundleContext bundleContext) { this.bundleContext = bundleContext; } + + private static class ForardingActorSystemProvider extends ForwardingObject + implements ActorSystemProvider, AutoCloseable { + private final ActorSystemProvider delegate; + private final AutoCloseable closeable; + + ForardingActorSystemProvider(ActorSystemProvider delegate, AutoCloseable closeable) { + this.delegate = delegate; + this.closeable = closeable; + } + + @Override + public ActorSystem getActorSystem() { + return delegate().getActorSystem(); + } + + @Override + public ListenerRegistration registerActorSystemProviderListener( + ActorSystemProviderListener listener) { + return delegate().registerActorSystemProviderListener(listener); + } + + @Override + protected ActorSystemProvider delegate() { + return delegate; + } + + @Override + public void close() throws Exception { + // We don't close the delegate as the life-cycle is controlled via blueprint. + closeable.close(); + } + } }