首页 > 代码库 > JMX入门开发
JMX入门开发
什么是JMX?或者是JMX是做什么的?我的理解是:可以远程管理/编辑JAVA对象。如图:
上面的SchemaName属性就是可以动态修改的,那么是如何做到的哪?下面咱们逐步分析。
一、首先假设咱们有个对象SystemConfig,包含两个属性threadCount和schemaName
package study;public class SystemConfig implements SystemConfigMBean { private int threadCount; private String schemaName; public SystemConfig(int numThreads, String schema) { this.threadCount = numThreads; this.schemaName = schema; } @Override public void setThreadCount(int noOfThreads) { this.threadCount = noOfThreads; } @Override public int getThreadCount() { return this.threadCount; } @Override public void setSchemaName(String schemaName) { this.schemaName = schemaName; } @Override public String getSchemaName() { return this.schemaName; } @Override public String doConfig() { return "No of Threads=" + this.threadCount + " and DB Schema Name=" + this.schemaName; }}
package study;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();}
二、需要实现远程动态修改这个对象,那么就需要将这个类注册到JMX里面,代码如下:
package study;import java.lang.management.ManagementFactory;import javax.management.MBeanServer;import javax.management.ObjectName;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 Exception { // Get the MBean server MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // register the MBean SystemConfig mBean = new SystemConfig(DEFAULT_NO_THREADS, DEFAULT_SCHEMA); ObjectName name = new ObjectName("xman:type=SystemConfig"); mbs.registerMBean(mBean, name); do { Thread.sleep(3000); System.out.println("Thread Count=" + mBean.getThreadCount() + ":::Schema Name=" + mBean.getSchemaName()); } while (mBean.getThreadCount() != 0); }}
三、想要支持远程管理,就需要配置JMX参数,如图:
四、在本地运行jconsole链接上来,然后修改Count的值:
五、最后再看结果:
实现了上面的内容,那么自然就会想能否程序自动调用修改,而不用jconsole,下面就可以了:
package study;import javax.management.JMX;import javax.management.MBeanServerConnection;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;public class Client { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:8888/jmxrmi"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null); MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); ObjectName mbeanName = new ObjectName("xman:type=SystemConfig"); SystemConfigMBean mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, SystemConfigMBean.class, true); int threadCount = mbeanProxy.getThreadCount(); System.out.println("Current ThreadCount: " + threadCount); mbeanProxy.setThreadCount(100); threadCount = mbeanProxy.getThreadCount(); System.out.println("Changed ThreadCount: " + threadCount); Thread.sleep(3); jmxc.close(); }}
上面的程序不需要我怎么解释了吧,远程连接,修改内容。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。