Merge "BUG-692 Improve log message when negotiation fails"
[controller.git] / opendaylight / config / config-util / src / main / java / org / opendaylight / controller / config / util / ConfigRegistryJMXClient.java
index 3a1efaeaaf1992163e794f950f1f48b743c64204..559993f2648ec013791bdcf7167e412fe9a69102 100644 (file)
@@ -7,9 +7,11 @@
  */
 package org.opendaylight.controller.config.util;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
+import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 
 import javax.management.AttributeNotFoundException;
 import javax.management.InstanceNotFoundException;
@@ -20,15 +22,14 @@ import javax.management.MBeanServer;
 import javax.management.ObjectInstance;
 import javax.management.ObjectName;
 import javax.management.ReflectionException;
-
-import org.opendaylight.controller.config.api.ConflictingVersionException;
-import org.opendaylight.controller.config.api.ValidationException;
-import org.opendaylight.controller.config.api.jmx.CommitStatus;
-import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
-import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.controller.config.api.jmx.ServiceReferenceMXBean;
 
 public class ConfigRegistryJMXClient implements ConfigRegistryClient {
-    private final ConfigRegistryMXBean configRegistryProxy;
+    private final ConfigRegistryMXBean configRegistryMXBeanProxy;
     private final ObjectName configRegistryON;
     private final MBeanServer configMBeanServer;
 
@@ -40,7 +41,7 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient {
         if (!(searchResult.size() == 1)) {
             throw new IllegalStateException("Config registry not found");
         }
-        configRegistryProxy = JMX.newMXBeanProxy(configMBeanServer, configRegistryON, ConfigRegistryMXBean.class,
+        configRegistryMXBeanProxy = JMX.newMXBeanProxy(configMBeanServer, configRegistryON, ConfigRegistryMXBean.class,
                 false);
     }
 
@@ -61,32 +62,49 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient {
     @Override
     public ConfigTransactionJMXClient getConfigTransactionClient(
             ObjectName objectName) {
-        return new ConfigTransactionJMXClient(configRegistryProxy, objectName,
+        return new ConfigTransactionJMXClient(configRegistryMXBeanProxy, objectName,
                 configMBeanServer);
     }
 
+    /**
+     * Usage of this method indicates error as config JMX uses solely MXBeans.
+     * Use {@link #newMXBeanProxy(javax.management.ObjectName, Class)}
+     * or {@link JMX#newMBeanProxy(javax.management.MBeanServerConnection, javax.management.ObjectName, Class)}
+     * This method will be removed soon.
+     */
+    @Deprecated
     public <T> T newMBeanProxy(ObjectName on, Class<T> clazz) {
+        on = translateServiceRefIfPossible(on, clazz, configMBeanServer);
         return JMX.newMBeanProxy(configMBeanServer, on, clazz);
     }
 
+    static  ObjectName translateServiceRefIfPossible(ObjectName on, Class<?> clazz, MBeanServer configMBeanServer) {
+        if (ObjectNameUtil.isServiceReference(on) && clazz.equals(ServiceReferenceMXBean.class) == false) {
+            ServiceReferenceMXBean proxy = JMX.newMXBeanProxy(configMBeanServer, on, ServiceReferenceMXBean.class);
+            on = proxy.getCurrentImplementation();
+        }
+        return on;
+    }
+
+
     public <T> T newMXBeanProxy(ObjectName on, Class<T> clazz) {
         return JMX.newMXBeanProxy(configMBeanServer, on, clazz);
     }
 
     @Override
     public ObjectName beginConfig() {
-        return configRegistryProxy.beginConfig();
+        return configRegistryMXBeanProxy.beginConfig();
     }
 
     @Override
     public CommitStatus commitConfig(ObjectName transactionControllerON)
             throws ConflictingVersionException, ValidationException {
-        return configRegistryProxy.commitConfig(transactionControllerON);
+        return configRegistryMXBeanProxy.commitConfig(transactionControllerON);
     }
 
     @Override
     public List<ObjectName> getOpenConfigs() {
-        return configRegistryProxy.getOpenConfigs();
+        return configRegistryMXBeanProxy.getOpenConfigs();
     }
 
     @Override
@@ -101,45 +119,75 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient {
 
     @Override
     public Set<String> getAvailableModuleNames() {
-        return configRegistryProxy.getAvailableModuleNames();
+        return configRegistryMXBeanProxy.getAvailableModuleNames();
     }
 
     @Override
     public boolean isHealthy() {
-        return configRegistryProxy.isHealthy();
+        return configRegistryMXBeanProxy.isHealthy();
     }
 
     @Override
     public Set<ObjectName> lookupConfigBeans() {
-        return configRegistryProxy.lookupConfigBeans();
+        return configRegistryMXBeanProxy.lookupConfigBeans();
     }
 
     @Override
     public Set<ObjectName> lookupConfigBeans(String moduleName) {
-        return configRegistryProxy.lookupConfigBeans(moduleName);
+        return configRegistryMXBeanProxy.lookupConfigBeans(moduleName);
     }
 
     @Override
     public Set<ObjectName> lookupConfigBeans(String moduleName,
             String instanceName) {
-        return configRegistryProxy.lookupConfigBeans(moduleName, instanceName);
+        return configRegistryMXBeanProxy.lookupConfigBeans(moduleName, instanceName);
     }
 
     @Override
     public ObjectName lookupConfigBean(String moduleName, String instanceName)
             throws InstanceNotFoundException {
-        return configRegistryProxy.lookupConfigBean(moduleName, instanceName);
+        return configRegistryMXBeanProxy.lookupConfigBean(moduleName, instanceName);
     }
 
     @Override
     public Set<ObjectName> lookupRuntimeBeans() {
-        return configRegistryProxy.lookupRuntimeBeans();
+        return configRegistryMXBeanProxy.lookupRuntimeBeans();
     }
 
     @Override
     public Set<ObjectName> lookupRuntimeBeans(String ifcName,
             String instanceName) {
-        return configRegistryProxy.lookupRuntimeBeans(ifcName, instanceName);
+        return configRegistryMXBeanProxy.lookupRuntimeBeans(ifcName, instanceName);
+    }
+
+    @Override
+    public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
+        configRegistryMXBeanProxy.checkConfigBeanExists(objectName);
+    }
+
+    @Override
+    public ObjectName lookupConfigBeanByServiceInterfaceName(String serviceInterfaceQName, String refName) {
+        return configRegistryMXBeanProxy.lookupConfigBeanByServiceInterfaceName(serviceInterfaceQName, refName);
+    }
+
+    @Override
+    public Map<String, Map<String, ObjectName>> getServiceMapping() {
+        return configRegistryMXBeanProxy.getServiceMapping();
+    }
+
+    @Override
+    public Map<String, ObjectName> lookupServiceReferencesByServiceInterfaceName(String serviceInterfaceQName) {
+        return configRegistryMXBeanProxy.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceQName);
+    }
+
+    @Override
+    public Set<String> lookupServiceInterfaceNames(ObjectName objectName) throws InstanceNotFoundException {
+        return configRegistryMXBeanProxy.lookupServiceInterfaceNames(objectName);
+    }
+
+    @Override
+    public String getServiceInterfaceName(String namespace, String localName) {
+        return configRegistryMXBeanProxy.getServiceInterfaceName(namespace, localName);
     }
 
     @Override
@@ -167,4 +215,18 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient {
         }
     }
 
+    @Override
+    public Set<String> getAvailableModuleFactoryQNames() {
+        return configRegistryMXBeanProxy.getAvailableModuleFactoryQNames();
+    }
+
+    @Override
+    public ObjectName getServiceReference(String serviceInterfaceQName, String refName) throws InstanceNotFoundException {
+        return configRegistryMXBeanProxy.getServiceReference(serviceInterfaceQName, refName);
+    }
+
+    @Override
+    public void checkServiceReferenceExists(ObjectName objectName) throws InstanceNotFoundException {
+        configRegistryMXBeanProxy.checkServiceReferenceExists(objectName);
+    }
 }