X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-remoterpc-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fremote%2Frpc%2FRemoteRpcProvider.java;h=52f803d5429d44d0b60bd1c7bc7c6ac161fa9e33;hp=d24ed5651aa8a5ffa0d554769fb389c5dc05ab78;hb=b78ee4d6b08e2cc0cf5edd01af0e54c3bf619ab5;hpb=2be5bc49c7fba3755792bb34de8173907fd9b176 diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java index d24ed5651a..52f803d542 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java @@ -11,76 +11,86 @@ package org.opendaylight.controller.remote.rpc; import akka.actor.ActorRef; import akka.actor.ActorSystem; +import com.google.common.base.Preconditions; +import java.util.Collection; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.remote.rpc.messages.UpdateSchemaContext; import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.controller.sal.core.api.Provider; -import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collection; - /** * This is the base class which initialize all the actors, listeners and * default RPc implementation so remote invocation of rpcs. */ public class RemoteRpcProvider implements AutoCloseable, Provider, SchemaContextListener { - private static final Logger LOG = LoggerFactory.getLogger(RemoteRpcProvider.class); - - private final RpcProvisionRegistry rpcProvisionRegistry; - - private ActorSystem actorSystem; - private Broker.ProviderSession brokerSession; - private SchemaContext schemaContext; - private ActorRef rpcManager; - private RemoteRpcProviderConfig config; - - - public RemoteRpcProvider(ActorSystem actorSystem, RpcProvisionRegistry rpcProvisionRegistry) { - this.actorSystem = actorSystem; - this.rpcProvisionRegistry = rpcProvisionRegistry; - this.config = new RemoteRpcProviderConfig(actorSystem.settings().config()); - } - - @Override - public void close() throws Exception { - if (this.actorSystem != null) - this.actorSystem.shutdown(); - } - - @Override - public void onSessionInitiated(Broker.ProviderSession session) { - this.brokerSession = session; - start(); - } - - @Override - public Collection getProviderFunctionality() { - return null; - } - - private void start() { - LOG.info("Starting remote rpc service..."); - - SchemaService schemaService = brokerSession.getService(SchemaService.class); - schemaContext = schemaService.getGlobalContext(); - - rpcManager = actorSystem.actorOf(RpcManager.props(schemaContext, brokerSession, rpcProvisionRegistry), - config.getRpcManagerName()); - - LOG.debug("rpc manager started"); - - schemaService.registerSchemaContextListener(this); - } - - @Override - public void onGlobalContextUpdated(SchemaContext schemaContext) { - this.schemaContext = schemaContext; - rpcManager.tell(new UpdateSchemaContext(schemaContext), null); - - } + private static final Logger LOG = LoggerFactory.getLogger(RemoteRpcProvider.class); + + private final DOMRpcProviderService rpcProvisionRegistry; + + private ListenerRegistration schemaListenerRegistration; + private final ActorSystem actorSystem; + private SchemaService schemaService; + private DOMRpcService rpcService; + private SchemaContext schemaContext; + private ActorRef rpcManager; + private final RemoteRpcProviderConfig config; + + public RemoteRpcProvider(final ActorSystem actorSystem, final DOMRpcProviderService rpcProvisionRegistry, + final RemoteRpcProviderConfig config) { + this.actorSystem = actorSystem; + this.rpcProvisionRegistry = rpcProvisionRegistry; + this.config = Preconditions.checkNotNull(config); + } + + public void setRpcService(DOMRpcService rpcService) { + this.rpcService = rpcService; + } + + public void setSchemaService(SchemaService schemaService) { + this.schemaService = schemaService; + } + + @Override + public void close() throws Exception { + if (schemaListenerRegistration != null) { + schemaListenerRegistration.close(); + schemaListenerRegistration = null; + } + } + + @Override + public void onSessionInitiated(final Broker.ProviderSession session) { + schemaService = session.getService(SchemaService.class); + rpcService = session.getService(DOMRpcService.class); + start(); + } + + @Override + public Collection getProviderFunctionality() { + return null; + } + + public void start() { + LOG.info("Starting remote rpc service..."); + + schemaContext = schemaService.getGlobalContext(); + rpcManager = actorSystem.actorOf(RpcManager.props(schemaContext, rpcProvisionRegistry, rpcService, config), + config.getRpcManagerName()); + schemaListenerRegistration = schemaService.registerSchemaContextListener(this); + LOG.debug("rpc manager started"); + } + + @Override + public void onGlobalContextUpdated(final SchemaContext newSchemaContext) { + this.schemaContext = newSchemaContext; + rpcManager.tell(new UpdateSchemaContext(newSchemaContext), null); + } }