如何在没有 JConsole 的情况下使用 JMX 执行方法?
我想通过 JMX 从 Java 代码中调用方法。通过下面的代码,我可以获得 MBean 接口(interface)的所有方法的名称,但我还不能真正执行它们。仍然缺少一些东西,有人可以帮助我吗?
private static String connectJmx() {
StringBuilder sb = new StringBuilder();
JMXServiceURL serviceUrl;
JMXConnector jmxConnector = null;
try {
serviceUrl = new JMXServiceURL(URL);
jmxConnector = JMXConnectorFactory.connect(serviceUrl, null);
MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection();
ObjectName objectName = ObjectNameProvider.getObjectName();
MBeanInfo info = mbeanConn.getMBeanInfo(objectName);
MBeanOperationInfo[] operations = info.getOperations();
for (int i = 0; i < operations.length; i++) {
sb.append(operations[i].getName()).append("\n");
}
}
catch (Exception e) {
LogManager.doLog(LOG, LOGLEVEL.INFO, "exception connection jmx", e);
} finally {
try {
if(jmxConnector != null){
jmxConnector.close();
}
} catch (IOException e) {
//
}
}
return sb.toString();
}
上面的 for 循环收集方法的名称。我想要类似的东西,而不是收集名称,而是实际执行它们。 请不要推荐 JConsole,因为其他原因它不起作用。
最佳答案
您还没有放置调用 mbean 方法的代码。下面是一个示例代码,可帮助您完成此操作:
import javax.management.*;
import javax.management.remote.*;
import com.sun.messaging.AdminConnectionFactory;
import com.sun.messaging.jms.management.server.*;
public class InvokeOp
{
public static void main (String[] args)
{
try
{ // Create administration connection factory
AdminConnectionFactory acf = new AdminConnectionFactory();
// Get JMX connector, supplying user name and password
JMXConnector jmxc = acf.createConnection("AliBaba", "sesame");
// Get MBean server connection
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
// Create object name
ObjectName serviceConfigName = MQObjectName.createServiceConfig("jms");
// Invoke operation
mbsc.invoke(serviceConfigName, ServiceOperations.PAUSE, null, null);
// Close JMX connector
jmxc.close();
}
catch (Exception e)
{ System.out.println( "Exception occurred: " + e.toString() );
e.printStackTrace();
}
}
}
关于java - 在没有 JConsole 的情况下使用 JMX 执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583859/