All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.controller.remote.rpc.RemoteOpsProvider Maven / Gradle / Ivy

There is a newer version: 10.0.4
Show newest version
/*
 * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.controller.remote.rpc;

import static java.util.Objects.requireNonNull;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.PoisonPill;
import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMRpcProviderService;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * This is the base class which initialize all the actors, listeners and
 * default RPc implementation so remote invocation of rpcs.
 */
public class RemoteOpsProvider implements AutoCloseable {

    private static final Logger LOG = LoggerFactory.getLogger(RemoteOpsProvider.class);

    private final DOMRpcProviderService rpcProvisionRegistry;
    private final RemoteOpsProviderConfig config;
    private final ActorSystem actorSystem;
    private final DOMRpcService rpcService;
    private final DOMActionProviderService actionProvisionRegistry;
    private final DOMActionService actionService;

    private ActorRef opsManager;

    public RemoteOpsProvider(final ActorSystem actorSystem, final DOMRpcProviderService rpcProvisionRegistry,
                             final DOMRpcService rpcService, final RemoteOpsProviderConfig config,
                             final DOMActionProviderService actionProviderService,
                             final DOMActionService actionService) {
        this.actorSystem = requireNonNull(actorSystem);
        this.rpcProvisionRegistry = requireNonNull(rpcProvisionRegistry);
        this.rpcService = requireNonNull(rpcService);
        this.config = requireNonNull(config);
        this.actionProvisionRegistry = requireNonNull(actionProviderService);
        this.actionService = requireNonNull(actionService);
    }

    @Override
    public void close() {
        if (opsManager != null) {
            LOG.info("Stopping Ops Manager at {}", opsManager);
            opsManager.tell(PoisonPill.getInstance(), ActorRef.noSender());
            opsManager = null;
        }
    }

    public void start() {
        LOG.info("Starting Remote Ops service...");
        opsManager = actorSystem.actorOf(OpsManager.props(rpcProvisionRegistry, rpcService, config,
                actionProvisionRegistry, actionService), config.getRpcManagerName());
        LOG.debug("Ops Manager started at {}", opsManager);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy