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 org.opendaylight.controller.config.api.ConflictingVersionException;
11 import org.opendaylight.controller.config.api.ValidationException;
12 import org.opendaylight.controller.config.api.jmx.CommitStatus;
13 import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
14 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
16 import javax.management.AttributeNotFoundException;
17 import javax.management.InstanceNotFoundException;
18 import javax.management.JMException;
19 import javax.management.JMX;
20 import javax.management.MBeanException;
21 import javax.management.MBeanServer;
22 import javax.management.ObjectInstance;
23 import javax.management.ObjectName;
24 import javax.management.ReflectionException;
25 import java.util.Arrays;
26 import java.util.List;
30 public class ConfigRegistryJMXClient implements ConfigRegistryClient {
31 private final ConfigRegistryMXBean configRegistryMXBeanProxy;
32 private final ObjectName configRegistryON;
33 private final MBeanServer configMBeanServer;
35 public ConfigRegistryJMXClient(MBeanServer configMBeanServer) {
36 this.configMBeanServer = configMBeanServer;
37 configRegistryON = OBJECT_NAME;
38 Set<ObjectInstance> searchResult = configMBeanServer.queryMBeans(
39 configRegistryON, null);
40 if (!(searchResult.size() == 1)) {
41 throw new IllegalStateException("Config registry not found");
43 configRegistryMXBeanProxy = JMX.newMXBeanProxy(configMBeanServer, configRegistryON, ConfigRegistryMXBean.class,
48 public ConfigTransactionJMXClient createTransaction() {
49 ObjectName configTransactionControllerON = beginConfig();
50 return getConfigTransactionClient(configTransactionControllerON);
54 public ConfigTransactionJMXClient getConfigTransactionClient(
55 String transactionName) {
56 ObjectName objectName = ObjectNameUtil
57 .createTransactionControllerON(transactionName);
58 return getConfigTransactionClient(objectName);
62 public ConfigTransactionJMXClient getConfigTransactionClient(
63 ObjectName objectName) {
64 return new ConfigTransactionJMXClient(configRegistryMXBeanProxy, objectName,
68 public <T> T newMBeanProxy(ObjectName on, Class<T> clazz) {
69 return JMX.newMBeanProxy(configMBeanServer, on, clazz);
72 public <T> T newMXBeanProxy(ObjectName on, Class<T> clazz) {
73 return JMX.newMXBeanProxy(configMBeanServer, on, clazz);
77 public ObjectName beginConfig() {
78 return configRegistryMXBeanProxy.beginConfig();
82 public CommitStatus commitConfig(ObjectName transactionControllerON)
83 throws ConflictingVersionException, ValidationException {
84 return configRegistryMXBeanProxy.commitConfig(transactionControllerON);
88 public List<ObjectName> getOpenConfigs() {
89 return configRegistryMXBeanProxy.getOpenConfigs();
93 public long getVersion() {
95 return (Long) configMBeanServer.getAttribute(configRegistryON,
97 } catch (JMException e) {
98 throw new RuntimeException(e);
103 public Set<String> getAvailableModuleNames() {
104 return configRegistryMXBeanProxy.getAvailableModuleNames();
108 public boolean isHealthy() {
109 return configRegistryMXBeanProxy.isHealthy();
113 public Set<ObjectName> lookupConfigBeans() {
114 return configRegistryMXBeanProxy.lookupConfigBeans();
118 public Set<ObjectName> lookupConfigBeans(String moduleName) {
119 return configRegistryMXBeanProxy.lookupConfigBeans(moduleName);
123 public Set<ObjectName> lookupConfigBeans(String moduleName,
124 String instanceName) {
125 return configRegistryMXBeanProxy.lookupConfigBeans(moduleName, instanceName);
129 public ObjectName lookupConfigBean(String moduleName, String instanceName)
130 throws InstanceNotFoundException {
131 return configRegistryMXBeanProxy.lookupConfigBean(moduleName, instanceName);
135 public Set<ObjectName> lookupRuntimeBeans() {
136 return configRegistryMXBeanProxy.lookupRuntimeBeans();
140 public Set<ObjectName> lookupRuntimeBeans(String ifcName,
141 String instanceName) {
142 return configRegistryMXBeanProxy.lookupRuntimeBeans(ifcName, instanceName);
146 public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
147 configRegistryMXBeanProxy.checkConfigBeanExists(objectName);
151 public ObjectName lookupConfigBeanByServiceInterfaceName(String serviceInterfaceName, String refName) {
152 return configRegistryMXBeanProxy.lookupConfigBeanByServiceInterfaceName(serviceInterfaceName, refName);
156 public Map<String, Map<String, ObjectName>> getServiceMapping() {
157 return configRegistryMXBeanProxy.getServiceMapping();
161 public Map<String, ObjectName> lookupServiceReferencesByServiceInterfaceName(String serviceInterfaceName) {
162 return configRegistryMXBeanProxy.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceName);
166 public Set<String> lookupServiceInterfaceNames(ObjectName objectName) throws InstanceNotFoundException {
167 return configRegistryMXBeanProxy.lookupServiceInterfaceNames(objectName);
171 public String getServiceInterfaceName(String namespace, String localName) {
172 return configRegistryMXBeanProxy.getServiceInterfaceName(namespace, localName);
176 public Object invokeMethod(ObjectName on, String name, Object[] params,
177 String[] signature) {
179 return configMBeanServer.invoke(on, name, params, signature);
180 } catch (InstanceNotFoundException | ReflectionException
181 | MBeanException e) {
182 throw new RuntimeException("Unable to invoke operation " + name
183 + " on " + on + " with attributes "
184 + Arrays.toString(params) + " and signature "
185 + Arrays.toString(signature), e);
190 public Object getAttributeCurrentValue(ObjectName on, String attributeName) {
192 return configMBeanServer.getAttribute(on, attributeName);
193 } catch (AttributeNotFoundException | InstanceNotFoundException
194 | MBeanException | ReflectionException e) {
195 throw new RuntimeException("Unable to get attribute "
196 + attributeName + " for " + on, e);
201 public Set<String> getAvailableModuleFactoryQNames() {
202 return configRegistryMXBeanProxy.getAvailableModuleFactoryQNames();