Bug 116 - Revisit SanityTest
[controller.git] / opendaylight / config / config-util / src / main / java / org / opendaylight / controller / config / util / ConfigRegistryJMXClient.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.config.util;
9
10 import java.util.Arrays;
11 import java.util.List;
12 import java.util.Set;
13
14 import javax.management.AttributeNotFoundException;
15 import javax.management.InstanceNotFoundException;
16 import javax.management.JMException;
17 import javax.management.JMX;
18 import javax.management.MBeanException;
19 import javax.management.MBeanServer;
20 import javax.management.ObjectInstance;
21 import javax.management.ObjectName;
22 import javax.management.ReflectionException;
23
24 import org.opendaylight.controller.config.api.ConflictingVersionException;
25 import org.opendaylight.controller.config.api.ValidationException;
26 import org.opendaylight.controller.config.api.jmx.CommitStatus;
27 import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
28 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
29
30 public class ConfigRegistryJMXClient implements ConfigRegistryClient {
31     private final ConfigRegistryMXBean configRegistryProxy;
32     private final ObjectName configRegistryON;
33     private final MBeanServer configMBeanServer;
34
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");
42         }
43         configRegistryProxy = JMX.newMXBeanProxy(configMBeanServer, configRegistryON, ConfigRegistryMXBean.class,
44                 false);
45     }
46
47     @Override
48     public ConfigTransactionJMXClient createTransaction() {
49         ObjectName configTransactionControllerON = beginConfig();
50         return getConfigTransactionClient(configTransactionControllerON);
51     }
52
53     @Override
54     public ConfigTransactionJMXClient getConfigTransactionClient(
55             String transactionName) {
56         ObjectName objectName = ObjectNameUtil
57                 .createTransactionControllerON(transactionName);
58         return getConfigTransactionClient(objectName);
59     }
60
61     @Override
62     public ConfigTransactionJMXClient getConfigTransactionClient(
63             ObjectName objectName) {
64         return new ConfigTransactionJMXClient(configRegistryProxy, objectName,
65                 configMBeanServer);
66     }
67
68     public <T> T newMBeanProxy(ObjectName on, Class<T> clazz) {
69         return JMX.newMBeanProxy(configMBeanServer, on, clazz);
70     }
71
72     public <T> T newMXBeanProxy(ObjectName on, Class<T> clazz) {
73         return JMX.newMXBeanProxy(configMBeanServer, on, clazz);
74     }
75
76     @Override
77     public ObjectName beginConfig() {
78         return configRegistryProxy.beginConfig();
79     }
80
81     @Override
82     public CommitStatus commitConfig(ObjectName transactionControllerON)
83             throws ConflictingVersionException, ValidationException {
84         return configRegistryProxy.commitConfig(transactionControllerON);
85     }
86
87     @Override
88     public List<ObjectName> getOpenConfigs() {
89         return configRegistryProxy.getOpenConfigs();
90     }
91
92     @Override
93     public long getVersion() {
94         try {
95             return (Long) configMBeanServer.getAttribute(configRegistryON,
96                     "Version");
97         } catch (JMException e) {
98             throw new RuntimeException(e);
99         }
100     }
101
102     @Override
103     public Set<String> getAvailableModuleNames() {
104         return configRegistryProxy.getAvailableModuleNames();
105     }
106
107     @Override
108     public boolean isHealthy() {
109         return configRegistryProxy.isHealthy();
110     }
111
112     @Override
113     public Set<ObjectName> lookupConfigBeans() {
114         return configRegistryProxy.lookupConfigBeans();
115     }
116
117     @Override
118     public Set<ObjectName> lookupConfigBeans(String moduleName) {
119         return configRegistryProxy.lookupConfigBeans(moduleName);
120     }
121
122     @Override
123     public Set<ObjectName> lookupConfigBeans(String moduleName,
124             String instanceName) {
125         return configRegistryProxy.lookupConfigBeans(moduleName, instanceName);
126     }
127
128     @Override
129     public ObjectName lookupConfigBean(String moduleName, String instanceName)
130             throws InstanceNotFoundException {
131         return configRegistryProxy.lookupConfigBean(moduleName, instanceName);
132     }
133
134     @Override
135     public Set<ObjectName> lookupRuntimeBeans() {
136         return configRegistryProxy.lookupRuntimeBeans();
137     }
138
139     @Override
140     public Set<ObjectName> lookupRuntimeBeans(String ifcName,
141             String instanceName) {
142         return configRegistryProxy.lookupRuntimeBeans(ifcName, instanceName);
143     }
144
145     @Override
146     public Object invokeMethod(ObjectName on, String name, Object[] params,
147             String[] signature) {
148         try {
149             return configMBeanServer.invoke(on, name, params, signature);
150         } catch (InstanceNotFoundException | ReflectionException
151                 | MBeanException e) {
152             throw new RuntimeException("Unable to invoke operation " + name
153                     + " on " + on + " with attributes "
154                     + Arrays.toString(params) + " and signature "
155                     + Arrays.toString(signature), e);
156         }
157     }
158
159     @Override
160     public Object getAttributeCurrentValue(ObjectName on, String attributeName) {
161         try {
162             return configMBeanServer.getAttribute(on, attributeName);
163         } catch (AttributeNotFoundException | InstanceNotFoundException
164                 | MBeanException | ReflectionException e) {
165             throw new RuntimeException("Unable to get attribute "
166                     + attributeName + " for " + on, e);
167         }
168     }
169
170 }