仮想マシン実践(九)JMXに関するいくつかのdemo
3498 ワード
(一)MBeanを登録する
(二)JMXポートを登録する
(三)クライアントコード
/**
* MBean
*/
@Test
public void registerMBean() {
// MBean
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
try {
// MBean
server.registerMBean(new HelloWorld(), new ObjectName("domain1:key1=val1"));
// MBean
server.registerMBean(new HelloWorld(), new ObjectName("domain1:key2=val2"));
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException
| MalformedObjectNameException e) {
e.printStackTrace();
}
}
(二)JMXポートを登録する
/**
* JMX
* @throws Exception
*/
@Test
public void restartServer() throws Exception {
// JMX
LocateRegistry.createRegistry(9999);
JMXConnectorServer jcs = JMXConnectorServerFactory.newJMXConnectorServer(
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"),
null,
ManagementFactory.getPlatformMBeanServer());
jcs.start();
}
(三)クライアントコード
/**
*
* @throws Exception
*/
@Test
public void mbeanClient() throws Exception {
//connect JMX
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(url,null);
// JMX
MBeanServerConnection conn = connector.getMBeanServerConnection();
//
String domains[] = conn.getDomains();
for (int i = 0; i < domains.length; i++) {
System.out.println("Domain[" + i +"] = " + domains[i]);
}
// MBean
System.out.println("MBean count = " + conn.getMBeanCount());
// MBean
Set set = conn.queryMBeans(null, null);
for (Iterator it = set.iterator(); it.hasNext();) {
ObjectInstance oi = it.next();
System.out.println(oi.getObjectName());
}
ObjectName name = new ObjectName("domain1:key1=val1");
// ObjectName :MBeanInfo
MBeanInfo info = conn.getMBeanInfo(name);
System.out.println("Class:" + info.getClassName());
System.out.println("Attribute:" + info.getAttributes()[0].getName());
System.out.println("Operation:" + info.getOperations()[0].getName());
// MBean ( )
conn.setAttribute(name, new Attribute("Greeting", "JOHNLIUISMINE"));
conn.getAttribute(name, "Greeting");
// MBean ( ) ObjectName
HelloWorldMBean proxy = (HelloWorldMBean) MBeanServerInvocationHandler.newProxyInstance(conn, name, HelloWorldMBean.class, false);
proxy.setGreeting("nice to meet u client");
proxy.getGreeting();
// MBean ( ) invoke
System.out.println(conn.invoke(name, "printGreeting", null, null));
//
connector.close();
}