JmxTest
package mbeanTest; import java.util.Set; import javax.management.Attribute;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.modelmbean.RequiredModelMBean; public class JmxTest
{
/**
* 测试标准MBean 需要被管理的方法、属性等在接口中定义好,创建一个类,继承此接口,然后实现时候方法,
* 这样,但注册到MBeanServer的时候,会自动管理其,接口中的各个属性、方法。
*
* @throws Exception
*/ public void test1StandardMBean() throws Exception
{
// MBeanServer ms = MBeanServerFactory.createMBeanServer("JMX2Test");
MBeanServer ms = MBeanServerFactory.createMBeanServer();
ObjectName name = new ObjectName("Hellogg:type=myfirstMbean"); // ms.createMBean("HelloWorld", objectName);
HelloWorld hello = new HelloWorld(" yao yao , qie ke nao "); // MBean需要实现NotificationBroadcaster接口,支持各种事件的发送和处理
hello.addNotificationListener(new NotificationListener()
{ public void handleNotification(Notification notification,
Object handback)
{
System.out.println(" access listen : " + notification);
}
}, null, null); ms.registerMBean(hello, name); String s1 = (String) ms.getAttribute(name, "Hello");
System.out.println(" the init value1 : " + s1); ms.setAttribute(name, new Attribute("Hello", " hi ,hi ,man "));
String s2 = (String) ms.getAttribute(name, "Hello");
System.out.println(" the init value2 : " + s2); ms.invoke(name, "message", new Object[]{ " i as message " }, new String[]{ "java.lang.String" }); ObjectName name2 = new ObjectName("Hellogg:type=myfirstMbean");
Set<ObjectInstance> set = ms.queryMBeans(name2, null);
System.out.println("set: "+set);
} /**
* 动态Mbean,需要实现DynamicMBean接口,并且任何需要,管理的方法、属性,都需要在接口的方法中,
* 自己来实现,Mbeaninfo也需要自己设置,这样编程的工作量大,但是有很大的可控性。
*
* @throws Exception
*/ public void test2DynamicMBean() throws Exception
{
HelloWorldDynamic dynamic = new HelloWorldDynamic(); MBeanServer ms = MBeanServerFactory.createMBeanServer();
// 创建一个ObjectName
ObjectName name = new ObjectName("DynamicHello:type=dinamicMbean"); // 注册动态MBean到MBeanServer服务上去
ms.registerMBean(dynamic, name); // 得到属性值
Object o = ms.getAttribute(name, "getInstance");
String hello = (String) ms.getAttribute(name, "gh");
MBeanOperationInfo operation = dynamic.getMBeanInfo().getOperations()[0];
System.out.println(" attribute value of getInstance:" + o
+ "; attribute value of gh:" + hello); // 执行一个方法(操作)
ms.invoke(name, operation.getName(), null, null);
} public void test3RequiredModelMBean() throws Exception
{
HelloWorldModelMBean hello = new HelloWorldModelMBean(); MBeanServer ms = MBeanServerFactory.createMBeanServer();
RequiredModelMBean modelMbean = hello.createModelBean();
ObjectName name = new ObjectName("RequiredMBeanHello:type=ModelMbean");
// 监听属性变化事件
modelMbean.addAttributeChangeNotificationListener(
new NotificationListener()
{
@Override
public void handleNotification(Notification notification,
Object handback)
{
System.out.println(" --Attribute已经改变-- ");
}
}, null, null);
ms.registerMBean(modelMbean, name); //ms.invoke(name, "setHello", new Object[]{ " 调用setHello方法 " }, new String[]{ "java.lang.String" });
String s = (String) ms.getAttribute(name, "hello");
// 出发Attribute改变事件
// ms.setAttribute(name, new Attribute("hello", "bbb"));
String s2 = (String) ms.getAttribute(name, "hello"); System.out.println(s);
System.out.println(s2);
} public static void main(String args[]) throws Exception
{ JmxTest jmx = new JmxTest();
jmx.test3RequiredModelMBean(); } }
JmxTest的更多相关文章
- JMX
一.为什么使用JMX,解决那些问题 举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢? 写死在程序里,到要改变时就去改程序,然后再编译发布: ...
- Tomcat Server Configuration Automation Reinforcement
目录 . 引言 . 黑客针对WEB Server会有那些攻击面 . 针对Tomcat Server可以做的安全加固 . Managing Security Realms with JMX . 实现对T ...
- JMX超详细解读
一.JMX的定义 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架.JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和 ...
- JMX-JAVA进程监控利器
Java 管理扩展(Java Management Extension,JMX)是从jdk1.4开始的,但从1.5时才加到jdk里面,并把API放到java.lang.management包里面. 如 ...
- cassandra高级操作之JMX操作
需求场景 项目中有这么个需求:统计集群中各个节点的数据量存储大小,不是记录数. 一开始有点无头绪,后面查看cassandra官方文档看到Monitoring章节,里面说到:Cassandra中的指标使 ...
- JMX超详细解读<转>
一.JMX的定义 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架.JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和 ...
- jmx学习
原文地址:https://www.cnblogs.com/dongguacai/p/5900507.html 一.JMX的定义 JMX(Java Management Extensions)是一个为应 ...
- 运用JMX监控Tomcat
1.先配Tomcat的启动语句,window下tomcat的bin/catalina.bat(linux为catalina.sh),在头上注释部分(.bat为rem..sh为#)后面加上set JAV ...
- 如何监控Tomcat服务器
如何监控Tomcat服务器 发表于:2009-06-25来源:作者:点击数:2651 标签:tomcatTomcat服务器 在进行 性能测试 时,一般都需要对应用服务器进行监控,监控的指标包括应用服务 ...
随机推荐
- ADB WIFI无线调试真正摆脱usb数据线连接,一次也不用!
常见的使用ADB无线调试步骤 手机"开发者模式"菜单中开启"USB调试" 和"无线调试",手机网络与电脑在同一网内; 手机使用USB与电脑进 ...
- spark structured-streaming 最全的使用总结
一.spark structured-streaming 介绍 我们都知道spark streaming 在v2.4.5 之后 就进入了维护阶段,不再有新的大版本出现,而且 spark strea ...
- Java-基础-HashMap
1. 简介 Java8 HashMap结构(数组 + 列表 + 红黑树)如图: 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和 ...
- 【AI测试】人工智能 (AI) 测试--开篇
人工智能测试 什么是人工智能,人工智能是怎么测试的.可能是大家一开始最想了解的.大家看图中关于人工智能的定义.通俗点来说呢,就是 让机器实现原来只有人类才能完成的任务:比如看懂照片,听懂说话,思考等等 ...
- vue监听器watch & 计算属性computed
侦听器watch vue中watch是用来监听vue实例中的数据变化 watch监听时有几个属性: handle:其值是一个回调函数,就是监听对象对话的时候需要执行的函数 deep:其值true 或者 ...
- 【机器学习基础】关于深度学习的Tips
继续回到神经网络章节,上次只对模型进行了简要的介绍,以及做了一个Hello World的练习,这节主要是对当我们结果不好时具体该去做些什么呢?本节就总结一些在深度学习中一些基本的解决问题的办法. 为什 ...
- [源码解析] PyTorch 分布式(4)------分布式应用基础概念
[源码解析] PyTorch 分布式(4)------分布式应用基础概念 目录 [源码解析] PyTorch 分布式(4)------分布式应用基础概念 0x00 摘要 0x01 基本概念 0x02 ...
- oracle 使用union提示ORA-00907:缺少右括号
在使用union的时候提示:ORA-00907:缺少右括号 此原因是因为在union的左边和右边都有order by,因此需要去掉一边的order by,保留一个即可. 例如: select * fr ...
- web前端学习路径推荐
如果你是从其他行业转行到web前端开发领域,如果你没有计算机方面基础,建议大家先从最基础的网页制作开始学习,web前端的范围非常广泛,现在已经达到了大前端的要求,不过薪资待遇也是越来越好,可以说前端开 ...
- liunx基础知识点1:系统管理相关命令、目录操作命令、文本编辑、关闭防火墙、重启和关闭
Linux(一) liunx系统那么重要,作为一个测试人员,不掌握你就损失了好几千,为了这个钱,也为了面子,什么鬼?我爱膨胀.你看看这些知识喽.我整理的,可费工夫了. 下次给大家一个面试题啊,更直观