X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Futil%2FConfigRegistryJMXClient.java;h=74dd2efed83468d3f9b7dd48b30ca601208a65b3;hp=4ecc7c3a5c572cfc50fb2a90ef5b08bf35a7d537;hb=23fe9ca678ada6263fec5dd996f4025e4a32fcf5;hpb=0d36679800f7476120476ba371e62d16b17509f6 diff --git a/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/ConfigRegistryJMXClient.java b/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/ConfigRegistryJMXClient.java index 4ecc7c3a5c..74dd2efed8 100644 --- a/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/ConfigRegistryJMXClient.java +++ b/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/ConfigRegistryJMXClient.java @@ -11,7 +11,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; - import javax.management.AttributeNotFoundException; import javax.management.InstanceNotFoundException; import javax.management.JMException; @@ -21,12 +20,13 @@ 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 org.opendaylight.controller.config.api.jmx.ServiceReferenceMXBean; +import org.opendaylight.controller.config.api.jmx.constants.ConfigRegistryConstants; public class ConfigRegistryJMXClient implements ConfigRegistryClient { private final ConfigRegistryMXBean configRegistryMXBeanProxy; @@ -34,10 +34,13 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient { private final MBeanServer configMBeanServer; public ConfigRegistryJMXClient(MBeanServer configMBeanServer) { + this(configMBeanServer, OBJECT_NAME); + } + + private ConfigRegistryJMXClient(MBeanServer configMBeanServer, ObjectName configRegistryON) { this.configMBeanServer = configMBeanServer; - configRegistryON = OBJECT_NAME; - Set searchResult = configMBeanServer.queryMBeans( - configRegistryON, null); + this.configRegistryON = configRegistryON; + Set searchResult = configMBeanServer.queryMBeans(configRegistryON, null); if (!(searchResult.size() == 1)) { throw new IllegalStateException("Config registry not found"); } @@ -45,6 +48,10 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient { false); } + public static ConfigRegistryJMXClient createWithoutNotifications(MBeanServer configMBeanServer) { + return new ConfigRegistryJMXClient(configMBeanServer, ConfigRegistryConstants.OBJECT_NAME_NO_NOTIFICATIONS); + } + @Override public ConfigTransactionJMXClient createTransaction() { ObjectName configTransactionControllerON = beginConfig(); @@ -66,10 +73,28 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient { 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 newMBeanProxy(ObjectName on, Class clazz) { - return JMX.newMBeanProxy(configMBeanServer, on, clazz); + ObjectName onObj = translateServiceRefIfPossible(on, clazz, configMBeanServer); + return JMX.newMBeanProxy(configMBeanServer, onObj, clazz); + } + + static ObjectName translateServiceRefIfPossible(ObjectName on, Class clazz, MBeanServer configMBeanServer) { + ObjectName onObj = on; + if (ObjectNameUtil.isServiceReference(onObj) && clazz.equals(ServiceReferenceMXBean.class) == false) { + ServiceReferenceMXBean proxy = JMX.newMXBeanProxy(configMBeanServer, onObj, ServiceReferenceMXBean.class); + onObj = proxy.getCurrentImplementation(); + } + return onObj; } + public T newMXBeanProxy(ObjectName on, Class clazz) { return JMX.newMXBeanProxy(configMBeanServer, on, clazz); } @@ -149,8 +174,8 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient { } @Override - public ObjectName lookupConfigBeanByServiceInterfaceName(String serviceInterfaceName, String refName) { - return configRegistryMXBeanProxy.lookupConfigBeanByServiceInterfaceName(serviceInterfaceName, refName); + public ObjectName lookupConfigBeanByServiceInterfaceName(String serviceInterfaceQName, String refName) { + return configRegistryMXBeanProxy.lookupConfigBeanByServiceInterfaceName(serviceInterfaceQName, refName); } @Override @@ -159,8 +184,8 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient { } @Override - public Map lookupServiceReferencesByServiceInterfaceName(String serviceInterfaceName) { - return configRegistryMXBeanProxy.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceName); + public Map lookupServiceReferencesByServiceInterfaceName(String serviceInterfaceQName) { + return configRegistryMXBeanProxy.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceQName); } @Override @@ -194,8 +219,22 @@ public class ConfigRegistryJMXClient implements ConfigRegistryClient { } catch (AttributeNotFoundException | InstanceNotFoundException | MBeanException | ReflectionException e) { throw new RuntimeException("Unable to get attribute " - + attributeName + " for " + on, e); + + attributeName + " for " + on + ". Available beans: " + lookupConfigBeans(), e); } } + @Override + public Set 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); + } }