zoukankan      html  css  js  c++  java
  • 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();
            
            
            
        }
    
    }
  • 相关阅读:
    Tomcat的安装配置与JavaWeb入门教程
    傅立叶变换系列(一)傅立叶系列的由来
    剑指Offer(四):重建二叉树
    《C++数据结构-快速拾遗》 手写链表
    《C++数据结构-快速拾遗》 基础常识
    《机器学习实战》线性回归
    剑指Offer(三):从尾到头打印链表
    博客美化操作
    偏差、方差和噪声的权衡关系
    《机器学习实战》AdaBoost算法(手稿+代码)
  • 原文地址:https://www.cnblogs.com/wangyonglong/p/7427211.html
Copyright © 2011-2022 走看看