您的位置:首页 > 编程语言 > Java开发

java之JMX

2016-02-11 12:37 471 查看

java之JMX

有关JMX的定义和架构就不详解了,见百度百科:

http://baike.baidu.com/link?url=6QzGGEqphTmpft3ll5mXmDNVRdvLRZhkvGaqAWyO6EliwrHeIwt5bdMd188iMlzylxoxr7gRbtIWn2NQODBLZa

代码实例:

与创建一个普通的bean没什么区别:
package com.doctor.java.jmx;

/**
 * @author sdcuike
 *
 * @time 2016年2月9日 下午9:47:04
 * 
 * @see http://www.journaldev.com/1352/what-is-jmx-mbean-jconsole-tutorial  *      The interface name must end with MBean
 */
public interface SystemConfigMBean {
    public void setThreadCount(int noOfThreads);

    public int getThreadCount();

    public void setSchemaName(String schemaName);

    public String getSchemaName();

    // any method starting with get and set are considered
    // as attributes getter and setter methods, so I am
    // using do* for operation.
    public String doConfig();

}


package com.doctor.java.jmx;

/**
 * @author sdcuike
 *
 * @time 2016年2月9日 下午9:51:53
 */
public class SystemConfig implements SystemConfigMBean {

    private int threadCount;
    private String schemaName;

    public SystemConfig(int threadCount, String schemaName) {
        this.threadCount = threadCount;
        this.schemaName = schemaName;
    }

    @Override
    public void setThreadCount(int noOfThreads) {
        this.threadCount = noOfThreads;

    }

    @Override
    public int getThreadCount() {
        return threadCount;
    }

    @Override
    public void setSchemaName(String schemaName) {
        this.schemaName = schemaName;

    }

    @Override
    public String getSchemaName() {
        return schemaName;
    }

    @Override
    public String doConfig() {
        return "No of Threads=" + this.threadCount + " and DB Schema Name=" + this.schemaName;

    }

}


然后我们创建一个测试例子:
package com.doctor.java.jmx;

import java.lang.management.ManagementFactory;
import java.util.concurrent.TimeUnit;

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;

/**
 * @author sdcuike
 *
 * @time 2016年2月9日 下午9:56:27
 */
public class SystemConfigManagement {

    private static final int DEFAULT_NO_THREADS = 10;
    private static final String DEFAULT_SCHEMA = "default";

    public static void main(String[] args) throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, InterruptedException {
        // Get the MBean server
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();

        // register the MBean
        SystemConfig systemConfig = new SystemConfig(DEFAULT_NO_THREADS, DEFAULT_SCHEMA);
        ObjectName objectName = new ObjectName("com.doctor.java.jmx:type=SystemConfig");
        mBeanServer.registerMBean(systemConfig, objectName);

        do {
            TimeUnit.SECONDS.sleep(3);
            System.out.println("Thread Count=" + systemConfig.getThreadCount() + ":::Schema Name=" + systemConfig.getSchemaName());
        } while (systemConfig.getThreadCount() != 0);
    }

}


运行:

运行的时候,我们必须启用虚拟机选项-Dcom.sun.management.jmxremote



运行如图:



现在我们用java工具jconsole修改变量:



修改变量值:





执行修改:



看看我们运行的程序输出:



是不是修改后的属性生效了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: