JmxTest
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(); } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· 万字长文详解Text-to-SQL
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!