- 浏览: 370075 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
xujishen:
新入职 写道还是没很明白~~这个BigDecimal.ROUN ...
BigDecimal带精度的运算 -
542348257:
数字为long型的时候 好像处理有点问题
【无聊的笔记】将数字转换为中文读法 -
陈小妞:
当你输入100003980的时候在万位会多一个万字
【无聊的笔记】将数字转换为中文读法 -
stranger520:
可能有问题吧,举个例子: pacage1/User.class ...
java读取指定package下的所有class -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java学习——mina篇
使用jmx的东东主要包括下面几个步骤了:
发布jmxServer。
注册jmxBean到MBeanServer上。
使用连接jmx的client工具来连接jmxServer。
一:前言
MBeanServer以及连接MBean的Client多的数不清。这里我就挑选一种经常会用到的方式来,
本片文章主要还是为下篇 “JBOSS里使用jmx来进行监控” 做好铺垫。
MBeanServer就采用jdk自带的MBeanServer来实现。
client采用jconsole来连接,其它的client原理都类似。
只有server上有一些些区别。
二:发布一个jmxServer
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
因为要采用修改vm参数的方式来运行MBeanServer所以传统的MBeanServerFactory.createMBeanServer();
需要进行修改。
三:创建自己的MBean,MBeanInfo并同时实现invoke,能够让jconsole里调用方法
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; import javax.management.Attribute; import javax.management.AttributeList; import javax.management.AttributeNotFoundException; import javax.management.DynamicMBean; import javax.management.InvalidAttributeValueException; import javax.management.MBeanAttributeInfo; import javax.management.MBeanConstructorInfo; import javax.management.MBeanException; import javax.management.MBeanInfo; import javax.management.MBeanOperationInfo; import javax.management.ReflectionException; import javax.management.modelmbean.ModelMBeanAttributeInfo; import javax.management.modelmbean.ModelMBeanOperationInfo; /** * @author guoliang * @version 创建时间:2010-11-13 下午11:22:05 类说明 */ public class MyMBean implements DynamicMBean { private String testField = "initial field value"; public String getTestField() { return testField; } public void setTestField(String testField) { this.testField = testField; } public String testMethod(String from) { System.out.println("hello world" + from); return "hello world" + from; } @Override public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException { /** * 属性操作在这里进行,invoke */ Class cls = this.getClass(); try { String methodName = getMethodNameByField(attribute); Method attributeGet = cls.getMethod("get" + methodName, null); return attributeGet.invoke(this, null); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } private String getMethodNameByField(String attribute) { String methodName = attribute.substring(0, 1).toUpperCase() + attribute.substring(1, attribute.length()); return methodName; } @Override public AttributeList getAttributes(String[] attributes) { // TODO Auto-generated method stub return null; } @Override public MBeanInfo getMBeanInfo() { // TODO Auto-generated method stub try { Class cls = this.getClass(); Method attributeGet = cls.getMethod("getTestField", null); Method attributeSet = cls.getMethod("setTestField", new Class[] { String.class }); ModelMBeanAttributeInfo attribute = new ModelMBeanAttributeInfo("testField", "description of field", attributeGet, attributeSet); Method m = cls.getMethod("testMethod", new Class[] { String.class }); /** * 添加一个mbean中的操作,用ModelMBeanOperationInfo来实现。 */ ModelMBeanOperationInfo testMethod = new ModelMBeanOperationInfo("testMethod", m); MBeanConstructorInfo mBeanConstructorInfo = new MBeanConstructorInfo("Constructor for ServerMonitor", cls .getConstructor(null)); MBeanInfo info = new MBeanInfo(cls.getName(), "my mbean server", new MBeanAttributeInfo[] { attribute }, new MBeanConstructorInfo[] { mBeanConstructorInfo }, new MBeanOperationInfo[] { testMethod }, null); System.out.println(info.getClassName() + this.hashCode()); return info; } catch (Exception e) { e.printStackTrace(); } return null; } @Override public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException, ReflectionException { /** * 这里用来处理jconsole里点击方法按钮调用后的操作,反射invoke过来。 */ System.out.println("invoking...." + actionName + "[]" + Arrays.toString(params)); Class[] paraClass = new Class[params.length]; for (int i = 0; i < params.length; i++) { paraClass[i] = params[i].getClass(); } try { Method m = this.getClass().getMethod(actionName, paraClass); return m.invoke(this, params); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { /** * 属性操作在这里进行,invoke */ Class cls = this.getClass(); try { String methodName = getMethodNameByField(attribute.getName()); Method attributeSet = cls.getMethod("set" + methodName, new Class[] { attribute.getValue() .getClass() }); attributeSet.invoke(this, attribute.getValue()); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public AttributeList setAttributes(AttributeList attributes) { return null; } }
四:注册MBean:
public class MyMBeanServer { public static void main(String[] args) { // MBeanServer server = MBeanServerFactory.createMBeanServer(); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); try { ObjectName helloName = new ObjectName("beans:name=MyMbean"); server.registerMBean(new MyMBean(), helloName); Thread.sleep(Integer.MAX_VALUE); } catch (InstanceAlreadyExistsException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MBeanRegistrationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotCompliantMBeanException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedObjectNameException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NullPointerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
五:运行本程序。
要想在jconsole里能看到本MBeanServer,还需要在启动的run里面加些参数,eclipse里面的为:
启动过后,cmd命令行启动 jconsole
选中本地的Main函数。
在mbean栏目可以看到已经发布的MBean。
ok!比较简单的了解下。
原生态的果然比较麻烦。不这样搞我都不知道内部是个啥东东。
发表评论
-
2013年技术愿望目标
2013-01-07 23:25 0一: 读源码 1:jetty 2:webx,spr ... -
jetty的http协议解析
2012-07-31 23:59 0上篇文章讲到:jetty的connection解析到hand ... -
jetty源码阅读之connection解析到handler调用
2012-07-29 21:58 0前言: 想要处理用户发出的http请求,首先得获得连接 ... -
jetty源码阅读之connector
2012-07-29 14:56 0AbstractConnector @Overr ... -
定时执行Timer的源码阅读
2012-02-22 18:51 1715Timer的实现原理: 1:timer简介; ... -
jetty翻译
2011-09-06 23:50 0异步等待 异 ... -
【转】mysql Host is blocked error错误解决方案
2011-08-01 14:40 2943Host is blocked because of ma ... -
java按值传递
2011-06-28 23:13 0来看看代码 packag ... -
【无聊的笔记】将数字转换为中文读法
2011-06-05 15:43 6283将阿拉伯数字的数变成我们常用的中文读法, 比如说: 1 ... -
用mina网络传输使用ObjectSerializationCodecFactory一个小注意点
2011-04-05 18:18 8718背景: 之前的 一篇介绍mina的博客中,提到通过mi ... -
jboss下的war包的context映射配置
2011-02-10 17:19 0一般web容器都可以在 deploy 目录下放多个war包, ... -
maven war plugin 的filter 配置。
2011-02-10 17:14 0具体可以参考,maven的官方配置。 http://m ... -
【why系列】内部类为什么访问外围内需要用final
2011-01-10 13:16 011111111111111 -
java命令行知多少(反正我知道的比较少)
2010-12-29 17:11 3863打开 %java_home%\bin 下面,看一堆的命令 ... -
【why系列】为什么序列化要实现一个空接口Serializable
2010-12-25 22:16 0啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 -
【why系列】为什么说java是不可变的对象
2010-12-25 22:15 0啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 package ... -
java线程总结
2010-12-23 15:25 01:java启动一个线程,会为每一个线程,分配一个 ... -
【监控】通过jmx获得系统的gc,内存情况
2010-11-27 21:52 6248通过jmx访问jvm知道的Mbean的一些信息,可以取得系统运 ... -
用spring连接jmx
2010-11-14 18:20 1818接着上一篇 “原生态连接jmx”的例子。 上一篇中,发 ... -
采用hudson跟踪代码质量:单元测试和findbug报表
2010-10-31 22:17 0hu
相关推荐
例如,使用`queryMBeans()`方法可以列出所有注册的MBeans,`getAttribute()`和`setAttribute()`用于读写属性,`invoke()`用于调用操作。 5. **关闭连接**:在完成远程操作后,别忘了调用`JMXConnector.close()`来...
JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...
Java Management Extensions(JMX)是Java平台上的一个标准API,用于管理和监控应用程序、服务和设备。JMX允许开发者创建管理接口,这些接口可以被本地或远程的管理工具使用,以便监控和配置应用的状态。在本实例中...
Java Management Extensions(JMX)是Java平台中用于管理和监控应用程序、操作系统、网络设备等资源的一种标准框架。通过JMX,开发者可以创建管理代理(MBeans),这些代理暴露了各种管理特性,使得系统管理员可以...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、服务和设备。JMX允许开发者创建管理接口,以便在运行时收集和操作应用的状态信息。本示例是一个简单的JMX实现,适合初学者...
jmx监控ActiveMQ监控 jmx(Java Management Extensions)是一种Java技术,为Java应用程序提供了管理和监控的功能。ActiveMQ是Apache软件基金会下的一个开源消息队列系统,提供了高效、可靠的消息传递服务。在生产...
4. 设置阈值报警,当某些关键指标超过预设值时,自动触发警报通知。 5. 可以考虑将JMX数据集成到第三方监控系统(如Prometheus、Grafana或Zabbix)中,实现可视化展示和告警。 在实际操作中,`hbase-monitor`这个...
通过JMX,开发者可以实现自定义的监控解决方案,例如收集性能指标、触发警报或自动调整系统设置。这个项目为那些希望深入了解Java应用服务器监控并实现定制化管理的人员提供了一个有价值的参考。理解JMX的工作原理和...
在实际应用中,`jmx-tools`中的工具可以帮助开发者监控和诊断应用程序的性能问题,进行故障排查,以及进行自动化运维。例如,通过`HtmlAdaptorServer`,开发人员可以创建自定义的监控页面,展示关键性能指标,或者...
JMX广泛应用于系统监控、性能分析、故障诊断和自动化管理等领域。例如,它可以用来监控内存使用、线程状态、数据库连接池等。在大型分布式系统中,JMX通过提供标准化的管理接口,使得运维人员能有效地管理和维护...
《JMX in Action》是一本深入探讨Java管理扩展(Java Management Extensions, JMX)技术的专业书籍,对于希望理解和掌握JMX的IT从业者来说,是一份不可或缺的参考资料。JMX是Java平台上的一个标准组件,它提供了管理...
【JMX 一步步来】 JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念...
Java Management Extensions(JMX)是一种Java平台上的框架,用于管理和监控应用程序、系统和服务。...总的来说,JMX因其灵活性、标准化和广泛的生态系统支持,成为了Java环境中不可或缺的管理工具。
在实际应用中,JMX与Spring的结合可以通过Spring Boot进一步简化,Spring Boot自动配置了JMX支持,只需要简单的配置就能开启远程监控。同时,JConsole和VisualVM等工具可以帮助我们直观地查看和操作通过JMX暴露的...
Java Management Extensions (JMX) 是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备。`jmxri-1.2.1.jar` 和 `jmxtools-1.2.1.jar` 是与JMX相关的两个核心库文件,它们在Java应用程序中扮演...
它可以帮助自动化JMX数据的收集,便于集成到监控解决方案中。 4. `jmxtools.jar`: 这是JMX Tools JAR文件,包含了用于本地和远程JMX操作的实用工具和API。例如,`jconsole`就是基于这个JAR包的,它是一个图形化的...
Java Management Extensions (JMX) 是 Java 平台中用于管理和监控应用程序、系统和服务的一个标准框架。JMX API 提供了一套接口和类,使得开发者能够创建管理工具、服务和组件,以便于监视和控制运行时的环境。在这...
### 网络管理之JMX开发实战 #### JMX技术概述 JMX(Java Management Extensions)是一种标准的Java技术,用于管理和监控应用程序、设备、系统等资源。它提供了多种方式来管理Java应用,包括使用MBeans(Managed ...
Fiddler导出jmx文件,解决Fiddler导出文件中 没有jmx文件选项,各个版本fiddler都适用