2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.util;
10 import java.util.Arrays;
11 import java.util.List;
15 import javax.management.AttributeNotFoundException;
16 import javax.management.InstanceNotFoundException;
17 import javax.management.JMException;
18 import javax.management.JMX;
19 import javax.management.MBeanException;
20 import javax.management.MBeanServer;
21 import javax.management.ObjectInstance;
22 import javax.management.ObjectName;
23 import javax.management.ReflectionException;
25 import org.opendaylight.controller.config.api.ConflictingVersionException;
26 import org.opendaylight.controller.config.api.ValidationException;
27 import org.opendaylight.controller.config.api.jmx.CommitStatus;
28 import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
29 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
31 public class ConfigRegistryJMXClient implements ConfigRegistryClient {
32 private final ConfigRegistryMXBean configRegistryMXBeanProxy;
33 private final ObjectName configRegistryON;
34 private final MBeanServer configMBeanServer;
36 public ConfigRegistryJMXClient(MBeanServer configMBeanServer) {
37 this.configMBeanServer = configMBeanServer;
38 configRegistryON = OBJECT_NAME;
39 Set<ObjectInstance> searchResult = configMBeanServer.queryMBeans(
40 configRegistryON, null);
41 if (!(searchResult.size() == 1)) {
42 throw new IllegalStateException("Config registry not found");
44 configRegistryMXBeanProxy = JMX.newMXBeanProxy(configMBeanServer, configRegistryON, ConfigRegistryMXBean.class,
49 public ConfigTransactionJMXClient createTransaction() {
50 ObjectName configTransactionControllerON = beginConfig();
51 return getConfigTransactionClient(configTransactionControllerON);
55 public ConfigTransactionJMXClient getConfigTransactionClient(
56 String transactionName) {
57 ObjectName objectName = ObjectNameUtil
58 .createTransactionControllerON(transactionName);
59 return getConfigTransactionClient(objectName);
63 public ConfigTransactionJMXClient getConfigTransactionClient(
64 ObjectName objectName) {
65 return new ConfigTransactionJMXClient(configRegistryMXBeanProxy, objectName,
69 public <T> T newMBeanProxy(ObjectName on, Class<T> clazz) {
70 return JMX.newMBeanProxy(configMBeanServer, on, clazz);
73 public <T> T newMXBeanProxy(ObjectName on, Class<T> clazz) {
74 return JMX.newMXBeanProxy(configMBeanServer, on, clazz);
78 public ObjectName beginConfig() {
79 return configRegistryMXBeanProxy.beginConfig();
83 public CommitStatus commitConfig(ObjectName transactionControllerON)
84 throws ConflictingVersionException, ValidationException {
85 return configRegistryMXBeanProxy.commitConfig(transactionControllerON);
89 public List<ObjectName> getOpenConfigs() {
90 return configRegistryMXBeanProxy.getOpenConfigs();
94 public long getVersion() {
96 return (Long) configMBeanServer.getAttribute(configRegistryON,
98 } catch (JMException e) {
99 throw new RuntimeException(e);
104 public Set<String> getAvailableModuleNames() {
105 return configRegistryMXBeanProxy.getAvailableModuleNames();
109 public boolean isHealthy() {
110 return configRegistryMXBeanProxy.isHealthy();
114 public Set<ObjectName> lookupConfigBeans() {
115 return configRegistryMXBeanProxy.lookupConfigBeans();
119 public Set<ObjectName> lookupConfigBeans(String moduleName) {
120 return configRegistryMXBeanProxy.lookupConfigBeans(moduleName);
124 public Set<ObjectName> lookupConfigBeans(String moduleName,
125 String instanceName) {
126 return configRegistryMXBeanProxy.lookupConfigBeans(moduleName, instanceName);
130 public ObjectName lookupConfigBean(String moduleName, String instanceName)
131 throws InstanceNotFoundException {
132 return configRegistryMXBeanProxy.lookupConfigBean(moduleName, instanceName);
136 public Set<ObjectName> lookupRuntimeBeans() {
137 return configRegistryMXBeanProxy.lookupRuntimeBeans();
141 public Set<ObjectName> lookupRuntimeBeans(String ifcName,
142 String instanceName) {
143 return configRegistryMXBeanProxy.lookupRuntimeBeans(ifcName, instanceName);
147 public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
148 configRegistryMXBeanProxy.checkConfigBeanExists(objectName);
152 public ObjectName lookupConfigBeanByServiceInterfaceName(String serviceInterfaceName, String refName) {
153 return configRegistryMXBeanProxy.lookupConfigBeanByServiceInterfaceName(serviceInterfaceName, refName);
157 public Map<String, Map<String, ObjectName>> getServiceMapping() {
158 return configRegistryMXBeanProxy.getServiceMapping();
162 public Map<String, ObjectName> lookupServiceReferencesByServiceInterfaceName(String serviceInterfaceName) {
163 return configRegistryMXBeanProxy.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceName);
167 public Set<String> lookupServiceInterfaceNames(ObjectName objectName) throws InstanceNotFoundException {
168 return configRegistryMXBeanProxy.lookupServiceInterfaceNames(objectName);
172 public String getServiceInterfaceName(String namespace, String localName) {
173 return configRegistryMXBeanProxy.getServiceInterfaceName(namespace, localName);
177 public Object invokeMethod(ObjectName on, String name, Object[] params,
178 String[] signature) {
180 return configMBeanServer.invoke(on, name, params, signature);
181 } catch (InstanceNotFoundException | ReflectionException
182 | MBeanException e) {
183 throw new RuntimeException("Unable to invoke operation " + name
184 + " on " + on + " with attributes "
185 + Arrays.toString(params) + " and signature "
186 + Arrays.toString(signature), e);
191 public Object getAttributeCurrentValue(ObjectName on, String attributeName) {
193 return configMBeanServer.getAttribute(on, attributeName);
194 } catch (AttributeNotFoundException | InstanceNotFoundException
195 | MBeanException | ReflectionException e) {
196 throw new RuntimeException("Unable to get attribute "
197 + attributeName + " for " + on, e);