/* *Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * *WSO2 Inc. licenses this file to you under the Apache License, *Version 2.0 (the "License"); you may not use this file except *in compliance with the License. *You may obtain a copy of the License at * *http://www.apache.org/licenses/LICENSE-2.0 * *Unless required by applicable law or agreed to in writing, *software distributed under the License is distributed on an *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *KIND, either express or implied. See the License for the *specific language governing permissions and limitations *under the License. */ package org.wso2.carbon.automation.test.utils.jmxclient.generic; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.management.AttributeNotFoundException; import javax.management.InstanceNotFoundException; import javax.management.MBeanException; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import java.io.IOException; import java.util.Hashtable; public class JMXClient { private MBeanServerConnection mbsc = null; private String userName; private String password; private ObjectName objectName; private JMXConnector jmxc; private static final Log log = LogFactory.getLog(JMXClient.class); /** * @param serviceConnectionName name of the service * @param userName user name * @param password password * @throws MalformedObjectNameException throws if the connection unsuccessful */ public JMXClient(String serviceConnectionName, String userName, String password) throws MalformedObjectNameException { this.objectName = new ObjectName(serviceConnectionName); this.userName = userName; this.password = password; } /** * connect to org.wso2.carbon for JMX monitoring * * @return return MBeanServerConnection * @throws java.io.IOException error in making connection * @throws javax.management.MalformedObjectNameException error in making connection */ public MBeanServerConnection connect(String jmxServerURL) throws IOException, MalformedObjectNameException { //need to read rmi ports from environment config JMXServiceURL url = new JMXServiceURL(jmxServerURL); Hashtable<String, String[]> hashT = new Hashtable<String, String[]>(); String[] credentials = new String[]{userName, password}; hashT.put("jmx.remote.credentials", credentials); jmxc = JMXConnectorFactory.connect(url, hashT); mbsc = jmxc.getMBeanServerConnection(); if (mbsc != null) { return mbsc; } return null; } /** * Disconnect JMX connection */ public void disconnect() { if (jmxc != null) { log.info("Closing jmx client connection..............."); try { jmxc.close(); } catch (IOException e) { log.warn("Unable to close the connection"); } } if (mbsc != null) { mbsc = null; } } /** * Invoke operation of a service * * @param operationName operation name to be invoked * @param params parameters for the operation * @return results of the operation invocation * @throws ReflectionException throws if operation invocation fails * @throws MBeanException throws if operation invocation fails * @throws InstanceNotFoundException throws if operation invocation fails * @throws IOException throws if operation invocation fails */ public Object invoke(String operationName, Object[] params) throws ReflectionException, MBeanException, InstanceNotFoundException, IOException { return mbsc.invoke(objectName, operationName, params, new String[]{String.class.getName()}); } /** * Get values of attribute exposed for management * * @param attribute name of the attribute * @return attribute value * @throws AttributeNotFoundException throws if attribute invocation fails * @throws MBeanException throws if attribute invocation fails * @throws ReflectionException throws if attribute invocation fails * @throws InstanceNotFoundException throws if attribute invocation fails * @throws IOException throws if attribute invocation fails */ public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException, InstanceNotFoundException, IOException { return mbsc.getAttribute(objectName, attribute); } }