- 浏览: 378785 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
u014689192:
很不错
JMX学习笔记(三)-MXBean -
focus2008:
进制转换之后,根本不会执行js代码,感觉你没有测试过吧
xss漏洞之进制转换 -
focus2008:
如何使用过滤器来处理呢?
xss漏洞之进制转换 -
1169158401:
我艹,我那天这么写,包括一些方法,然后那货说这样写不容易看懂。 ...
import static简化代码 -
AquariusM:
奢华的JVM介绍!
JMX学习笔记(三)-MXBean
在MBean中有只要遵循以下两个规则,我们就可以在jconsole中动态的改变MBean中的属性值
1. JMX中要定义接口必须以xxxMBean的规范定义
2. 得有类实现xxxMBean接口
例如:
package com.haitao.jmx.mxbean; /** * Server Configure MBean * * @author haitao.tu * */ public interface ServerConfigureMBean { public int getPort(); public void setPort(int port); public String getHost(); public void setHost(String host); public int getMaxThread(); public void setMaxThread(int maxThread); public int getMinThread(); public void setMinThread(int minThread); }
接着实现这个MBean:
package com.haitao.jmx.mxbean; /** * Server Configure * * @author haitao.tu * */ public class ServerConfigure implements ServerConfigureMBean { private int port; private String host; private int maxThread; private int minThread; public ServerConfigure(int port, String host, int maxThread, int minThread) { this.port = port; this.host = host; this.maxThread = maxThread; this.minThread = minThread; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getMaxThread() { return maxThread; } public void setMaxThread(int maxThread) { this.maxThread = maxThread; } public int getMinThread() { return minThread; } public void setMinThread(int minThread) { this.minThread = minThread; } }
测试:
package com.haitao.jmx.mxbean; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; /** * Server Test * * @author haitao.tu * */ public class ServerTest { public static void main(String[] args) throws Exception { testServerConfigureMBean(); } public static void testServerConfigureMBean() throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ServerConfigure serverConfigure = new ServerConfigure(8080, "test.haitao.com", 20, 100); ObjectName serverName = new ObjectName( "com.haitao.jmx.mxbean:type=ServerConfigure"); mbs.registerMBean(serverConfigure, serverName); System.out.println("Waiting..."); Thread.sleep(Long.MAX_VALUE); } }
打开jconsole:
但是以上这些ServerConfigure的属性都是基本类型,包含在java.lang.*里,设想,如果说jconsole在类外一个远端的jvm上,如果这里的属性是一个自定义对象,远端的jvm可能不知道该类型的对象:
修改上边的ServerConfigre,使他成为一个聚合对象,去掉ServerConfigureMBean接口实现:
package com.haitao.jmx.mxbean; /** * Server Configure * * @author haitao.tu * */ public class ServerConfigure { private int port; private String host; private int maxThread; private int minThread; public ServerConfigure(int port, String host, int maxThread, int minThread) { this.port = port; this.host = host; this.maxThread = maxThread; this.minThread = minThread; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getMaxThread() { return maxThread; } public void setMaxThread(int maxThread) { this.maxThread = maxThread; } public int getMinThread() { return minThread; } public void setMinThread(int minThread) { this.minThread = minThread; } }
新建一个ServerMBean接口:
package com.haitao.jmx.mxbean; /** * Server MBean * * @author haitao.tu * */ public interface ServerMBean { public ServerConfigure getServerConfigure(); public void setServerConfigure(ServerConfigure serverConfigure); public void defaultServerConfigure(); }
实现ServerMBean并封装ServerConfigure类:
package com.haitao.jmx.mxbean; /** * Server * * @author haitao.tu * */ public class Server implements ServerMBean { /** * 封装 */ private ServerConfigure serverConfigure; public Server(ServerConfigure serverConfigure) { this.serverConfigure = serverConfigure; } @Override public ServerConfigure getServerConfigure() { synchronized (serverConfigure) { return this.serverConfigure; } } @Override public void setServerConfigure(ServerConfigure serverConfigure) { synchronized (serverConfigure) { this.serverConfigure = serverConfigure; } } @Override public void defaultServerConfigure() { synchronized (serverConfigure) { serverConfigure.setPort(80); serverConfigure.setHost("www.haitao.com"); serverConfigure.setMinThread(10); serverConfigure.setMaxThread(500); } } }
测试:
package com.haitao.jmx.mxbean; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; /** * Server Test * * @author haitao.tu * */ public class ServerTest { public static void main(String[] args) throws Exception { testServerMBean(); } public static void testServerMBean() throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ServerConfigure serverConfigure = new ServerConfigure(8080, "test.haitao.com", 20, 100); Server server = new Server(serverConfigure); ObjectName serverName = new ObjectName( "com.haitao.jmx.mxbean:type=Server"); mbs.registerMBean(server, serverName); System.out.println("Waiting..."); Thread.sleep(Long.MAX_VALUE); } }
打开jconsole查看:
为了让与远端JVM认识该对象,我们需要将ServerMbean改为ServerMXBean,并使用java.beans.ConstructorProperties注解告诉JVM怎样组装该对象:
1. 使用java.beans.ConstructorProperties注解:
package com.haitao.jmx.mxbean; import java.beans.ConstructorProperties; /** * Server Configure * * @author haitao.tu * */ public class ServerConfigure { private int port; private String host; private int maxThread; private int minThread; /** * 加入@ConstructorPropertiesz注解 */ @ConstructorProperties({"port", "host", "maxThread", "minThread"}) public ServerConfigure(int port, String host, int maxThread, int minThread) { this.port = port; this.host = host; this.maxThread = maxThread; this.minThread = minThread; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getMaxThread() { return maxThread; } public void setMaxThread(int maxThread) { this.maxThread = maxThread; } public int getMinThread() { return minThread; } public void setMinThread(int minThread) { this.minThread = minThread; } }
2. 修改ServerMbean为ServerMXBean:
package com.haitao.jmx.mxbean; /** * Server MXBean * * @author haitao.tu * */ public interface ServerMXBean { public ServerConfigure getServerConfigure(); public void setServerConfigure(ServerConfigure serverConfigure); public void defaultServerConfigure(); }
测试代码一样,就不再重复,最后运行测试,查看jconsole:
双击值,我们将会看到:
实际上MXBean的概念很简单,就是定义xxxMXBean接口,然后实现这个接口,与MBean类似,
为了阐述这个MXBean与MBean的不同才列出这么多代码,希望大家能理解:)
评论
5 楼
u014689192
2017-12-20
很不错
4 楼
AquariusM
2014-10-30
奢华的JVM介绍!
3 楼
nbkangta
2014-02-27
比外文资料容易理解多了~
2 楼
chigooo
2011-12-15
讲的非常详细~赞!
1 楼
heavensay
2011-07-01
thanks,学习了
发表评论
-
import static简化代码
2011-11-03 00:10 1699喜欢定义常量的哥们你伤不起啊,好处当然是大大滴,但是定义的名字 ... -
Java永远的伤-中国1927年12月31日午夜
2011-08-15 20:44 3897话说在中国1927年12月31日午 ... -
高性能的SimpleDateFormat
2011-07-18 23:35 3867以前写过一篇 , 《SimpleDateFormat性能调优》 ... -
xss漏洞之进制转换
2011-07-18 01:17 11274SQL注入的事件已经是上个世纪最令人头疼的攻击方法,21世纪又 ... -
tomcat关不掉的原因
2011-07-12 23:51 43534tomcat/bin 目录下的catalina.sh是比较常用 ... -
接口调用频率限制代码
2011-06-28 20:49 10614有很多时候我们写的代码不是你想跑多快就能跑多快的, 因为一些陈 ... -
java调用linux命令传递参数问题
2011-05-18 02:04 10736简单的不带通配符linux命令调用非常简单,使用Runtime ... -
Java位运算的优势
2011-04-09 01:58 2296在Java中对数据的运算,有很好的规范支持,尤其是针对二进制的 ... -
Facebook BigPipe技术
2011-01-04 00:37 2695关于web应用,从html的产生,到客户端浏览器的渲染, ... -
SimpleDateFormat性能调优
2010-11-25 00:12 4219万能的SimpleDateFormat可以把java.util ... -
JMX学习笔记(二)-Notification
2010-11-07 15:25 9026Notification 通知,也可理解为消息,有通知,必 ... -
JMX学习笔记(一)-MBean
2010-10-16 16:27 13654JMX 即 Java Management Ex ... -
cookie安全
2010-07-06 01:09 4148cookie的domian,path,expires, ... -
native2ascii转换后仍然乱码
2010-04-18 17:47 1817native2ascii转换的时候如果不带-encoding ... -
JPA换进下慎用entity
2010-01-26 11:36 2630今天跟一个同事调试代码,突然发现,诸如findUser ... -
http session原理
2009-12-02 00:41 2862大家都知道session是web中在服务器端保存用户状 ... -
java中获得当前目录的各种方法
2009-09-04 11:21 14384Java本来就是跨平台的编程工具,所以当然要做跨平台的 ... -
String、StringBuffer与StringBuilder
2009-04-26 22:04 1929先不废话了,来段程序: package com.tuz; ...
相关推荐
**JMX(Java Management Extensions)**是Java平台提供的一种用于管理与监控应用程序、操作系统和网络设备的标准框架。在本文中,我们将深入探讨JMX如何与Spring框架整合,以实现更高效的服务管理和监控。 首先,**...
标签:agent-jmx-3.0.1-javadoc.jar,agent,jmx,3.0.1,javadoc,jar包下载,依赖包
tomcat8监控jar包,catalina-jmx-remote java-visualVM专用
tomcat9监控jar包,catalina-jmx-remote java-visualVM专用
学习JMX和MXBean,你需要了解以下关键点: 1. **MBean服务器**:这是JMX的核心组件,它负责注册、存储和管理MBeans。每个Java虚拟机都有一个默认的MBean服务器。 2. **MBean接口**:MBean必须实现一个接口,该接口...
tomcat7监控jar包,catalina-jmx-remote java-visualVM专用
tomcat-catalina-jmx-remote-9.0.5 tomcat-catalina-jmx-remote-9.0.5.jar
MBean有三种主要类型: 1. **Standard MBean**: 这是最常见的MBean类型,通过在类上使用`@ManagedResource`注解,然后使用`StandardMBean`类进行包装,使普通Java类成为MBean。 2. **Dynamic MBean**: 动态MBean...
1. **jmx-1_2_1-ri.zip**:这个文件提供了JMX 1.2.1版本的运行时实现(Runtime Implementation,RI)。RI是JMX规范的具体实现,允许开发者在Java应用程序中使用JMX功能,如创建MBeans(Managed Beans),管理对象和...
通过配置tomcat/bin/catalina.sh使用。使用方法参照:https://blog.51cto.com/13700457/2397812
NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1902211
Description Resource Path Location Type Missing artifact com.sun.jmx:jmxri:jar:1.2.1 pom.xml /eshop-storm line 2 Maven Dependency Problem
maven编译时报找不到这两个jar文件,发现已经无法从网站...Could not resolve dependencies for project ****:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.sun.jdmk:jmxtools:jar:1.2.1, ...
`jmx-tools.zip`这个压缩包可能包含了一些用于操作和可视化JMX功能的工具。 `HtmlAdaptorServer`是JMX提供的一种机制,它允许通过HTTP协议访问和管理MBeans。这个服务器实现了一个JMX远程过程调用(RMI)接口,使得...
Tomcat 8 Extras catalina-jmx-remote.jar,JMX监控所需文件之一。 JMX Remote Lifecycle Listener - org.apache.catalina.mbeans.JmxRemoteLifecycleListener
标签:agent-jmx-3.0-beta-1.jar,agent,jmx,3.0,beta,1,jar包下载,依赖包
jmx-prometheus-httpserver-0.17.2
标签:agent-jmx-3.0-beta-1-sources.jar,agent,jmx,3.0,beta,1,sources,jar包下载,依赖包
标签:agent-car-jmx-3.0-beta-1-sources.jar,agent,car,jmx,3.0,beta,1,sources,jar包下载,依赖包
Java Management Extensions (JMX) 是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备。`jmxri-1.2.1.jar` 和 `jmxtools-1.2.1.jar` 是与JMX相关的两个核心库文件,它们在Java应用程序中扮演...