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;
13 import javax.management.ObjectName;
15 import org.jolokia.client.request.J4pExecRequest;
16 import org.jolokia.client.request.J4pReadRequest;
17 import org.jolokia.client.request.J4pResponse;
18 import org.json.simple.JSONArray;
19 import org.json.simple.JSONObject;
20 import org.opendaylight.controller.config.api.ConflictingVersionException;
21 import org.opendaylight.controller.config.api.ValidationException;
22 import org.opendaylight.controller.config.api.jmx.CommitStatus;
23 import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
24 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
25 import org.opendaylight.controller.config.util.ConfigRegistryClient;
27 public class ConfigRegistryJolokiaClient extends ListableJolokiaClient
28 implements ConfigRegistryClient {
30 public ConfigRegistryJolokiaClient(String url) {
31 super(url, ConfigRegistryMXBean.OBJECT_NAME);
35 public ConfigTransactionJolokiaClient createTransaction() {
37 J4pExecRequest execReq = new J4pExecRequest(objectName, "beginConfig");
38 J4pResponse<J4pExecRequest> resp = execute(execReq);
39 ObjectName transactionControllerON = extractObjectName(resp);
40 return getConfigTransactionClient(transactionControllerON);
44 public ConfigTransactionJolokiaClient getConfigTransactionClient(
45 String transactionName) {
46 ObjectName objectName = ObjectNameUtil
47 .createTransactionControllerON(transactionName);
48 return getConfigTransactionClient(objectName);
52 public ConfigTransactionJolokiaClient getConfigTransactionClient(
53 ObjectName objectName) {
54 return new ConfigTransactionJolokiaClient(url, objectName, this);
58 public CommitStatus commitConfig(ObjectName transactionControllerON)
59 throws ConflictingVersionException, ValidationException {
60 J4pExecRequest execReq = new J4pExecRequest(objectName, "commitConfig",
61 transactionControllerON);
62 JSONObject jsonObject;
63 jsonObject = execute(execReq).getValue();
64 JSONArray newInstancesArray = (JSONArray) jsonObject
66 List<ObjectName> newInstances = jsonArrayToObjectNames(newInstancesArray);
67 JSONArray reusedInstancesArray = (JSONArray) jsonObject
68 .get("reusedInstances");
69 List<ObjectName> reusedInstances = jsonArrayToObjectNames(reusedInstancesArray);
70 JSONArray recreatedInstancesArray = (JSONArray) jsonObject
71 .get("recreatedInstances");
72 List<ObjectName> recreatedInstances = jsonArrayToObjectNames(recreatedInstancesArray);
73 return new CommitStatus(newInstances, reusedInstances,
77 public Object getAttribute(ObjectName configBeanTransactionON, String key) {
78 J4pReadRequest req = new J4pReadRequest(configBeanTransactionON, key);
79 return execute(req).getValue();
82 public ObjectName getAttributeON(ObjectName configBeanTransactionON,
84 JSONObject jsonAttrib = (JSONObject) getAttribute(
85 configBeanTransactionON, key);
86 return extractObjectName(jsonAttrib);
89 // proxy around ConfigTransactionManagerMXBean
92 public ObjectName beginConfig() {
93 ConfigTransactionJolokiaClient result = createTransaction();
94 return result.getTransactionON();
98 public List<ObjectName> getOpenConfigs() {
99 J4pReadRequest req = new J4pReadRequest(objectName, "OpenConfigs");
100 JSONArray jsonArray = execute(req).getValue();
101 return jsonArrayToObjectNames(jsonArray);
105 public long getVersion() {
106 J4pReadRequest req = new J4pReadRequest(objectName, "Version");
107 return (Long) execute(req).getValue();
111 public boolean isHealthy() {
112 J4pReadRequest req = new J4pReadRequest(objectName, "Healthy");
113 return (Boolean) execute(req).getValue();
117 public Set<ObjectName> lookupRuntimeBeans() {
118 return lookupSomething("lookupRuntimeBeans()", new Object[0]);
122 public Set<ObjectName> lookupRuntimeBeans(String moduleName,
123 String instanceName) {
124 return lookupSomething(
125 "lookupRuntimeBeans(java.lang.String,java.lang.String)",
126 new Object[] { moduleName, instanceName });
130 public Object invokeMethod(ObjectName on, String name, Object[] params,
131 String[] signature) {
132 throw new UnsupportedOperationException();
136 public Object getAttributeCurrentValue(ObjectName on, String attributeName) {
137 throw new UnsupportedOperationException();