X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2Fimpl%2FSchemaAwareRpcBroker.java;h=32139308b11230b806467f95d078c1608077a1f6;hp=8fc6fe229500ecc39506fcc5b215b82cfdd9cb5e;hb=cde200211e15c15312ee35944c03e88e80ceab55;hpb=fd3e1dd55c864c4611287ffcec59f155468cbe65 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareRpcBroker.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareRpcBroker.java index 8fc6fe2295..32139308b1 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareRpcBroker.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareRpcBroker.java @@ -14,6 +14,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import com.google.common.base.Preconditions; import org.opendaylight.controller.md.sal.common.api.routing.RouteChange; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; import org.opendaylight.controller.md.sal.common.impl.routing.RoutingUtils; @@ -140,17 +141,34 @@ public class SchemaAwareRpcBroker implements RpcRouter, Identifiable, Ro RpcDefinition definition = findRpcDefinition(rpcType); checkArgument(!isRoutedRpc(definition), "RPC Type must not be routed."); GlobalRpcRegistration reg = new GlobalRpcRegistration(rpcType, implementation, this); - implementations.putIfAbsent(rpcType, implementation); + final RpcImplementation previous = implementations.putIfAbsent(rpcType, implementation); + Preconditions.checkState(previous == null, "Rpc %s is already registered.",rpcType); + notifyRpcAdded(rpcType); return reg; } + private void notifyRpcAdded(QName rpcType) { + for (ListenerRegistration listener : rpcRegistrationListeners) { + try { + listener.getInstance().onRpcImplementationAdded(rpcType); + } catch (Exception ex) { + LOG.error("Unhandled exception during invoking listener {}", listener.getInstance(), ex); + } + + } + } + private boolean isRoutedRpc(RpcDefinition definition) { return getRoutingStrategy(definition) instanceof RoutedRpcStrategy; } @Override public ListenerRegistration addRpcRegistrationListener(RpcRegistrationListener listener) { - return rpcRegistrationListeners.register(listener); + ListenerRegistration reg = rpcRegistrationListeners.register(listener); + for (QName impl : implementations.keySet()) { + listener.onRpcImplementationAdded(impl); + } + return reg; } @Override