当前位置: 首页 > news >正文

JMX入门之StandardMBean HelloWord

(作者原创,可以任意转载请注明出处)

http://blog.csdn.net/zmxj

这个简单的Mbean只有一个属性和一个方法,StardBeanDemoMain 为调用类,
main方法中调用下面三个方法,代码中都有详细的注释:
sbean.doRegistBean();
sbean.doManageBean();
sbean.regHtmlAdaptor();

运行后,可以看到控制台打印的信息,
register StandMbean sucess..
Attribute:state -init value
Attribute:state 2 -new state
My service start.....

由于启动了HtmlAdaptor的服务,所以程序一直处于运行状态,(HtmlAdaptor是sun jmx实现自带的一个适配器)测试可以在浏览器中访问:
http://localhost:8082 就可以在浏览器中管理mbean了,在List of MBean operations下面按startService 按钮,可以看到控制台打出的信息,说明startService方法被调用了。Jdk1.4下需要jmxri.jar和jmxtools.jar两个包,Jdk50已经包括了Jmx的api。

/**
* Mbean接口
* StandBeanMBean.java
* @author zmxj
*/
public interface StandBeanMBean {

public String getState() ;

public void setState(String s) ;

public void startService();
}

/**
* Mbean实现
* StandBean.java
* @author zmxj
*/
public class StandBean implements StandBeanMBean {

private String state = "init value";

public String getState() {
return state;
}

public void setState(String s) {
state = s;
}

public void startService() {
System.out.println("My service start.....");
}

}

import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;

import com.sun.jdmk.comm.HtmlAdaptorServer;

/**
* Agent类
* StardBeanDemoMain.java
* @author zmxj
*/
public class StardBeanDemoMain {

private MBeanServer mBserver = null;

ObjectName mbeanObjectName = null;
String domain = null;
String mbeanName = "StandBean";

public static void main(String[] args) {

StardBeanDemoMain sbean = new StardBeanDemoMain();

sbean.doRegistBean();
sbean.doManageBean();
sbean.regHtmlAdaptor();
}

/**
* 创建MBeanServer并注册一个Mbean
*/
private void doRegistBean()
{
//创建MBeanServer
mBserver = MBeanServerFactory.createMBeanServer();
domain = mBserver.getDefaultDomain();

try {
mbeanObjectName = new ObjectName(domain + ":type=" + mbeanName);

/*
//这里可以直接创建并且同时注册一个mbean到MBeanServer.
server.createMBean(mbeanName,mbeanObjectName);
*/

StandBean bean = new StandBean();
mBserver.registerMBean(bean, mbeanObjectName);

System.out.println("register StandMbean sucess..");
} catch(MalformedObjectNameException e) {
e.printStackTrace();
System.exit(1);
} catch(Exception e){
e.printStackTrace();
System.exit(1);
}

}

/*
* 演示管理mbean,通过mbserver修改mbean的属性和执行mbean的方法
*/
private void doManageBean()
{
try {
ObjectName mbeanObjectName = new ObjectName(domain + ":type=" + mbeanName);

System.out.println("Attribute:state -"+mBserver.getAttribute(mbeanObjectName,"State"));

//修改属性State
Attribute stateAttribute = new Attribute("State","new state");
mBserver.setAttribute(mbeanObjectName, stateAttribute);

//取得属性值
System.out.println("Attribute:state 2 -"+mBserver.getAttribute(mbeanObjectName,"State"));

//调用方法startService
mBserver.invoke(mbeanObjectName,"startService",null,null);

} catch (Exception e) {
e.printStackTrace();
}
}

/*
* 注册HtmlAdaptor,注册后可以通过http://localhost:8082执行mbean管理操作
*/
private void regHtmlAdaptor()
{
HtmlAdaptorServer html = new HtmlAdaptorServer();
ObjectName html_name = null;
try {
html_name = new ObjectName("Adaptor:name=html,port=8082");
mBserver.registerMBean(html, html_name);
} catch(Exception e) {
System.out.println("\t!!! Could not create the HTML adaptor !!!");
e.printStackTrace();
return;
}
html.start();
}
}

<iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4465827781731051&amp;dt=1125637635921&amp;format=468x60_as&amp;output=html&amp;ad_type=text_image&amp;nloc=http://blog.csdn.net/fckeditor/editor/fckeditor.html?InstanceName=Editor_Edit_FCKEditor&amp;Toolbar=Default&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=16&amp;u_tz=540&amp;u_his=9&amp;u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="65535"></iframe>

相关文章:

  • 力扣Leetcode:1. 两数之和(C++、Python、Java)
  • 最长公共子序列
  • 国科大.图像处理.期末复习笔记手稿
  • 喝茶减少电脑对自身的伤害
  • 2020计算机专业保研夏令营面经:南科大计算机
  • 无耻的愤怒
  • 力扣Leetcode:2. 两数相加(C++、Python、Java)
  • 解决jsp程序不直接、代码与UI混杂的痛: JSPWidget
  • Python TypeError: unsupported operand type(s) for /: ‘list‘ and ‘int‘
  • Hello,.NET Compact Framework 2.0(二)
  • 力扣Leetcode:4. 寻找两个正序数组的中位数(Python)
  • Smart Client Case Study Source Code Download from MSDN China
  • 力扣Leetcode:5. 最长回文子串(Python)
  • 古诗词推荐(一):春风十里扬州路,卷上珠帘总不如
  • 终于签完了
  • 【翻译】babel对TC39装饰器草案的实现
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS魔法堂:Absolute Positioning就这个样
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Fabric架构演变之路
  • Java|序列化异常StreamCorruptedException的解决方法
  • java多线程
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • mysql 5.6 原生Online DDL解析
  • 一道面试题引发的“血案”
  • 译有关态射的一切
  • 用mpvue开发微信小程序
  • 2017年360最后一道编程题
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #pragma multi_compile #pragma shader_feature
  • $.ajax()
  • (ZT)一个美国文科博士的YardLife
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)ObjectiveC 深浅拷贝学习
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • [ SNOI 2013 ] Quare
  • [BT]BUUCTF刷题第8天(3.26)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [Docker]五.Docker中Dockerfile详解
  • [HNOI2008]Cards
  • [HOW TO]如何在iPhone应用程序中发送邮件
  • [iOS]如何删除工程里面用cocoapods导入的第三方库
  • [JS]变量
  • [MAT]使用MAT比較多个heap dump文件
  • [Ruby] 基础知识
  • [Silverlight 4 RC]RichTextBox概览
  • [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY