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.jolokia;
10 import java.util.List;
14 import javax.management.InstanceNotFoundException;
15 import javax.management.ObjectName;
17 import org.jolokia.client.request.J4pExecRequest;
18 import org.jolokia.client.request.J4pReadRequest;
19 import org.jolokia.client.request.J4pResponse;
20 import org.json.simple.JSONArray;
21 import org.json.simple.JSONObject;
22 import org.opendaylight.controller.config.api.ConflictingVersionException;
23 import org.opendaylight.controller.config.api.ValidationException;
24 import org.opendaylight.controller.config.api.jmx.CommitStatus;
25 import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
26 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
27 import org.opendaylight.controller.config.util.ConfigRegistryClient;
30 public class ConfigRegistryJolokiaClient extends ListableJolokiaClient
31 implements ConfigRegistryClient {
33 public ConfigRegistryJolokiaClient(String url) {
34 super(url, ConfigRegistryMXBean.OBJECT_NAME);
38 public ConfigTransactionJolokiaClient createTransaction() {
40 J4pExecRequest execReq = new J4pExecRequest(objectName, "beginConfig");
41 J4pResponse<J4pExecRequest> resp = execute(execReq);
42 ObjectName transactionControllerON = extractObjectName(resp);
43 return getConfigTransactionClient(transactionControllerON);
47 public ConfigTransactionJolokiaClient getConfigTransactionClient(
48 String transactionName) {
49 ObjectName objectName = ObjectNameUtil
50 .createTransactionControllerON(transactionName);
51 return getConfigTransactionClient(objectName);
55 public ConfigTransactionJolokiaClient getConfigTransactionClient(
56 ObjectName objectName) {
57 return new ConfigTransactionJolokiaClient(url, objectName, this);
61 public CommitStatus commitConfig(ObjectName transactionControllerON)
62 throws ConflictingVersionException, ValidationException {
63 J4pExecRequest execReq = new J4pExecRequest(objectName, "commitConfig",
64 transactionControllerON);
65 JSONObject jsonObject;
66 jsonObject = execute(execReq).getValue();
67 JSONArray newInstancesArray = (JSONArray) jsonObject
69 List<ObjectName> newInstances = jsonArrayToObjectNames(newInstancesArray);
70 JSONArray reusedInstancesArray = (JSONArray) jsonObject
71 .get("reusedInstances");
72 List<ObjectName> reusedInstances = jsonArrayToObjectNames(reusedInstancesArray);
73 JSONArray recreatedInstancesArray = (JSONArray) jsonObject
74 .get("recreatedInstances");
75 List<ObjectName> recreatedInstances = jsonArrayToObjectNames(recreatedInstancesArray);
76 return new CommitStatus(newInstances, reusedInstances,
80 public Object getAttribute(ObjectName configBeanTransactionON, String key) {
81 J4pReadRequest req = new J4pReadRequest(configBeanTransactionON, key);
82 return execute(req).getValue();
85 public ObjectName getAttributeON(ObjectName configBeanTransactionON,
87 JSONObject jsonAttrib = (JSONObject) getAttribute(
88 configBeanTransactionON, key);
89 return extractObjectName(jsonAttrib);
92 // proxy around ConfigTransactionManagerMXBean
95 public ObjectName beginConfig() {
96 ConfigTransactionJolokiaClient result = createTransaction();
97 return result.getTransactionON();
101 public List<ObjectName> getOpenConfigs() {
102 J4pReadRequest req = new J4pReadRequest(objectName, "OpenConfigs");
103 JSONArray jsonArray = execute(req).getValue();
104 return jsonArrayToObjectNames(jsonArray);
108 public long getVersion() {
109 J4pReadRequest req = new J4pReadRequest(objectName, "Version");
110 return (Long) execute(req).getValue();
114 public boolean isHealthy() {
115 J4pReadRequest req = new J4pReadRequest(objectName, "Healthy");
116 return (Boolean) execute(req).getValue();
120 public Set<ObjectName> lookupRuntimeBeans() {
121 return lookupSomething("lookupRuntimeBeans()", new Object[0]);
125 public Set<ObjectName> lookupRuntimeBeans(String moduleName,
126 String instanceName) {
127 return lookupSomething(
128 "lookupRuntimeBeans(java.lang.String,java.lang.String)",
129 new Object[] { moduleName, instanceName });
133 public Object invokeMethod(ObjectName on, String name, Object[] params,
134 String[] signature) {
135 throw new UnsupportedOperationException();
139 public Object getAttributeCurrentValue(ObjectName on, String attributeName) {
140 throw new UnsupportedOperationException();
143 // TODO: implement or deprecate
145 public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
146 throw new UnsupportedOperationException();
150 public ObjectName lookupConfigBeanByServiceInterfaceName(String serviceInterfaceName, String refName) {
151 throw new UnsupportedOperationException();
155 public Map<String, Map<String, ObjectName>> getServiceMapping() {
156 throw new UnsupportedOperationException();
160 public Map<String, ObjectName> lookupServiceReferencesByServiceInterfaceName(String serviceInterfaceName) {
161 throw new UnsupportedOperationException();
165 public Set<String> lookupServiceInterfaceNames(ObjectName objectName) throws InstanceNotFoundException {
166 throw new UnsupportedOperationException();
170 public String getServiceInterfaceName(String namespace, String localName) {
171 throw new UnsupportedOperationException();