- 浏览: 367441 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1668Timer的实现原理: 1:timer简介; ... -
jetty翻译
2011-09-06 23:50 0异步等待 异 ... -
【转】mysql Host is blocked error错误解决方案
2011-08-01 14:40 2840Host is blocked because of ma ... -
java按值传递
2011-06-28 23:13 0来看看代码 packag ... -
【无聊的笔记】将数字转换为中文读法
2011-06-05 15:43 6222将阿拉伯数字的数变成我们常用的中文读法, 比如说: 1 ... -
用mina网络传输使用ObjectSerializationCodecFactory一个小注意点
2011-04-05 18:18 8660背景: 之前的 一篇介绍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 3813打开 %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 6174通过jmx访问jvm知道的Mbean的一些信息,可以取得系统运 ... -
用spring连接jmx
2010-11-14 18:20 1782接着上一篇 “原生态连接jmx”的例子。 上一篇中,发 ... -
采用hudson跟踪代码质量:单元测试和findbug报表
2010-10-31 22:17 0hu
相关推荐
JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...
jmx快速上手 jmx快速上手 jmx快速上手 jmx快速上手
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础
Fiddler导出jmx文件,解决Fiddler导出文件中 没有jmx文件选项,各个版本fiddler都适用
Description Resource Path Location Type Missing artifact com.sun.jmx:jmxri:jar:1.2.1 pom.xml /eshop-storm line 2 Maven Dependency Problem
适用于想使用JMeter编写脚本的学者
jmx配置
JBoss JMX实现架构 JBoss JMX实现架构
JMX小例子以及介绍 JMX小例子以及介绍 JMX小例子以及介绍
catalina-jmx-remote.jar放到tomcat/lib目录下 如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行: set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA...
Hbase和Hadoop JMX监控实战
JMX与JMS的概念
java实现Jmx实例,jmxdemo项目源码下载
JMX一步一步来,从最基本的应用开始入手,快速应用开发。
jmx的简单介绍和使用,包含一些简单的代码示例,看完基本能了解jmx并使用。
jmx和jmx在glassfish中的应用
有关JMX学习的一些文档,对初学JMX的朋友有帮助.
JMX实战,原版经典
activeMQ开启jmx固定rmi端口,穿透防火墙,用了一天的时间,踩了无数的坑,拿出来共享.