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();

    }

}
时间: 2024-10-13 16:29:50

JmxTest的相关文章

cassandra高级操作之JMX操作

需求场景 项目中有这么个需求:统计集群中各个节点的数据量存储大小,不是记录数. 一开始有点无头绪,后面查看cassandra官方文档看到Monitoring章节,里面说到:Cassandra中的指标使用Dropwizard Metrics库进行管理. 这些指标可以通过JMX查询,也可以使用多个内置和第三方报告插件推送到外部监控系统(Jconsole).那么数据量存储大小是不是也是cassandra的某项指标了? 带着疑问,我通过Jconsole看到了cassandra的一些指标(先启动cassa

JMX

一.为什么使用JMX,解决那些问题 举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢? 写死在程序里,到要改变时就去改程序,然后再编译发布: 把这些信息写在一个配置文件里(JAVA一般都是*.properties文件),到要改变时只要改配置文件,但还是重新启动系统,以便读取配置文件里的新值: 写一个段代码,把配置值缓存起来,系统在读值的时候,先看看配置文件有没有更动.如有更改则重读一遍,否则从缓存里读取值 用JMX!把配置属性集中在一个类

运用JMX监控Tomcat

1.先配Tomcat的启动语句,window下tomcat的bin/catalina.bat(linux为catalina.sh),在头上注释部分(.bat为rem..sh为#)后面加上set JAVA_OPTS=-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true (linux为JAVA_

监控应用服务器使用JMX监控Tomcat (转收藏)

前言:做了一个监控应用服务器的项目(支持Tocmat.WebSphere.WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难.为了留下点印记,给后来人留下 点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享.水平有限,难免疏漏,还望指正.如有疑问,欢迎留言,或者加入Q群参与讨 论:35526521. 一.激活Tomcat的JMX远程配置 要通过JMX远程监控Tomcat,首先需要激活Tomcat的

JMX超详细解读

一.JMX的定义 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架.JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理.这是官方文档上的定义,我看过很多次也无法很好的理解.我个人的理解是JMX让程序有被管理的功能,例如你开发一个WEB网站,它是在24小时不间断运行,那么你肯定会对网站进行监控,如每天的UV.PV是多少:又或者在业务高峰的期间,你想对接口进行限流,就必须去修改接口并发的配置值. 应用场景:

JMX实现远程服务器系统监控之一

最近做多个远程服务器的系统监控,花费了不少的时间,下面就做一个总结 从JAVA 5开始,JDK提供了一些JVM检测的API,这就是有名的java.lang.management 包,包里提供了许多MXBean的接口类,可以很方便的获取到JVM的内存.GC.线程.锁.class.甚至操作系统层面的各种信息,本文就简单的介绍一种利用JMX对JAVA进程进行CPU.堆内存使用的监控.可能有人会觉得没必要这样做,因为用jconsole之类的工具都能做到,而且会比本文的例子更详细.但是有些时候将conso

Tomcat Server Configuration Automation Reinforcement(undone)

目录 0. 引言 1. 黑客针对WEB Server会有那些攻击面 2. 针对Tomcat Server可以做的安全加固 3. Managing Security Realms with JMX 4. 实现对TOMCAT配置信息的动态修改(hot dynamic edit) 5. Tomcat后台manager页面禁用 0. 引言 WEB容器(WEB Server)是运行在操作系统上的一个应用级软件,对服务器的配置(config文件)进行加固处理是防御WEB相关漏洞的一个有效的手段.对于实现WE

Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password

在配置JMX远程访问的时候,设置jmxremote.password文件权限,修改该文件时添加写权限,chmod +w jmxremote.password ,放开角色信息那俩行的注释,保存,再使用chmod 0400 jmxremote.password 这样就是它正确的权限设置 jmxremote.password 在jdk/jre/lib/management/下,jmxremote.password.template复制,去掉.template后缀 转载请注明出处:http://blog

6月27日任务2

3 jmx监控tomcat http://blog.csdn.net/l1028386804/article/details/51547408 import java.lang.management.MemoryUsage; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Formatter; import java.util.HashMap; import java.util.Iterator