package mbeanTest; import java.util.Set; import javax.management.Attribute; import javax.management.MBeanOperationInfo; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.Notification; import javax.management.NotificationListener; import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.modelmbean.RequiredModelMBean; public class JmxTest { /** * 测试标准MBean 需要被管理的方法、属性等在接口中定义好,创建一个类,继承此接口,然后实现时候方法, * 这样,但注册到MBeanServer的时候,会自动管理其,接口中的各个属性、方法。 * * @throws Exception */ public void test1StandardMBean() throws Exception { // MBeanServer ms = MBeanServerFactory.createMBeanServer("JMX2Test"); MBeanServer ms = MBeanServerFactory.createMBeanServer(); ObjectName name = new ObjectName("Hellogg:type=myfirstMbean"); // ms.createMBean("HelloWorld", objectName); HelloWorld hello = new HelloWorld(" yao yao , qie ke nao "); // MBean需要实现NotificationBroadcaster接口,支持各种事件的发送和处理 hello.addNotificationListener(new NotificationListener() { public void handleNotification(Notification notification, Object handback) { System.out.println(" access listen : " + notification); } }, null, null); ms.registerMBean(hello, name); String s1 = (String) ms.getAttribute(name, "Hello"); System.out.println(" the init value1 : " + s1); ms.setAttribute(name, new Attribute("Hello", " hi ,hi ,man ")); String s2 = (String) ms.getAttribute(name, "Hello"); System.out.println(" the init value2 : " + s2); ms.invoke(name, "message", new Object[]{ " i as message " }, new String[]{ "java.lang.String" }); ObjectName name2 = new ObjectName("Hellogg:type=myfirstMbean"); Set<ObjectInstance> set = ms.queryMBeans(name2, null); System.out.println("set: "+set); } /** * 动态Mbean,需要实现DynamicMBean接口,并且任何需要,管理的方法、属性,都需要在接口的方法中, * 自己来实现,Mbeaninfo也需要自己设置,这样编程的工作量大,但是有很大的可控性。 * * @throws Exception */ public void test2DynamicMBean() throws Exception { HelloWorldDynamic dynamic = new HelloWorldDynamic(); MBeanServer ms = MBeanServerFactory.createMBeanServer(); // 创建一个ObjectName ObjectName name = new ObjectName("DynamicHello:type=dinamicMbean"); // 注册动态MBean到MBeanServer服务上去 ms.registerMBean(dynamic, name); // 得到属性值 Object o = ms.getAttribute(name, "getInstance"); String hello = (String) ms.getAttribute(name, "gh"); MBeanOperationInfo operation = dynamic.getMBeanInfo().getOperations()[0]; System.out.println(" attribute value of getInstance:" + o + "; attribute value of gh:" + hello); // 执行一个方法(操作) ms.invoke(name, operation.getName(), null, null); } public void test3RequiredModelMBean() throws Exception { HelloWorldModelMBean hello = new HelloWorldModelMBean(); MBeanServer ms = MBeanServerFactory.createMBeanServer(); RequiredModelMBean modelMbean = hello.createModelBean(); ObjectName name = new ObjectName("RequiredMBeanHello:type=ModelMbean"); // 监听属性变化事件 modelMbean.addAttributeChangeNotificationListener( new NotificationListener() { @Override public void handleNotification(Notification notification, Object handback) { System.out.println(" --Attribute已经改变-- "); } }, null, null); ms.registerMBean(modelMbean, name); //ms.invoke(name, "setHello", new Object[]{ " 调用setHello方法 " }, new String[]{ "java.lang.String" }); String s = (String) ms.getAttribute(name, "hello"); // 出发Attribute改变事件 // ms.setAttribute(name, new Attribute("hello", "bbb")); String s2 = (String) ms.getAttribute(name, "hello"); System.out.println(s); System.out.println(s2); } public static void main(String args[]) throws Exception { JmxTest jmx = new JmxTest(); jmx.test3RequiredModelMBean(); } }
时间: 2024-10-13 16:29:50